# 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

# 配置

  • 说明:在对应的接口类上添加@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

# 拦截器

MyBatis 拦截器默认可以拦截的类型只有四种,即四种接口类型:

  • Executor
  • StatementHandler
  • ParameterHandler
  • ResultSetHandler

对于我们的自定义拦截器必须使用 MyBatis 提供的 @Intercepts 注解来指明我们要拦截的是四种类型中的哪一种接口。

MyBatis 执行过程

Signature.type

MyBatis 拦截器默认会按顺序拦截以下的四个接口中的所有方法:

拦截接口 接口实现类
Executor CachingExecutor
StatementHandler RoutingStatementHandler
ParameterHandler DefaultParameterHandler
ResultSetHandler DefaultResultSetHandler

MyBatis 拦截器拦截顺序图

# 实现步骤

  1. 实现 org.apache.ibatis.plugin.Interceptor 接口,并将该类注册到单例池。
  2. 添加 @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 位置

  1. 配置文件中:mybatis.mapper-locations=classpath:com.xxx.demo.mapper/*.xml
  2. 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

# 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

# 讨论区

由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。

点击查看评论区内容,渴望您的宝贵建议~
Last Updated: 11/29/2023, 11:34:22 AM