tk mybatis通用mapper

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方式

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页