Mybatis插件之Mybatis-Plus的CRUD方法
使用Mybatis-plus进行基本的CRUD(增查改删)操作。
实体类(User)代码:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString; @Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@TableName("tb_user")
public class User {
@TableId(type = IdType.AUTO) // 需要指定,否则无法新增后拿到回调的id,以及进行删除等操作
// 查询的时候不需要查出来的字段,默认true,和@TableId作用在同一个字段上时失效
@TableField(select = false)
private Integer uid;
private String uname;
// 用来解决数据库中的字段和实体类的字段不匹配问题
@TableField(value = "age",select = false)
private Integer uage; // 数据库中的字段为age
// 用来解决实体类中有的属性但是数据表中没有的字段
@TableField(exist = false) // 默认为true
private String address; // 这是一个数据库中不存在的字段 public User(String uname, Integer age) {
this.uname = uname;
this.uage = age;
}
}
1、增加操作:
代码如下:直接传入一个实体即可完成
@Test
public void test02(){ // 插入一条记录
// 1.构建要插入的对象
User user = new User();
user.setUname("zhangsan");
user.setUage(40);
// 数据库中不存在的字段,通过@TableField(exist = false)排除之
user.setAddress("beijing");
// 2.执行添加 返回值为受影响的行数
int result = userMapper.insert(user);
System.out.println("受影响的行数=" + result);
System.out.println("拿到自增的id=" + user.getUid());
}
2、更新操作:
方法一:int updateById(T entity);
测试代码:
@Test
public void test04(){ // 根据id进行更新
// 1.构建更新的对象
User user = new User();
// 2.根据id来进行更新
user.setUid(1007);
// 3.更新的内容值
user.setUname("小莉");
user.setUage(17);
// 4.执行更新
int result = userMapper.updateById(user);
System.out.println("受影响的行数=" + result);
}
方法二:
1-使用QueryWrapper,它只负责条件的匹配
测试代码:
@Test
public void test05(){ // 第一种:使用QueryWrapper,根据条件进行更新
// 1.设置更新的内容值
User user = new User();
user.setUname("王五");
user.setUage(45);
// 2.设置更新的匹配条件,可以叠加多个,类似于and
QueryWrapper<User> wapper = new QueryWrapper<>();
// 参数1:数据库中的字段名 参数2:字段名的值(匹配的值)
// 解读:把数据库中uid字段为1015和1016的值修改成user中的内容
wapper.eq("uid",1015);
wapper.or(); // 在查询中拼接or
wapper.eq("uid",1016);
// 语句还原:UPDATE tb_user SET uname='王五', age=45 WHERE uid = 1015 OR uid = 1016
// 3.开始更新,参数1:更新的内容 参数2:更新的匹配条件
int result = userMapper.update(user, wapper);
System.out.println("受影响的行数=" + result); //
}
2-使用UpdateWrapper进行更新操作
测试代码:
@Test
public void test06(){ // 第二种:使用UpdateWrapper,根据条件进行更新
// 1.定义一个UpdateWrapper对象
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
// 2.设置参数
// set(String column, Object val),参数1:数据库中的字段名 参数2:修改后的值
// eq(String column, Object val),参数1:数据库中的字段名 参数2:修改条件
// or(),使查询条件变成用or拼接
wrapper.set("uname","第五人格").set("age",28)
.eq("uid",1018).or().eq("uid",1019);
// 3.执行修改,使用UpdateWrapper,参数1指定为 null
int result = userMapper.update(null, wrapper);
System.out.println("受影响的行数=" + result); // 2
// SQL:UPDATE tb_user SET uname=?,age=? WHERE uid = ? OR uid = ?
}
注意两个条件直接如果要用OR拼接,则需要在两个条件之家插入or()方法。
3、删除操作:
1-根据id来删除
@Test
public void test03(){
// 1.直接根据id进行删除
int result = userMapper.deleteById(1014);
System.out.println("受影响的行数=" + result); //
}
2-根据map条件进行删除
@Test
public void test07(){ // 根据Map来进行删除,多条件之间是and关系
// 1.构建删除条件map
Map<String,Object> map = new HashMap<>();
// 2.设置删除条件的值,参数1:数据库中的字段名,参数2:条件值
map.put("uname","艾玛x");
map.put("age",80);
// 3.执行删除
int result = userMapper.deleteByMap(map);
System.out.println("受影响的行数=" + result); // 1
// SQL:DELETE FROM tb_user WHERE uname = ? AND age = ?
}
3-根据查询条件Wrapper进行删除:delete(Wrapper<T> wrapper)
使用QueryWrapper进行删除,测试代码:
@Test
public void test08(){
// 1.构建一个QueryWrapper对象
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 2.为QueryWrapper对象设置条件
wrapper.eq("uid",1010).eq("uname","小柳")
// 也可以设置OR条件
.or().eq("uid",1015);
// 3.执行删除
int result = userMapper.delete(wrapper);
System.out.println("受影响的行数=" + result); // 2
// SQL:DELETE FROM tb_user WHERE uid = ? AND uname = ? OR uid = ?
}
4-根据id集合实现批量删除:deleteBatchIds(Collection idList)
测试代码:
@Test
public void test09(){
// 根据集合进行删除(使用的是SQL中的in关键字)
// 1.构建一个存放id列表的集合
List<Integer> idList = new ArrayList<>();
// 2.存放要进行删除的id,存放了3个id
idList.add(1021);
idList.add(1022);
idList.add(1023);
// 3.执行删除
int result = userMapper.deleteBatchIds(idList);
System.out.println("受影响的行数=" + result); // 3
// SQL:DELETE FROM tb_user WHERE uid IN ( ? , ? , ? )
}
以上就是BaseMapper中增删改操作的方法。
接下来,介绍其查询方法,MybatisPlus(MP)提供了多种查询操作,包括根据id查询,批量查询、单挑记录查询、查询列表、分页查询等操作。
4、查询操作
1-根据id查询单个记录
测试代码:
@Test
public void test01(){// 根据id进行查询
// 1.执行查询操作
User user = userMapper.selectById(1018);
// 2.输出查询结果
System.out.println(user);
}
如果出现以下情况,则需要指定@TableId
2-根据id集合列表查询多个记录:selectBatchIds(Collection idList)
测试代码:
@Test
public void test02(){// 根据id集合进行批量查询
// 1.创建id列表并赋值
List<Integer> ids = new ArrayList<>();
ids.add(1016);
ids.add(1017);
ids.add(1018);
// 2.执行查询
List<User> users = userMapper.selectBatchIds(ids);
// 3.遍历查询结果集
for (User user : users) {
// 4.打印查询结果
System.out.println(user);
}
// SQL:SELECT uid,uname FROM tb_user WHERE uid IN ( ? , ? , ? )
}
3-根据条件进行查询,用map来封装查询条件
测试代码:
@Test
public void test03(){
// 1.构建查询条件
Map<String, Object> map = new HashMap<>();
map.put("uname","第五人格");
map.put("age",28); // 多个条件之间的SQL用and拼接
// 2.执行查询
List<User> users = userMapper.selectByMap(map);
// 3.打印输出
printUsers(users);
// SQL:SELECT uid,uname FROM tb_user WHERE uname = ? AND age = ?
}
4-查询单挑记录,若返回加过大于一个,抛出异常MybatisSystemException
测试代码:
@Test
public void test04(){ // 查询单条记录
// 1.定义查询条件对象
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 2.设置查询条件
wrapper.eq("uname","第五人格");
// 查询的记录>1个时,抛出异常MyBatisSystemException
User user = userMapper.selectOne(wrapper);
// 3.打印结果
System.out.println(user);
// SQL:SELECT uid,uname FROM tb_user WHERE uname = ?
}
5-查询符合条件的记录数,Integer selectCount(Wrapper<User> queryWrapper)
测试代码:
@Test
public void test05(){ // 查询记录数,类似于conut(*)
// 若需要设置条件可使用Wrapper对象,null表示查询所有
Integer count = userMapper.selectCount(null);
// 打印返回的记录数
System.out.println("记录数有 = " + count);
// SQL:SELECT COUNT( 1 ) FROM tb_user
}
6-查询符合条件的记录列表,List<User> selectList(Wrapper<User> queryWrapper)
若参数为null,则为查询所有
测试代码:
@Test
public void test06(){//根据查询条件查询列表
// 1.构建一个QueryWrapper对象
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 2.设置条件,参数1:数据库字段名,参数2:参数值
wrapper.eq("uname","第五人格");
// 3.执行查询
List<User> users = userMapper.selectList(wrapper);
//List<User> users = userMapper.selectList(null);// 查询所有
// 4.打印结果
printUsers(users);
}
7-根据条件把查询结果封装在Map和List中
List<Map<String, Object>> selectMaps(Wrapper<User> queryWrapper)
测试代码:
@Test
public void test07(){
List<Map<String, Object>> maps = userMapper.selectMaps(null);
for (Map<String, Object> map : maps) {
// 一个map对应一条记录
// 每个map的key都为字段名
// 每个map的值都为字段具体值
System.out.println(map);
}
}
8-分页查询
首先定义一个新的类为配置类(MybatisPlusConfig)
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class MybatisPlusConfig { // 分页插件
@Bean // 注入Spring容器中
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}
之后开始测试,代码如下:
@Test
public void test09(){ // 测试分页
// 1.查询条件,null则为查询所有
Wrapper<User> wrapper = null;
// 1.1 使用其构造,参数1:当前页,参数2:每页的大小
Page<User> page = new Page<>(1,2);
// 2.执行查询
// 参数1:为接口Ipage,其实现类只有一个Page,参数2:为查询条件,返回一个Ipage对象
IPage<User> userIPage = userMapper.selectPage(page, wrapper);
// 3.打印重要参数
System.out.println("总页数= " + userIPage.getPages());
System.out.println("总记录数= " + userIPage.getTotal());
System.out.println("页面大小= " + userIPage.getSize());
System.out.println("当前页= " + userIPage.getCurrent());
System.out.println("查询结果如下:" );
// 4.打印分页结果
for (User user : userIPage.getRecords()) {
System.out.println(user);
}
// SQL:SELECT uid,uname,age AS uage FROM tb_user LIMIT ?,?
}
至此,关于BaseMapper接口中的所有方法都已经测试完成了!
Mybatis插件之Mybatis-Plus的CRUD方法的更多相关文章
- 自己动手编写一个Mybatis插件:Mybatis脱敏插件
1. 前言 在日常开发中,身份证号.手机号.卡号.客户号等个人信息都需要进行数据脱敏.否则容易造成个人隐私泄露,客户资料泄露,给不法分子可乘之机.但是数据脱敏不是把敏感信息隐藏起来,而是看起来像真的一 ...
- mybatis插件机制
目录 mybatis插件机制 主要 类/接口 和 方法 mybatis插件机制实现 mybatis插件机制 mybatis的插件机制使用动态代理实现,不了解的朋友请先了解代理模式和动态代理:插件本质是 ...
- 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法
spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...
- intellij IDEA mybatis插件破解方法
1>安装mybatis插件,找到mybatis_plus.jar包的位置,在C:\Users\LZHL\.IntelliJIdea2016.3\config\plugins\mybatis_pl ...
- Mybatis 原始dao CRUD方法
用到的相关jar包及所用版本如下: 其中的Mybatis可以到github.com的网站下载 <project xmlns="http://maven.apache.org/POM/4 ...
- Mybatis学习之自定义持久层框架(六) 自定义持久层框架:完善CRUD方法并进行测试
前言 没想到会等到半年以后才来写这篇文章,我已经不记得当初自己想要在这篇文章中写什么了,还好有一些零散的笔记留着,就对照着上一篇文章及零散的笔记,把内容给补充完吧. 完善CRUD方法 完善Defaul ...
- MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间
Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.q ...
- MyBatis 插件 : 打印 SQL 及其执行时间
Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用: Executor(update. ...
- MyBatis插件及示例----打印每条SQL语句及其执行时间
Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.q ...
- SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作
SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作 1> 数据准备 -- 创建测试表 CREATE TABLE `tb_user` ( `id` ) NOT ...
随机推荐
- JMeter性能测试工具
1.官网资源 地址:https://jmeter.apache.org/download_jmeter.cgi window下载zip版本 options配置-选择语言-简体(jmeter.prope ...
- jQuery和原生JS的对比
原生JS的缺点: 不能添加多个入口函数(window.onload),如果添加了多个,后面的会把前面的覆盖掉 原生js的api名字太长,难以书写,不易记住 原生js有的代码冗余 原生js中的属性或者方 ...
- [git]一个本地仓库,多个远程仓库
操作步骤如下: 1. 克隆某个远程仓库的代码到本地 git clone http://...... // 或者 git clone git@.... 2. 查看当前远程仓库地址 // 查看需要添加的远 ...
- chrome扩展开发实战入门之一-hellocrx
后记:在写这篇文章时,我还没搞懂chrome扩展的基本原理.后来才明白,最简单(且实用)的扩展只需要manifest.json和content_scripts.js两个文件,无需background. ...
- luogu 2943 [USACO09MAR]清理Cleaning Up 动态规划
非常巧妙的动态规划. 你会发现每一个区间地颜色种类不能超过 $\sqrt n$, 所以可以直接枚举区间颜色种类. 令这个为 $pos[j],$ 然后考虑如何去更新这个东西就行了. Code: #inc ...
- Irrlicht引擎剖析二
- Editor
E. Editor 我们把"("用1表示,")"用-1表示,其余字母用0表示,这样形成的一个数组,我们求出它的前缀和sum[],只有当\(sum[n]==0\) ...
- docker实战之通过nginx镜像来部署静态页
本章我们主要讲解如何通过docker构建一个nginx容器,这里我们以部署一个静态html为素材来进行演示. 首先我们通过[docker search nginx]命令来查找Docker Hub上的n ...
- Java实现线程的三种方式和区别
Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...
- Mybatis 传入多个参数查询数据 (3种方法)
第一种方案 DAO层的函数方法 public User selectUser(String name,String area); 对应的Mapper.xml <select id="s ...