通用mapper的介绍和入门使用

通用mapper的介绍和入门使用

简介

通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。

极其方便的使用MyBatis单表的增删改查。

支持单表操作,不支持通用的多表联合查询。

通用 Mapper 支持 Mybatis-3.2.4 及以上版本。

与传统mapper.xml中写sql比较通用mapper

1.mapper.xml文件里有大量的sql,当数据库表字段变动,配置文件就要修改
2.需要自己实现sql分页,select * from table where . . . limit 1,3
自己手写分页,除了传参page、pageSize,还需要返回条目总数count。
3.数据库可移植性差:如果项目更换数据库,比如oracle–>mysql,mapper.xml中的sql要重新写,因为Oracle的PLSQL 和mysql 支持的函数是不同的。
4.生成的代码量过大。
5.批量操作,批量插入,批量更新,需要自写。

通用mapper底层基于反射机制拼处xml形式的sql然后去执行,所以性能上会多消耗一些时间,不过微乎其微

使用快速入门

第一步:导包


<dependency>
    <groupId>tk.mybatisgroupId>
    <artifactId>mapper-spring-boot-starterartifactId>
    <version>2.0.3version>
dependency>

<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>6.0.6version>
dependency>

第二步:springboot配置

################## Mybatis配置
mybatis:
  type-aliases-package: cn.com.cdboost.charge.operations.model
  mapper-locations: classpath*:/mapper/*Mapper.xml
################## Mapper
mapper:
  mappers: cn.com.cdboost.charge.operations.common.CommonMapper
  not-empty: false
  identity: MYSQL
################### PageHelper
pagehelper:
  helperDialect: mysql
  reasonable: true  #为了使用输入页数为负或者超出最大页时候使页数为最小或最大值
  supportMethodsArguments: true
  params: count=countSql
################## Druid Datasource配置
spring:
  datasource:
    druid:
      # 驱动配置信息
      #      db-type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: urllllll
      username: aaaaaa
      password: bbbbbb
      # 连接池的配置信息
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 20
      # 配置获取连接等待超时的时间
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭
      pool-prepared-statements: false
      max-pool-prepared-statement-per-connection-size: 20

第三步:准备实体类

@Table(name = "表名")
public class OperationsLog implements Serializable {

    @GeneratedValue(strategy = GenerationType.IDENTITY)//自动增长
    @Id //主键
    private Integer id;

    @Column(name = "字段名")
    private String username;

第四步:准备一个通用mapper集成其他接口的功能

ublic interface CommonMapper<T> extends
        Mapper<T>,
        MySqlMapper<T>,
        IdsMapper<T>,
        IdListMapper<T,Object>,
        ConditionMapper<T> {

    default int deleteWithVersion(T t){
        int result = delete(t);
        if(result == 0){
            throw new RuntimeException("删除失败!");
        }
        return result;
    }

    default int deleteByPrimaryKeyWithVersion(T t) {
        int result = deleteByPrimaryKey(t);
        if(result == 0){
            throw new RuntimeException("删除失败!");
        }
        return result;
    }

    default int updateByPrimaryKeyWithVersion(T t){
        int result = updateByPrimaryKey(t);
        if(result == 0){
            throw new RuntimeException("更新失败!");
        }
        return result;
    }

    default int updateByPrimaryKeySelectiveWithVersion(T t){
        int result = updateByPrimaryKeySelective(t);
        if(result == 0){
            throw new RuntimeException("更新失败!");
        }
        return result;
    }

}

最后:测试

@Resource
    private OperationsLogMapper operationsLogMapper;

    @Test
    public void test01(){
        List<OperationsLog> operationsLogs = operationsLogMapper.selectAll();
        operationsLogs.forEach(e-> System.out.println(e.getUserName()));
    }

总结

1.这种方式比较起来更适合增删改查一些简单的操作,如果需要复杂的操作,仍然可以使用以前的mapper.xml方式进行数据库操作。

2.关于分页可以使用更加简单的方式:PageHelper,下次再说这个。

3.关于筛选高级查询,可以使用Condition类来进行,下次单独说。

你可能感兴趣的:(其他)