使用Mybatis
Mybatis官方提供了整合Spring Boot的Starter,需要在Spring Boot应用中使用Mybatis,需要在pom.xml中添加如下依赖,当前最新的版本是1.3.2。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
mybatis-spring-boot-starter
默认会扫描@SpringBootApplication
标注的Class所在package下的标注了@org.apache.ibatis.annotations.Mapper
的接口作为Mapper,并注册为Spring bean。所以此时可以定义类似如下这样的Mapper接口。
@Mapper
public interface UserMapper {
@Select("select * from tb_user where username=#{username}")
User findByUsername(String username);
}
然后可以在需要的地方遵循Spring规范进行自动注入即可。
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findByUsername(String username) {
return this.userMapper.findByUsername(username);
}
}
以上就是最简单的在Spring Boot应用中使用Mybatis的方式了。Mybatis的自动配置由org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
负责,其会自动寻找DataSource bean,然后注册SqlSessionFactory、SqlSessionTemplate类型的bean,并能自动扫描Mapper接口。
如果不想通过注解写SQL,想使用Mapper.xml也是可以的,比如下面就是UserMapper对应的UserMapper.xml,其中定义了一个findById的查询。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elim.springboot.mybatis.UserMapper">
<select id="findById" resultType="com.elim.springboot.mybatis.User"
parameterType="java.lang.Long">
select * from tb_user where id=#{id}
</select>
</mapper>
那对应的UserMapper接口中也需要定义一个findById方法,这个时候UserMapper接口的定义是如下这样子。
@Mapper
public interface UserMapper {
@Select("select * from tb_user where username=#{username}")
User findByUsername(String username);
User findById(Long id);
}
接下来的用法是一模一样的。但是需要注意的是UserMapper接口上的@Mapper
注解不能去掉,因为此时Mybatis还要靠它来识别Mapper接口。如果希望不加上@Mapper
也能被识别为Mapper接口,则需要引入@MapperScan
。比如下面代码就通过@MapperScan
指定了将扫描com.elim.springboot.mybatis
包及其子包下的接口。@MapperScan
还可以通过markerInterface属性指定需要扫描的接口继承的父接口,通过annotationClass属性指定Mapper接口上应该添加的注解,可以通过sqlSessionTemplateRef属性指定扫描到的Mapper接口需要绑定的SqlSessionTemplate对应的bean,可以通过sqlSessionFactoryRef属性指定需要使用的SqlSessionFactory对应的bean,更多配置信息可以参考MapperScan的API文档。
@SpringBootApplication
@MapperScan(basePackages="com.elim.springboot.mybatis")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
如果我们的Mapper是放在不同的package下面的,则可以指定多个package,packages属性对应的是一个数组。如果所放的多个package是具有一定规则的,则可以应用通配符来表示。比如下面的将扫描com.elim.package1.mapper
,也会扫描com.elim.package2.mapper
等等。如果期望匹配任意多级目录,则可以使用两个*
,比如com.elim.**.mapper
,会扫描com.elim.package1.package2.mapper
包。
@SpringBootApplication
@MapperScan(basePackages="com.elim.*.mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
可以通过mybatis.*
进行一些自定义的配置。可以通过mybatis.type-aliases-package
指定需要注册类型别名的包,多个包之间可以通过英文的逗号或分号分隔。比如下面的代码就指定了将扫描com.elim.springboot.mybatis
包下面的Class进行别名注册。
mybatis.type-aliases-package=com.elim.springboot.mybatis
可以通过mybatis.executor-type=BATCH
指定默认的ExecutorType为BATCH,对应Executor为BatchExecutor。
可以通过mybatis.type-handlers-package=com.elim.springboot.mybatis
指定将在com.elim.springboot.mybatis
包下寻找TypeHandler并进行注册,多个包之间可以通过英文的逗号或分号分隔。
如果Mapper.xml文件跟Mapper接口不是存放在相同的路径下,可以通过mybatis.mapper-locations
属性指定Mapper.xml文件存放的路径,可以同时指定多个路径,多个路径间以英文的逗号分隔。
mybatis.mapper-locations=classpath*:mappers/*Mapper.xml
如果需要对org.apache.ibatis.session.Configuration
进行全局配置可以通过mybatis.configuration.*
进行配置,org.apache.ibatis.session.Configuration
中拥有set方法的都是可以配置的,详情请参考对应的API文档。
使用Interceptor
MybatisAutoConfiguration
会自动把bean容器中定义的org.apache.ibatis.plugin.Interceptor
注册到创建的SqlSessionFactory中,所以如果需要开发自己的Interceptor,只需要把它定义为一个Spring bean即可自动完成注册,比如下面这样。
@Intercepts({
@Signature(method = "query", type = Executor.class, args = { MappedStatement.class, Object.class,
RowBounds.class, ResultHandler.class }),
@Signature(method = "prepare", type = StatementHandler.class, args = { Connection.class, Integer.class}) })
@Component
public class MyInterceptor implements Interceptor {
public Object intercept(Invocation invocation) throws Throwable {
Object result = invocation.proceed();
System.out.println("Invocation.proceed()--" + result + "---" + invocation.getMethod().getName());
return result;
}
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
public void setProperties(Properties properties) {
String prop1 = properties.getProperty("prop1");
String prop2 = properties.getProperty("prop2");
System.out.println(prop1 + "------" + prop2);
}
}
但如果是需要使用第三方已经实现好的Interceptor怎么办呢?比如需要使用流行的分页插件pagehelper,首先当然是引入PageHelper的依赖了。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
然后可以通过定义一个@Configuration
配置类,然后定义PageInterceptor为一个bean,比如下面这样。
@Configuration
public class ThirdInterceptorConfiguration {
@Bean
public PageInterceptor newPageInterceptor() {
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.put("dialet", "mysql");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
}
最简单的办法是直接使用PageHelper提供的Spring Boot Starter,其PageHelperAutoConfiguration会负责往SqlSessionFactory中注册PageInterceptor。可以通过pagehelper.*
配置相关的自定义属性。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
ConfigurationCustomizer
ConfigurationCustomizer是mybatis-spring-boot-starter
提供的一个可用于对Configuration对象进行一些自定义配置的接口。MybatisAutoConfiguration在进行自动配置时会自动获取bean容器中定义的所有的ConfigurationCustomizer类型的bean,在创建好Configuration对象后会一一调用它们的customize()
方法。下面的代码定义了一个ConfigurationCustomizer类型的bean,其配置启用了Mybatis的懒加载。
@Component
public class MyConfigurationCustomizer implements ConfigurationCustomizer {
@Override
public void customize(Configuration configuration) {
configuration.setLazyLoadingEnabled(true);
}
}
参考文档
http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
(注:本文是基于Spring Boot 2.0.3所写)
相关推荐
spring boot+thymeleaf+mybatis+mysql整合开发博客demo,适合初学者使用。
spring boot 整合jsp与mybatis框架,可导入之后直接运行。
spring boot + spring + mybatis 集合xmlspring boot + spring + mybatis 集合xmlspring boot + spring + mybatis 集合xml
Spring Boot+MySQL+Mybatis+Maven+IDEA,一个简单的数据库增删改查项目
该压缩文件包含了使用Spring Boot、Layui和Mybatis-plus开发的简单后台管理系统的源代码。这个项目提供了一套基本的功能和界面,帮助用户快速搭建和运行一个后台管理系统。 适用人群: 该资源适用于具备一定Java...
使用eclipse开发工具手把手教你搭建一个spring boot项目(spring boot+maven+mybatis+mysql)
spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单
spring boot整合mybatis或者mybatis-plus或者jwt或redis
SSM框架——使用MyBatis Generator自动化构建代码所需要的两个jar包,同时附了mysql的连接器,如果需要SqlServer对应的jdbc连接器,请到微软官网自行下载。
全注解 spring boot +spring security + thymeleaf+mybatis+druid+mysql+bootstrap 框架。 带数据库脚本和说明文件
spring boot 整合 mysql数据库、 mybatis、 druid连接池实例。
使用spring boot 加mysql 加mybatis的框架开发的基本增删改查功能,适合新手学习使用
前后端分离之后台架构,供各位参考...Spring boot shiro权限管理 Ehcache缓存框架,可以改成redis Mybatis+PageHelper+通用mapper JWT前后端token验证 Swagger2 api生成工具 已经实现了用户、权限、组织等代码的实现
个人博客系统网页实现(Spring Boot + SpringMVC + MyBatis)
简易后台管理系统,学习Spring Boot、Layui和Mybatis-plus的实战经验,构建简易后台管理系统。掌握快速开发、前端界面设计和数据库操作,学习最佳实践和定制扩展。提供实用项目基础,培养综合能力。适合学习和实践,...
ifast是一款基于Spring Boot + Mybatis + Mybatis Plus搭建的快速开发平台。ifast集成了代码生成器,具有高效的开发效率。以Spring Boot为基础框架,Mybatis plus为数据访问层, Apache Shiro为权限授权层,Ehcahe对...
Spring Boot+Druid+Mybatis实现JTA分布式事务
spring boot + maven + mybatis + layui springboot 框架
项目描述 学生成绩管理系统,有三...spring boot+spring mvc+mybatis+layui+jquery+thymeleaf http://localhost:8080/Sys/loginView 管理员账号 admin admin 老师登录 2020031920 111111 学生账号登录 20200319 111111