# MyBatis
# 参考文档
# 开始
Maven 依赖:
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 配置
- 说明:在对应的接口类上添加@Mapper注解,如果编写的Mapper接口过多时,需要重复为每一个接口文件添加@Mapper注解,为了避免这种麻烦,可以直接在Spring Boot项目启动类上添加@MapperScan("xxx")注解,参数必须指定需要扫描的具体包名。
mybatis:
mapper-locations: classpath:com.xxx.demo.mapper/*.xml
# type-aliases-package: com.zhg.demo.mybatis.entity
#开启驼峰命名
configuration:
map-underscore-to-camel-case: true
1
2
3
4
5
6
2
3
4
5
6
# 拦截器
MyBatis 拦截器默认可以拦截的类型只有四种,即四种接口类型:
Executor
StatementHandler
ParameterHandler
ResultSetHandler
对于我们的自定义拦截器必须使用 MyBatis 提供的 @Intercepts
注解来指明我们要拦截的是四种类型中的哪一种接口。
Signature.type
MyBatis 拦截器默认会按顺序拦截以下的四个接口中的所有方法:
拦截接口 | 接口实现类 |
---|---|
Executor | CachingExecutor |
StatementHandler | RoutingStatementHandler |
ParameterHandler | DefaultParameterHandler |
ResultSetHandler | DefaultResultSetHandler |
# 实现步骤
- 实现
org.apache.ibatis.plugin.Interceptor
接口,并将该类注册到单例池。 - 添加
@Intercepts
注解,指定需要拦截的对象、方法和参数。
@Intercepts // 描述:标志该类是一个拦截器 @Signature // 描述:指明该拦截器需要拦截哪一个接口的哪一个方法
@Signature 的参数
type; // 四种类型接口中的某一个接口,如Executor.class; method; // 对应接口中的某一个方法名,比如Executor的query方法; args; // 对应接口中的某一个方法的参数,比如Executor中query方法因为重载原因,有多个,args就是指明参数类型,从而确定是具体哪一个方法;
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 拦截执行器的方法 ParameterHandler (getParameterObject, setParameters) 拦截参数的处理 ResultSetHandler (handleResultSets, handleOutputParameters) 拦截结果集的处理 StatementHandler (prepare, parameterize, batch, update, query) 拦截Sql语法构建的处理
- com.mysql.cj.jdbc.Driver是mysql-connector-java 6 中的特性,相比mysql-connector-java 5 多了一个时区:serverTimezone
- com.mysql.jdbc.Driver和mysql-connector-java 5一起用。
- com.mysql.cj.jdbc.Driver和mysql-connector-java 6 一起用。
# 示例
1
# 指定 mapper XML 位置
- 配置文件中:
mybatis.mapper-locations=classpath:com.xxx.demo.mapper/*.xml
- POM.XML 中:
<!-- POM.XML -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# mapper xml 模板
<?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="">
</mapper>
1
2
3
4
5
2
3
4
5
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。