最近项目重构 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")

Mybatis plus 高级的更多相关文章

  1. MyBatis学习--高级映射

    简介 前面说过了简单的数据库查询和管理查询,在开发需求中有一些一对一.一对多和多对多的需求开发,如在开发购物车的时候,订单和用户是一对一,用户和订单是一对多,用户和商品是多对多.这些在Hibernat ...

  2. Mybatis学习记录(六)----Mybatis的高级映射

    1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders. ...

  3. Mybatis(四) 高级映射,一对一,一对多,多对多映射

    天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...

  4. Mybatis实现高级映射一对一、一对多查询

    终于把论文写得差不多了,系统也不急着完成,可以抽出点时间来完成这个系列的博客了.在写本博客之前我是惶恐不安的,高级映射一贯是持久层框架里的重中之重,小到自己开发小系统,大到企业级开发,表的存在从来就不 ...

  5. mybatis之高级结果映射

    先贴一句官方文档内容 如果世界总是这么简单就好了. 正如官方文档所说:如果一切都是这么简单,那该多好啊,但是实际上,我们面对的是复杂的对象,就是对象里有对象,有列表对象,总之五花八门的对象.这个时候我 ...

  6. Mybatis二(高级部分)

    1.输入映射和输出映射 a)        输入参数映射 b)        返回值映射 2.动态sql a)        If标签 b)        Where标签 c)        Sql片 ...

  7. MyBatis的高级映射之多对一

    使用传统方式的形式 使用MyBatis的方式 这样会产生两条语句 使用ResultMap的方式,对结果进行映射和转换,自己控制 两条语句变成一条语句,然后进行映射,这时Student类中包含一个 Cl ...

  8. mybatis使用-高级用法(二)

    新建学生表和学生证表 --学生表 CREATE TABLE student( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'id', `nam ...

  9. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

随机推荐

  1. poj3243 Clever Y[扩展BSGS]

    Clever Y Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8666   Accepted: 2155 Descript ...

  2. 巨蟒python全栈开发数据库前端3:CSS基础2

    1.文本属性 2.背景属性 3.边框属性 4.display属性 5.盒子模型

  3. Powershell Get-ChildItem 筛选文件,文件处理

    使用Where-Object也可以根据其它属性来过滤. Dir | Where-Object { $_.CreationTime -gt [datetime]::Parse("May 12, ...

  4. iOS核心动画详解(CABasicAnimation)

    前言 上一篇已经介绍了核心动画在UI渲染中的位置和基本概念,但是没有具体介绍CAAnimation子类的用法,本文将介绍CABasicAnimation及其子类CASpringAnimation的用法 ...

  5. 《深入理解Linux内核》阅读笔记 --- Chapter 2 Memory Addressing

    1.logical address = segment identifier (16bits) + offset (32bits) segment selector其实就是GDT或者LDT的索引,其中 ...

  6. 多线程threading.local的作用及原理?

    1.示例代码 import time import threading v = threading.local() def func(arg): # 内部会为当前线程创建一个空间用于存储:phone= ...

  7. CWM是什么?

    CWM [1]  (CommonWarehouseMetamodel公共仓库元模型)是OMG组织在数据仓库系统中定义了一套完整的元模型体系结构,用于数据仓库构建和应用的元数据建模.公共仓库元模型指定的 ...

  8. 安装指定版本的Ionic或Cordova(转载)

    安装ionic 及 cordova npm install -g cordova ionic 更新命令 npm update -g cordova ionic 安装特定版本 npm install - ...

  9. 解释一下python中的//,%和**运算符

    //运算符执行地板除法(向下取整除),它会返回整除结果的整数部分 print(7//2) 这里整除后会返回3.5 同样的,执行取幂运算,ab会返回a的b次方 print(2**10) 最后,%执行取模 ...

  10. 用pytesseract识别验证码报错

    运行py文件出现下面报错 pytesseract.pytesseract.TesseractError: (1, 'Error opening data file \\Program Files\\T ...