最近项目重构 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. python bottle学习(一)快速入门

    from bottle import (run, route, get, post, put, delete) # bottle中添加路由的两种方法 # 第一种,使用route装饰器,需要指定meth ...

  2. UVALive 6560 The Urge to Merge

    题目链接:传送门 题目大意:有一个 3*n 的矩阵,每个格子里有一个数,你可以选择相邻的两个格子合并成一个,并且权值变为两数乘积,若一个数未合并,权值变为0,求最后权值总和最大值. 题目思路:以 2^ ...

  3. 学习使用turtlebot2——turtlebot2上使用Hokuyo激光雷达(型号UST-10LX)

    目标     在turtlebot2上添加Hokuyo激光雷达传感器,使用激光雷达调用gmapping进行建图. 配置情况     电脑使用Ubuntu 14.04版本,ROS为 Indigo,激光雷 ...

  4. contos7 mongodb安装教程

    通过yum安装mongodb 1.创建文件mongodb.repo文件, cd /etc/yum.repos.d/ vi mongodb.repo 复制如下代码: [mongodb-org-3.4] ...

  5. vim_action

    读取文件,显示行号 nl -a.txt brace expansion 花括号扩展 echo a{A{1,2},B{3,4}}b mkdir {2009...2011}-0{1...9} {2009. ...

  6. window异常处理——except_handler4以及栈展开分析

    以前在15pb学习时候在看雪论坛发的一篇精华帖. 主要是分析在try块中发生嵌套异常时候堆栈是如何平衡的. 就不复制过来了,给个链接http://bbs.pediy.com/showthread.ph ...

  7. Apache配置HTTPS的过程小记

    一.HTTPS的summery,综述,它的基本原理,扫肓. http://www.codeceo.com/article/https-knowledge.html 读过后,就明白https怎么加密的, ...

  8. python2 打印菱形

    程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列. 程序源代码: #!/usr/bin/python # -*- coding: UT ...

  9. Django - 权限(1)

    一.权限表结构设计 1.认识权限 生活中处处有权限,比如,腾讯视频开会员才有观看某个最新电影的权限,你有房间钥匙就有了进入这个房间的权限,等等.同样,程序开发过程中也有权限,我们今天说的权限指的是we ...

  10. 10046 trace详解(2)--tkprof

      10046或10053生成的文件格式比较乱,直接查看有一定的困难,ORACLE自带的一个格式化命令工具tkprof可以将生成的.trc文件进行格式化,具体用说如下: 一.直接输入tkprof不带任 ...