zoukankan      html  css  js  c++  java
  • Mybatis plus 高级

    最近项目重构 dao层使用的Mybatis plus,有必要总结下。

    Mybatis plus 会自动维护Mybatis 以及 MyBatis-Spring 相关依赖  所以在构建项目时候 只需要引入Mybatis plus 的maven坐标就OK了

    Mybatis plus的核心在BaseMapper<T>

    包含了各种各样的 接口方法

    所以我们继承后就可以拿来使用了!

    Q1:

      在插入时候 bean(包含ID) 需要 使用主键策略    (数据库ID自增)

      使用注解@Table 

       在Bean上面加上注解 @TableId(value="id", type=IdType.AUTO)

       可以配置全局策略 就不用每个表都写这个注解了! 处理下划线到驼峰命名的问题

    Q2:

     MP会默认使用实体类的类名到数据库中找对应的表

     使用注解@TableName(value=“tx_user“)解决

     可以配置全局策略 加个统一的前缀,就不用每个表都写这个注解了! 前缀+实体类  是table name

    Q3:

     Mybatis plus全局策略配置

     xx.xx.xx.GlobalConfiguration

       默认是true  解析驼峰命名 到 下划线对应

       

    Q4:

     @TableField(value="last_name")  对应数据库的名字

     @TableField(exist=false)   这个字段数据库没有哦  插入时候不会报错(用的比较少)

    Q5:

     在插入一条数据时候,获取主键值

     自动的回写到实体类Bean中 不需要额外的操作

      

    Q6:

      插入时候

       方法 insert()  只有非空的才会出现在sql语句日志中

               insertAllColumn() 插入所有字段  空的也是显示的  日志打印会出来这几个字段  但是是null 结果也是一样的   返回Integer

    Q7:

       updateById()   通用更新操作  返回Integer

       updateAllColumnByID  会插入null

    Q8:

       selectById()

       selectOne( entity )  通过多个列进行查询  非空属性作为条件进行查询了  要返回一条数据 要不就报错了

        List<T> selectBatchIds(List<? extends Serializable> idList)   //通过多个Id进行查询

       LIst<T> selectByMap<columnMap>  // key 是列名"school_name" 

       List<T> selectPage(RowBounds rowBounds, Warpper<T> wrapper); //分页查询  Page的对象继承了rowBounds   底层没有使用limit  使用的Mybatis的  内存的分页方式  参数 第几页  每页显示多少条数据

          Mybatis有个PageHelper    Mybatis Plus 有自己的分页插件 

      

    补充 selectList

            selectOne

            selectById

            selectAll

            selectCount

    Q9:  (remove)

      Integer deleteById(Serializable id)

      Integer deleteByMap(@Param("crm") Map<String, Object> columnMap)    key一定要写数据库的列名

      Integer deleteBatchIds(LIst<? extends Serializable> iDList)    //批量删除  底层sql 使用的in

      

    以上是常用的CRUD

    原理分析


      BaseMapper 中提供了通用的CRUD方法

    补充功能强大的条件构造器 EntityWrapper


     实体包装器,主要用于处理SQL拼接,排序,实体参数查询等。

    条件参数说明

    查询方式说明
    setSqlSelect 设置 SELECT 查询字段
    where WHERE 语句,拼接 + WHERE 条件
    and AND 语句,拼接 + AND 字段=值
    andNew AND 语句,拼接 + AND (字段=值)
    or OR 语句,拼接 + OR 字段=值
    orNew OR 语句,拼接 + OR (字段=值)
    eq 等于=
    allEq 基于 map 内容等于=
    ne 不等于<>
    gt 大于>
    ge 大于等于>=
    lt 小于<
    le 小于等于<=
    like 模糊查询 LIKE
    notLike 模糊查询 NOT LIKE
    in IN 查询
    notIn NOT IN 查询
    isNull NULL 值查询
    isNotNull IS NOT NULL
    groupBy 分组 GROUP BY
    having HAVING 关键词
    orderBy 排序 ORDER BY
    orderAsc ASC 排序 ORDER BY
    orderDesc DESC 排序 ORDER BY
    exists EXISTS 条件语句
    notExists NOT EXISTS 条件语句
    between BETWEEN 条件语句
    notBetween NOT BETWEEN 条件语句
    addFilter 自由拼接 SQL
    last 拼接在最后,例如:last("LIMIT 1")

      范围:

     .between("age",2,6);

     .like("name","jack")

     .or()  //或者使用orNew()  orNew() 之前的结果封装 与后面的进行拼接

    .like("email","a")  //或者邮箱有a 的

      修改操作:

     userEntity 属性是要修改的值

    Wrapper是条件 不停的.eq (就是where了)

      .update(UserEntity, Wrapper  )

      删除操作

      .update()

      封装一个添加构造器就OK了 .eq() .eq()

    高级点的查询

     排序的:

      .orderBy()  默认升序

      .orderDesc() 降序   传入的是集合!

      .last( “desc”)   手动把SQL拼接到最后(有sql注入的风险) 

      .last("limit 1,3")

      

        

              

      

  • 相关阅读:
    spring boot多数据源配置(mysql,redis,mongodb)实战
    迷你MVVM框架 avalonjs 学习教程3、绑定属性与扫描机制
    迷你MVVM框架 avalonjs 学习教程2、模块化、ViewModel、作用域
    迷你MVVM框架 avalonjs 学习教程1、引入avalon
    chrome36可以使用自定义元素的回调了
    VML元素的相关资料
    不使用Math.random实现随机数。
    迷你MVVM框架 avalonjs 1.3.4发布
    iscroll源码学习(1)
    对avalon的类名操作进行升级
  • 原文地址:https://www.cnblogs.com/toov5/p/10629961.html
Copyright © 2011-2022 走看看