1.1 Java 编码方式集成

Java 编码方式集成是最少见的一种情况,但是通过这种集成方式可以很容易让大家看清通用 Mapper 集成的入口,这里会提供两种方式。

  1. 最直接的方式
  2. 使用 Configuration 作为入口集成

1.1.1 添加依赖

在开始写代码前,先把依赖添加进来。

在 Java 编码集成方式中,首先你肯定已经引入了 MyBatis 的依赖:

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis</artifactId>
  4. <version>版本号</version>
  5. </dependency>

所有版本号看这里:http://mvnrepository.com/artifact/org.mybatis/mybatis

通用 Mapper 支持 MyBatis 3.2.4+

在 mybatis 依赖的基础上,添加通用 Mapper 的依赖即可:

  1. <dependency>
  2. <groupId>tk.mybatis</groupId>
  3. <artifactId>mapper</artifactId>
  4. <version>最新版本</version>
  5. </dependency>

最新版本看这里:http://mvnrepository.com/artifact/tk.mybatis/mapper

如果你使用的 Jar 包,你可以通过上面提供的链接下载 Jar。

1.1.2 编写代码集成

使用 Java 编码方式时,正常情况下你都会有构建 SqlSessionFactory 的代码。

在创建 SqlSessionFactory 对象或者对应两种配置通用 Mapper 的方法,由于没有提供 mybatis-config.xml 文件的解析类,这里会推荐使用 创建后 的方式来创建。

1.1.2.1 创建后

在创建 SqlSessionFactory 后,在任何其他调用发生前,使用下面的方式配置通用 Mapper。

  1. //从刚刚创建的 sqlSessionFactory 中获取 session
  2. session = sqlSessionFactory.openSession();
  3. //创建一个MapperHelper
  4. MapperHelper mapperHelper = new MapperHelper();
  5. //特殊配置
  6. Config config = new Config();
  7. //主键自增回写方法,默认值MYSQL,详细说明请看文档
  8. config.setIDENTITY("MYSQL");
  9. //支持getter和setter方法上的注解
  10. config.setEnableMethodAnnotation(true);
  11. //设置 insert 和 update 中,是否判断字符串类型!=''
  12. config.setNotEmpty(true);
  13. //校验Example中的类型和最终调用时Mapper的泛型是否一致
  14. config.setCheckExampleEntityClass(true);
  15. //启用简单类型
  16. config.setUseSimpleType(true);
  17. //枚举按简单类型处理
  18. config.setEnumAsSimpleType(true);
  19. //自动处理关键字 - mysql
  20. config.setWrapKeyword("`{0}`");
  21. //设置配置
  22. mapperHelper.setConfig(config);
  23. //注册通用接口,和其他集成方式中的 mappers 参数作用相同
  24. //4.0 之后的版本,如果类似 Mapper.class 这样的基础接口带有 @RegisterMapper 注解,就不必在这里注册
  25. mapperHelper.registerMapper(Mapper.class);
  26. //配置 mapperHelper 后,执行下面的操作
  27. mapperHelper.processConfiguration(session.getConfiguration());

如果省略 Config 的配置,上述代码简化为:

  1. //从刚刚创建的 sqlSessionFactory 中获取 session
  2. session = sqlSessionFactory.openSession();
  3. //创建一个MapperHelper
  4. MapperHelper mapperHelper = new MapperHelper();
  5. mapperHelper.processConfiguration(session.getConfiguration());

通用 Mapper 默认就是通过 session.getConfiguration() 获取所有的 MyBatis 方法,然后对其中属于通用方法的方法进行处理。

1.1.2.2 创建前

创建前就是通过使用 tk.mybatis.mapper.session.Configuration 替换 MyBatis 中的 org.apache.ibatis.session.Configuration 来实现。配置代码如下:

  1. Configuration configuration = new Configuration();
  2. //这里可以参考上面的方式来配置 MapperHelper
  3. configuration.setMapperHelper(new MapperHelper());
  4. sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

实现原理

这种配置方式是通过重写原 Configuration 中的 addMappedStatement 方法来实现的:

  1. @Override
  2. public void addMappedStatement(MappedStatement ms) {
  3. try {
  4. super.addMappedStatement(ms);
  5. //没有任何配置时,使用默认配置
  6. if (this.mapperHelper == null) {
  7. this.mapperHelper = new MapperHelper();
  8. }
  9. this.mapperHelper.processMappedStatement(ms);
  10. } catch (IllegalArgumentException e) {
  11. //这里的异常是导致 Spring 启动死循环的关键位置,为了避免后续会吞异常,这里直接输出
  12. e.printStackTrace();
  13. throw new RuntimeException(e);
  14. }
  15. }

通过上面其中一种方式配置后,通用方法都会生效。

接下来请继续看下一章内容。

1.1.3 细化依赖的用法

首先不推荐 Maven 初学者看这里,也不建议通用 Mapper 初学者看这里

在决定是否看之前,先看看细化依赖用法的特点:

  • 可以以最精简的方式引入通用 Mapper,按照需要引入。
  • 可以将某个依赖替换为自己的实现或者选择特定版本的依赖(比如某些依赖可以选择 Java 6 或者 Java 8 的版本)。

当你需要自己选择具体的依赖时,继续看下面的介绍。

通用 Mapper4 中,原来的 tk.mybatis:mapper 项目已经拆分,1.1.1 中添加的依赖是通过特殊打包方式将所有拆分的项目合并到了一个 jar 包中。

如果需要对依赖进行详细的定制,可以分别引入下面的依赖:

  1. <!-- 必备依赖,提供核心功能 -->
  2. <dependency>
  3. <groupId>tk.mybatis</groupId>
  4. <artifactId>mapper-core</artifactId>
  5. <version>${mapper-core.version}</version>
  6. </dependency>
  7. <!-- 如果需要通用 Mapper 自带的 Mapper 接口和系列方法,需要引入本依赖 -->
  8. <!-- 拆分 base 项目的目的在于以后可能会提供其他的方式来实现接口 -->
  9. <dependency>
  10. <groupId>tk.mybatis</groupId>
  11. <artifactId>mapper-base</artifactId>
  12. <version>${mapper-base.version}</version>
  13. </dependency>
  14. <!-- 针对开发人员的需要提供的一些额外的接口,都有特殊的使用要求 -->
  15. <dependency>
  16. <groupId>tk.mybatis</groupId>
  17. <artifactId>mapper-extra</artifactId>
  18. <version>${mapper-extra.version}</version>
  19. </dependency>
  20. <!-- 基于 Java8 方法引用的类 Example 对象 Weekend -->
  21. <dependency>
  22. <groupId>tk.mybatis</groupId>
  23. <artifactId>mapper-weekend</artifactId>
  24. <version>${mapper-weekend.version}</version>
  25. </dependency>
  26. <!-- 代码生成器 -->
  27. <dependency>
  28. <groupId>tk.mybatis</groupId>
  29. <artifactId>mapper-generator</artifactId>
  30. <version>${mapper-generator.version}</version>
  31. </dependency>

这些依赖的版本号可以通过 mapper-all 子模块进行查看

https://github.com/abel533/Mapper/tree/master/mapper-all/pom.xml

还可以通过下面的目录查找

http://central.maven.org/maven2/tk/mybatis/