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")
Mybatis plus 高级的更多相关文章
- MyBatis学习--高级映射
简介 前面说过了简单的数据库查询和管理查询,在开发需求中有一些一对一.一对多和多对多的需求开发,如在开发购物车的时候,订单和用户是一对一,用户和订单是一对多,用户和商品是多对多.这些在Hibernat ...
- Mybatis学习记录(六)----Mybatis的高级映射
1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders. ...
- Mybatis(四) 高级映射,一对一,一对多,多对多映射
天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...
- Mybatis实现高级映射一对一、一对多查询
终于把论文写得差不多了,系统也不急着完成,可以抽出点时间来完成这个系列的博客了.在写本博客之前我是惶恐不安的,高级映射一贯是持久层框架里的重中之重,小到自己开发小系统,大到企业级开发,表的存在从来就不 ...
- mybatis之高级结果映射
先贴一句官方文档内容 如果世界总是这么简单就好了. 正如官方文档所说:如果一切都是这么简单,那该多好啊,但是实际上,我们面对的是复杂的对象,就是对象里有对象,有列表对象,总之五花八门的对象.这个时候我 ...
- Mybatis二(高级部分)
1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If标签 b) Where标签 c) Sql片 ...
- MyBatis的高级映射之多对一
使用传统方式的形式 使用MyBatis的方式 这样会产生两条语句 使用ResultMap的方式,对结果进行映射和转换,自己控制 两条语句变成一条语句,然后进行映射,这时Student类中包含一个 Cl ...
- mybatis使用-高级用法(二)
新建学生表和学生证表 --学生表 CREATE TABLE student( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'id', `nam ...
- 【Mybatis高级映射】一对一映射、一对多映射、多对多映射
前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...
随机推荐
- python bottle学习(一)快速入门
from bottle import (run, route, get, post, put, delete) # bottle中添加路由的两种方法 # 第一种,使用route装饰器,需要指定meth ...
- UVALive 6560 The Urge to Merge
题目链接:传送门 题目大意:有一个 3*n 的矩阵,每个格子里有一个数,你可以选择相邻的两个格子合并成一个,并且权值变为两数乘积,若一个数未合并,权值变为0,求最后权值总和最大值. 题目思路:以 2^ ...
- 学习使用turtlebot2——turtlebot2上使用Hokuyo激光雷达(型号UST-10LX)
目标 在turtlebot2上添加Hokuyo激光雷达传感器,使用激光雷达调用gmapping进行建图. 配置情况 电脑使用Ubuntu 14.04版本,ROS为 Indigo,激光雷 ...
- contos7 mongodb安装教程
通过yum安装mongodb 1.创建文件mongodb.repo文件, cd /etc/yum.repos.d/ vi mongodb.repo 复制如下代码: [mongodb-org-3.4] ...
- vim_action
读取文件,显示行号 nl -a.txt brace expansion 花括号扩展 echo a{A{1,2},B{3,4}}b mkdir {2009...2011}-0{1...9} {2009. ...
- window异常处理——except_handler4以及栈展开分析
以前在15pb学习时候在看雪论坛发的一篇精华帖. 主要是分析在try块中发生嵌套异常时候堆栈是如何平衡的. 就不复制过来了,给个链接http://bbs.pediy.com/showthread.ph ...
- Apache配置HTTPS的过程小记
一.HTTPS的summery,综述,它的基本原理,扫肓. http://www.codeceo.com/article/https-knowledge.html 读过后,就明白https怎么加密的, ...
- python2 打印菱形
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列. 程序源代码: #!/usr/bin/python # -*- coding: UT ...
- Django - 权限(1)
一.权限表结构设计 1.认识权限 生活中处处有权限,比如,腾讯视频开会员才有观看某个最新电影的权限,你有房间钥匙就有了进入这个房间的权限,等等.同样,程序开发过程中也有权限,我们今天说的权限指的是we ...
- 10046 trace详解(2)--tkprof
10046或10053生成的文件格式比较乱,直接查看有一定的困难,ORACLE自带的一个格式化命令工具tkprof可以将生成的.trc文件进行格式化,具体用说如下: 一.直接输入tkprof不带任 ...