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来说,肯定也是差不多的.既然开了 ...
随机推荐
- 无法打开输入文件“optimized.lib” 编译osgEarth2.8+VS2013+CMake3.4.0在Release版本的问题
1>LINK : fatal error LNK1181: 无法打开输入文件“optimized.lib” 可以到http://forum.osgearth.org搜索相关帖子,gwaldron ...
- JVM难学?那是因为你没认真看完这篇文章(转)
一:虚拟机内存图解 JAVA程序运行与虚拟机之上,运行时需要内存空间.虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理. 虚拟机管理内存数据区域划分如下图: 数据区域分类: ...
- CSS-微信开放UI样式
下面的链接是微信开放的CSS的样式: http://weui.github.io/weui/ 附上GitHub地址:https://github.com/weui/weui
- spring boot打包会有.war.original文件的原因 (笔记)
今天使用spring boot 2.1.1.RELEASE版本搭建项目,虽然可以直接打包成可运行的jar包,但是由于公司准备采用docker容器来管理项目,所以需要把jar包变成war包,并且war包 ...
- pocket
Pocket是一个离线阅读服务软件. Pocket的主要功能就是将你要阅读或者一时没有读完的网页标记下来,接着同步到服务器端,然后你就可以在不同的设备上阅读.如果你在电脑上网的时间不多,一些东西又来不 ...
- 百度订单Api注意事项
背景介绍: 申请的百度地图API,采用javascript sdk方式 页面引用 问题1:更换域名导致定位插件不能用 需要修改百度地图-应用中的白名单设置,按照规则添加新的域名 问题2:http与ht ...
- git --fast-version-control
--distributed-is-the-new-centralized 读二进制文件 python 读doc xls 几乎所有的版本控制系统都以某种形式支持分支.使用分支意味着你可以把你的工作从 ...
- Python每日一练------内置函数+内置变量+内置模块
1.内置函数 Python所有的内置函数 Built-in Functions abs() divmod() input() open() staticmethod() all() e ...
- Flask(1)- 主流web框架、初识flask
一.Python 现阶段三大主流Web框架 Django.Tornado.Flask 对比 Django 主要特点是大而全,集成了很多组件(例如Models.Admin.Form等等), 不管你用得到 ...
- 修改 item2 用户名
首先在命令行输入 cd .oh-my-zsh/themes 如下图: 然后命令行输入 sudo vi agnoster.zsh-theme 如下图: 最后在编辑主题文件 在 prompt_segmen ...