mybatis 是一个很好用的工具,但是编写 mapper 是一件很麻烦的事,自 mybatis 3.0 开始可以使用注解的方式,极大的简化了 xml 的编写量,本地想看看 mybatis 源码,自己扩展写一个工具,在阅读源码过程中发现一个通用 mapper 的工具包,感觉不用重复造轮子了,简要记录一下 spring boot 整合通用 mapper 的使用。
- 确保可以正常使用 mybatis
-
pom 引入依赖包,starter 需要配合 @Mapper 注解使用,这里采用这种方式,或者使用
@MapperScan
注解,@tk.mybatis.spring.annotation.MapperScan(basePackages = "扫描包")
配合原生 mapper 使用。<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>{version}</version> </dependency>
我使用的版本是 2.0.[2]()
-
Mybatis 扫描配置(Deprecated, spring 自动配置)
@Configuration //TODO 注意,由于 MapperScannerConfigurer 执行的比较早,所以必须有下面的注解 @AutoConfigureAfter(MybatisAutoConfiguration.class) public class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); mapperScannerConfigurer.setBasePackage("org.springboot.sample.mapper"); Properties properties = new Properties(); // 这里要特别注意,不要把 MyMapper 放到 basePackage 中,也就是不能同其他 Mapper 一样被扫描到。properties.setProperty("mappers", MyMapper.class.getName()); properties.setProperty("notEmpty", "false"); properties.setProperty("IDENTITY", "MYSQL"); mapperScannerConfigurer.setProperties(properties); return mapperScannerConfigurer; } }
-
新建 BaseMapper 类,该类不能被当做普通 Mapper 一样被扫描,不加 @Mapper 注解,或者放在不同文件夹
package com.zj.mapper; import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.MySqlMapper; public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {}
-
业务处理 dao 层,扩展 BaseMapper
package com.zj.mapper; import com.zj.model.OrderInfo; import org.apache.ibatis.annotations.Mapper; @Mapper public interface OrderInfoMapper extends BaseMapper<OrderInfo> {}
-
其他和使用普通 mybatis 一致,service 层部分代码
orderInfoMapper.insertSelective(info); OrderInfo info = orderInfoMapper.selectByPrimaryKey(id);
通用 mapper 提供常用的一些操作方法: deleteByPrimaryKey, insert, insertSelective, selectByPrimaryKey, updateByPrimaryKeySelective, updateByPrimaryKey, insertList 等很多方法,需要你进一步探索??
-
主键 id 问题
当使用 insert,insertSelective 等方法时,希望返回由数据库产生的逐渐,需要在实体类上增加注解
@Id @GeneratedValue(generator = "JDBC") private Long orderInfoId;
generator=”JDBC” 表示 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,适用于 MySQL,SQL Server 等的自增主键。
或者:
@Id @KeySql(useGeneratedKeys = true) private Long id;
-
如果实体字段和数据库字段不一致,可以使用
@Column
注解,其他注解 参见注解@Column(name="SCORE_SUM") private String sumScore;
- MBG 生成参见 https://github.com/abel533/Ma…,demo 见 git@github.com:silloy/mybatis-generator.git
- 更多细节参见 wiki
通用 Mapper 极大的简化了 xml 文件的编写,但仍需要少许 xml 文件,有待进一步优化。同时因为这是一个个人项目,使用不太熟悉不建议使用。
本文由 歧途老农 创作,采用 CC BY 4.0 CN 协议 进行许可。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。