tk mybatis通用mapper
首先要明白, tk mybatis是国人写的对mybatis的增强包, 而不是mybatis官方出的官方包
其github网址如下: https://github.com/abel533/Mapper/wiki
基于starter的自动配置的通用mapper与springboot集成
-
导入自动配置包
<!-- 注意此处必须导入自动配置包 --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>版本号</version> </dependency>
-
创建接口并继承自己想要的通用mapper
-
在接口上标注@Mapper
@org.apache.ibatis.annotations.Mapper public interface SysUserMapper extends Mapper<SysUser>{}
-
创建对应的mapper.xml
-
配置mapper.xml的位置以及包别名
mybatis: mapper-locations: classpath:/mapper/*.xml type-aliases-package: com.sqt.mapper.bean
配置完成以后就可以使用通用mapper中的方法了
public SysUser getUserByName(String username, String nickname) {
SysUser sysUser = new SysUser(username, nickname);
//这里的selectOne就是通用mapper中的函数
SysUser sysUser1 = sysUserMapper.selectOne(sysUser);
//sysUserMapper.
return sysUser1;
}
注意: @MapperScan这个注解是有两个不同的定义, 一个是org.mybatis.spring.annotation.MapperScan, 这个是mybatis官方写的@MapperScan, 还有一个是tk.mybatis.spring.annotation.MapperScan, 这个是通用mapper中定义的
在上述的配置中, 我们只能使用@Mapper来标注我们的mapper类, 而不能使用org.mybatis.spring.annotation.MapperScan类指定我们mapper类的位置, 具体为何可能是tk的作者还没有实现该功能吧(猜的). 而tk.mybatis.spring.annotation.MapperScan的作用将在下面介绍
基于@MapperScan的通用mapper与springboot集成
注意上面标题所指@MapperScan是org.mybatis.spring.annotation.MapperScan
-
导入jar包
<!-- 二者任选其一 --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.1.5</version> </dependency>
-
创建接口并继承自己想要的通用mapper
public interface SysUserMapper extends Mapper<SysUser>{}
-
配置@tk.mybatis.spring.annotation.MapperScan
@Component @MapperScan(basePackages = {"com.sqt.mapper.mapper"}) public class MybatisConfig { }
-
创建对应的mapper.xml
-
配置mapper.xml的位置以及包别名
mybatis: mapper-locations: classpath:/mapper/*.xml type-aliases-package: com.sqt.mapper.bean
配置完成以后就可以使用通用mapper中的方法了
配置多个通用mapper
//这个类不能再com.sqt.mapper.mapper中, 因为mapper这个包会被@MapperScan这个注解扫描到
//这样spring会尝试去创建这个BaseMapper, 但是这个BaseMapper只是我们用来创建子接口的
//所以将其放在@MapperScan扫描不到的包中, 这里是com.sqt.mapper.plugin
public interface BaseMapper<T> extends Mapper<T>, SelectAllMapper<T> {
}
//这样继承BaseMapper就相当于继承了Mapper和SelectAll
@Repository
public interface SysLogMapper extends BaseMapper<SysLog> {
}
总结
使用上面两种中的哪种方式开实现通用mapper还是要看自己的项目导入的通用mapper的jar包
如果是springboot项目导入mapper-spring-boot-starter可以使用自动配置和@MapperScan的方式, 但是建议使用@MapperScan方式
如果是普通的项目只能使用@MapperScan方式