如何纯注解整合Spring SpringMVC Mybatis

Posted Huterox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何纯注解整合Spring SpringMVC Mybatis相关的知识,希望对你有一定的参考价值。

文章目录

前言

心血来潮想要玩玩最原始的SSM,结果发现还有好多人的都是基于配置文件的一个创建方式,那么今天的话就带来基于配置类,基于注解来配置的一个方案吧,这样的SSM开发也可以变得和SpringBoot一样短平快。顺便冒个泡泡,后面有空咱们还得聊聊SpringBoot这个崽做了什么,如何做一个start。那么废话不多说发车了,let’s go!

项目创建

咱们这里就直接创建一个最简单的webapp的maven项目。

之后打开项目,创建一下模块

依赖导入

咱们这边的话还是说玩纯注解开发,然后也是摒弃jsp,我们这边选择这个vue来代替jsp,众所周之,vue 是有两个创建方式的。那么我们这边是倾向于vue+restful风格的,那么接下来的话也是打算记录一些SSM到SpringCloud到k8s的随笔系列。
我们导入如下依赖,同时删除使用webapp模板创建的一些插件啥的,保持maven pom文件的清爽。

  <dependencies>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.22</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.3.22</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.3.22</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.10</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.30</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.11</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.4</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.7</version>
    </dependency>

  </dependencies>


这里没有导入spring-context 因为在spring-mvc是有的。

那么咱们这个依赖里面主要第一个mybatis和spring整合的一些依赖以及咱们的Jackson,后面咱们用json玩,所以需要这个。

tomcat 插件

这里主要说一下的是tomcat8是没有的,但是如果我们要导入的话需要这样做:


  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat8-maven-plugin</artifactId>
        <version>3.0-r1655215</version>
        <configuration>
          <port>8080</port>
          <path>/</path>
          <uriEncoding>UTF-8</uriEncoding>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <!--配置Tomcat8仓库-->
  <pluginRepositories>
    <pluginRepository>
      <id>alfresco-public</id>
      <url>https://artifacts.alfresco.com/nexus/content/groups/public</url>
    </pluginRepository>
    <pluginRepository>
      <id>alfresco-public-snapshots</id>
      <url>https://artifacts.alfresco.com/nexus/content/groups/public-snapshots</url>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>daily</updatePolicy>
      </snapshots>
    </pluginRepository>
    <!--这个google的用不了-->
    <!--<pluginRepository>
        <id>beardedgeeks-releases</id>
        <url>http://beardedgeeks.googlecode.com/svn/repository/releases</url>
    </pluginRepository>-->
  </pluginRepositories>


但是这里有点问题,在我的实际环境里面,如果有问题的话还是使用7的吧,高版本的可能都会有点问题。

tomcat 7 插件

那么如果有问题的话,那么咱们就直接用7的。

<build>
	<plugins>

		<plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>

			<configuration>				
				<path>/</path> <!--项目访问路径。当前配置的访问是localhost:9090/, 如果配置是/aa,则访问路径为localhost:9090/aa -->
				<port>9090</port>
				<uriEncoding>UTF-8</uriEncoding><!-- 非必需项 -->
			</configuration>
		</plugin>

	</plugins>
</build>

然后在这里配置一下:

就可以跑了。

使用本地tomcat8

我这里的话还是喜欢tomcat8的,然后用本地的。

在idea里面比较智能的是,这玩意你第一次打开会提示Fix,你点击一下就不要自己搞了。之后运行成功。

创建配置类

我们不用XML的原因是spring对注解的支持嘛,我们用配置类来代替application.xml。
我们创建如下配置:

这里咱们没有数据层,因为数据库里面没东西,那个mapper的话可以不要了,反正咱们是纯注解开发。

SpringConfig

@Configuration
@ComponentScan("com.huterox.service")
@PropertySource("classpath:jdbc.properties")
@Import(DuridConfig.class,MybatisConfig.class)
public class SpringConfig 



DuridConfig

这个其实jdbc的一个配置。

咱们这里面提出了一个配置文件,


import javax.sql.DataSource;

public class DuridConfig 
    @Value("$jdbc.driver")
    private String driver;
    @Value("$jdbc.url")
    private String url;
    @Value("$jdbc.username")
    private String username;
    @Value("$jdbc.password")
    private String password;

    @Bean
    public DataSource dataSource()
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    


mybatis配置

这个主要是sqlsessionfactory 和 mapper地址,其实就是你的dao层。


public class MybatisConfig 

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource)
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.huterox.dao");
        return factoryBean;
    

    public MapperScannerConfigurer mapperScannerConfigurer()
        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
        scannerConfigurer.setBasePackage("com.huterox.dao");
        return scannerConfigurer;
    



MVC配置

@Configuration
@ComponentScan("com.huterox.controller")
@EnableWebMvc
public class SpringMvcConfig 


这里的话,单独把mvc的配置搞出来了,其实没有必要一起放在Spring里面也是可以的。但是咱们这边规范一点。

Servlet配置

MVC其实还是用这个Servlet的是吧,用tomcat是吧,做了一个dispatch,一般呢,咱们是在web.xml里面去配置,例如路径啊,启动类啊,一般是启动到咱们的mvc的一个容器。那么咱们这边也是做整合,要这个Spring去整合到mybatis,mvc的实现也是用到了springIOC的,所以在里面也mvc里面有spring-context.

那么为了能够让咱们的这个正常启动,我们使用配置,然后tomcat启动的时候会发现这个配置,因为我们接下来要继承一个类,然后重写方法,所以启动的时候呢,会把咱们的SpringMVC,和 Spring容器都启动,然后完成工作。

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer 

    protected Class<?>[] getRootConfigClasses() 
//        子容器
        return new Class[]SpringConfig.class;
    

    protected Class<?>[] getServletConfigClasses() 
//        父容器,MVC可以访问Spring容器,可以不单独提取出来SpringConfig
//        统一配置,然后填这里就完了。
        return new Class[]SpringMvcConfig.class;
    

    protected String[] getServletMappings() 
        return new String[]"/";
    


测试

由于咱们这里面没有dao,所以这方面没法演示,也没有办法演示事务。

所以这里就测试web吧,之后咱们用这套直接纯注解开发,已经2202年了是吧。

总结

这个没啥好说的,又水了一篇博客~

以上是关于如何纯注解整合Spring SpringMVC Mybatis的主要内容,如果未能解决你的问题,请参考以下文章

spring+springmvc+mybatis-plus 纯注解开发

Spring07_纯注解实战及Spring整合Junit

Spring07_纯注解实战及Spring整合Junit

Spring 从入门到精通系列 08——使用纯注解的方式实现 IOC 案例与 Junit 整合

基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)

JavaEE框架——Springmvc入门(注解URL核心类详解文件上传和下载)和Spring的整合