上一篇: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相关项目源码,
码云地址:https://git.oschina.net/wyait/springboot1.5.4.git
github地址:https://github.com/wyait/spring-boot-1.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 启动,测试
TODO
2 方式二:mybatis整合spring-boot
mybatis-spring-boot项目源码地址:
spring-boot相关项目源码,
码云地址:https://git.oschina.net/wyait/springboot1.5.4.git
github地址:https://github.com/wyait/spring-boot-1.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相关项目源码,
码云地址:https://git.oschina.net/wyait/springboot1.5.4.git
github地址:https://github.com/wyait/spring-boot-1.5.4.git
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(十三)
spring boot 1.5.4 之监控Actuator(十四)
spring boot 1.5.4 整合webService(十五)
spring boot 1.5.4 整合redis、拦截器、过滤器、监听器、静态资源配置(十六)
spring boot 1.5.4 整合rabbitMQ(十七)
转载于:https://blog.51cto.com/wyait/1969626