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来说,肯定也是差不多的.既然开了 ...
随机推荐
- UIImagePickerController在UIPopoverController中 旋屏问题
1弧度=180/π度1度=π/180弧度今天遇到了 一个问题.UIImagePickerController在UIPopoverController中 旋屏问题. 在查找了许多资料后方知,此乃iOS系 ...
- 【原】storm源码之巧用java反射反序列化clojure的defrecord获取属性值
storm源码是clojure.java.python的混合体.在解决storm-0.8.2的nimbus单点问题的过程中需要从zookeeper上读取目前storm集群中正在运行的assignmen ...
- xmpp muc 群聊协议 2
Roles and Affiliations There are two dimensions along which we can measure a user's connection with ...
- 《从零开始学Swift》学习笔记(Day60)——Core Foundation框架
原创文章,欢迎转载.转载请注明:关东升的博客 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Swift中调用这种C语言风 ...
- ThinkPHP中通过URL重写隐藏应用的入口文件index.php的相关服务器的配置
[ Apache ] 将httpd.conf配置文件中mod_rewrite.so所在行前面的‘#’去掉 AllowOverride None 将None改为 All 效果图
- Java基础系列(八)序列化与反序列化
先来看两个例子 示例一:将对象保存成字节数组,再把对象的字节数组还原为对象 示例中用到的Bean package com.huawei.beans; import java.io.Serializab ...
- 第三课作业——set类型、sorted set类型的增删改查,redis的事务
第三课时作业 静哥 by 2016.2.23~2016.3.6 [作业描述] 1.总结什么是set以及什么是sorted set,并完成对set以及sorted set的增删改查(查需要至少4种方 ...
- 《挑战程序设计竞赛》2.2 贪心法-其它 POJ3617 3069 3253 2393 1017 3040 1862 3262
POJ3617 Best Cow Line 题意 给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下列任意操作: 从S的头部(或尾部)删除一个字符,加到T的尾部 ...
- 把配置和环境解耦 eliminate “works on my machine” problems when collaborating on code with co-workers docker架构与解决的问题
Docker实践 - 懒人的技术笔记 - 博客频道 - CSDN.NET http://blog.csdn.net/lincyang/article/details/43055061 Docker直 ...
- Casperjs中fill提交表单遇到的问题
1.if you access internet with proxy please add --ignore-ssl-errors=true --ssl-protocol=a ...