上一篇:spring boot 1.5.4 整合log4j2(十一)
Spring Boot集成Mybatis
更多更详细的配置参考文件:application.properties和《SpringBoot之application配置详解》(新版本新增属性缺失) 或参考官网http://projects.spring.io/spring-boot/
Spring Boot集成Mybatis有两种方式:
方式一:传统的引入外部资源配置的方式,方便对mybatis的控制;
方式二:mybatis官方提供spring-boot整合的方式。
这里,还是使用UserMapper类和userMapper.xml文件分离的做法。关于mapper.xml的sql语句可以直接集成到Mapper接口中。详见第4章节:将SQL语句集成到UserMapper接口类中
1 方式一:整合mybatis资源
1.1 新建spring-boot-mybatis项目
spring-boot-mybatis项目源码地址:https://git.oschina.net/wyait/springboot1.5.4.git
项目整体结构:
1.2 pom.xml
<projectxmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!--spring boot项目的parent -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<groupId>com.wyait.boot</groupId>
<artifactId>spring-boot-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<!--spring boot 引入Web模块。自动配置:tomcat、springmvc、jackson等 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!--spring-boot整合mybatis-->
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--MyBatis提供了拦截器接口,我们可以实现自己的拦截器,将其作为一个plugin装入到SqlSessionFactory中。 Github上有位开发者写了一个分页插件,我觉得使用起来还可以,挺方便的。
Github项目地址:https://github.com/pagehelper/Mybatis-PageHelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
<!--tomcat 的支持. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--添加<scope>provided</scope>,因为provided表明该包只在编译和测试的时候用 -->
<scope>provided</scope>
</dependency>
<dependency>
<!--jsp页面支持 -->
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<!--这里需要指定版本,否则报错【有可能是spring-boot-1.5.4.RELEASE版本没有管理log4j版本的原因】 -->
<version>1.3.2.RELEASE</version>
</dependency>
<!--spring boot集成Swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<!--devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false或者视图解析器设置缓存为false来实现),
实现类文件热部署(类文件修改后不会立即生效,待编译后生效),实现对属性文件的热部署。即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<!--optional=true,依赖不会传递,该项目依赖devtools;之后依赖SpringBoot1项目的项目如果想要使用devtools,需要重新引入 -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--配置spring boot之maven插件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--<configuration> fork : 如果没有该项配置,devtools不会起作用,即应用不会restart 【实测:可以不配置】
<fork>true</fork></configuration> -->
</plugin>
</plugins>
</build>
</project>
1.3 Application.java
// 这是一个配置Spring的配置类
@Configuration
// @SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置,自动扫描该类同级包以及子包。
@SpringBootApplication
public class Application {
publicstatic void main(String[] args) {
//启动spring boot应用
SpringApplicationsa = new SpringApplication(Application.class);
//禁用devTools热部署
System.setProperty("spring.devtools.restart.enabled","false");
//禁用命令行更改application.properties属性
sa.setAddCommandLineProperties(false);
sa.run(args);
}
}
1.4 mybatis相关配置类:集成pageHelper分页插件,并开启事务
@Configuration
@EnableTransactionManagement
// 开启注解事务支持
public class MybatisConfigimplements TransactionManagementConfigurer {
//spring容器管理,可以直接注入使用
@Autowired
DataSourcedataSource;
@Bean(name= "sqlSessionFactory")
publicSqlSessionFactory sqlSessionFactoryBean() {
SqlSessionFactoryBeanbean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.wyait.boot.pojo");
//分页插件
PageHelperpageHelper = new PageHelper();
Propertiesproperties = new Properties();
properties.setProperty("reasonable","true");
properties.setProperty("supportMethodsArguments","true");
properties.setProperty("returnPageInfo","check");
properties.setProperty("params","count=countSql");
pageHelper.setProperties(properties);
//添加插件
bean.setPlugins(newInterceptor[] { pageHelper });
//添加XML目录
ResourcePatternResolverresolver = new PathMatchingResourcePatternResolver();
try{
bean.setMapperLocations(resolver
.getResources("classpath:mybatis/*.xml"));
returnbean.getObject();
}catch (Exception e) {
e.printStackTrace();
thrownew RuntimeException(e);
}
}
@Bean
publicSqlSessionTemplate sqlSessionTemplate(
SqlSessionFactorysqlSessionFactory) {
returnnew SqlSessionTemplate(sqlSessionFactory);
}
//开启注解事务
@Bean
@Override
publicPlatformTransactionManager annotationDrivenTransactionManager() {
returnnew DataSourceTransactionManager(dataSource);
}
}
1.5 TODO 编写实体类、service、mapper、mapper.xml
1.6 启动,测试
详见项目:
mybatis-spring-boot项目源码地址:https://git.oschina.net/wyait/springboot1.5.4.git
2 方式二:mybatis整合spring-boot
mybatis-spring-boot项目源码地址:https://git.oschina.net/wyait/springboot1.5.4.git
2.1 新建mybatis-spring-boot工程
项目结构:
Application.java
// 这是一个配置Spring的配置类
@Configuration
// @SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置,自动扫描该类同级包以及子包。
@SpringBootApplication
//@MapperScan(basePackages ="com.wyait.boot.dao")
public class Application {
publicstatic void main(String[] args) {
//启动spring boot应用
SpringApplicationsa = new SpringApplication(Application.class);
//禁用devTools热部署
System.setProperty("spring.devtools.restart.enabled","false");
//禁用命令行更改application.properties属性
sa.setAddCommandLineProperties(false);
sa.run(args);
}
}
2.2 pom.xml
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!--spring boot项目的parent -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<groupId>com.wyait.mybatis</groupId>
<artifactId>mybatis-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<!--spring boot 引入Web模块。自动配置:tomcat、springmvc、jackson等 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!--spring-boot整合mybatis-->
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<!--pageHelper分页插件 -->
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- MyBatis提供了拦截器接口,我们可以实现自己的拦截器,将其作为一个plugin装入到SqlSessionFactory中。 Github上有位开发者写了一个分页插件,我觉得使用起来还可以,挺方便的。
Github项目地址:https://github.com/pagehelper/Mybatis-PageHelper -->
<!--<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>-->
<!--tomcat 的支持. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--添加<scope>provided</scope>,因为provided表明该包只在编译和测试的时候用 -->
<scope>provided</scope>
</dependency>
<dependency>
<!--jsp页面支持 -->
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<!--这里需要指定版本,否则报错【有可能是spring-boot-1.5.4.RELEASE版本没有管理log4j版本的原因】 -->
<version>1.3.2.RELEASE</version>
</dependency>
<!--spring boot集成Swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<!--devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false或者视图解析器设置缓存为false来实现),
实现类文件热部署(类文件修改后不会立即生效,待编译后生效),实现对属性文件的热部署。即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<!--optional=true,依赖不会传递,该项目依赖devtools;之后依赖SpringBoot1项目的项目如果想要使用devtools,需要重新引入 -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--配置spring boot之maven插件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--<configuration> fork : 如果没有该项配置,devtools不会起作用,即应用不会restart 【实测:可以不配置】
<fork>true</fork></configuration> -->
</plugin>
</plugins>
</build>
</project>
2.3 application.properties配置:集成pageHelper,指定mapper.xml路径
# mysql
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 使用druid连接池 需要注意的是:spring.datasource.type旧的spring boot版本是不能识别的。
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# mybatis
mybatis.type-aliases-package=com.wyait.boot.pojo
mybatis.mapper-locations=classpath:mapper/*.xml
# 通用mapper配置
#mapper.mappers=com.wyait.boot.dao
#mapper.not-empty=false
#mapper.identity=MYSQL
# pagehelper
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.returnPageInfo=check
pagehelper.params=count=countSql
2.4 UserMapper
TODO 详见项目
mybatis-spring-boot项目源码地址:https://git.oschina.net/wyait/springboot1.5.4.git
在接口上添加@Mapper注解即可或者在Application上添加扫描:@MapperScan(basePackages = "com.wyait.boot.dao")
2.5 启动,测试结果
3 将SQL语句集成到UserMapperXML接口类中
写法:
@Mapper
public interface UserMapperXML {
@Select("SELECT * FROM USERWHERE NAME = #{name}")
public UserfindUser(@Param("name") String name);
@Select("SELECT * FROMUSER")
public List<User>findAllUser();
/**
*
* @描述:更新用户信息
* @创建人:wyait
* @创建时间:2017年6月29日下午1:33:09
* @param user
* @return
*/
@Update("update user setage=#{age} where id=#{id}")
public int update(User user);
}
更多用法可进行百度。
4 总结
项目:mybatis-spring-boot整合了Mapper接口分离Sql在xml中的写法和注解sql写法。详见项目源码。
spring boot系列文章:
spring boot 1.5.4 集成devTools(五)
spring boot 1.5.4 集成JdbcTemplate(六)
spring boot 1.5.4 集成spring-Data-JPA(七)
spring boot 1.5.4 定时任务和异步调用(十)
spring boot 1.5.4 整合log4j2(十一)
spring boot 1.5.4 整合 mybatis(十二)
spring boot 1.5.4 整合 druid(十三)