MybatisPlus学习〖三〗

我们继续学习mp的增删改查接口

代码具体的实现

条件构造器实现

1. 查询user表中user_name字段模糊查询’张’,或者user_age年龄大于20岁,按照user_age降序排列,年龄相同的就按照id升序排列

 @Testpublic void select_1_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.like("user_name","张").or().ge("user_age",20).orderByDesc("user_age").orderByAsc("id");List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}

利用条件构造器来拼接SQL语句

  • like() : SQL里的like字段
  • or() : 实现拼接一个简单的or字段在SQL语句里面
  • ge() : 实现拼接一个">=",第一个字段指定数据库字段名称,第二个代表值
  • orderByDesc/orderByAsc() : 在语句中拼接orderbyDesc/orderByAsc语句

查询结果如下
mp已经自动帮我们拼接好了SQL语句并查询出记录


2.查询user表中姓名有张,或者年龄小于30大于18且email不为空的用户

 @Testpublic void select_2_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.likeRight("user_name","张").or(wq->wq.lt("user_age",30).gt("user_age",18).isNotNull("user_email"));List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}

相同的方法就不再一一列举,这里只列举未出现的方法的意思

  • likeRight : 相当于like 'xx%'在右边拼接%,likeLeft就是在参数左边拼接%
  • gt : 实现拼接>符号,第一个参数为数据库字段,第二个为>参数
  • isNotNull : 实现拼接xx参数is not null语句

输出目录,果然已经拼接上去,这里的or()实现了把后面字段加进括号内的Lambda表达式来实现

DEBUG==>  Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (user_name LIKE ? OR ( (user_age < ? AND user_age > ? AND user_email IS NOT NULL) ))
DEBUG==> Parameters: 张%(String), 30(Integer), 18(Integer)
TRACE<==    Columns: id, user_phone, user_email, user_name, user_age
TRACE<==        Row: 2, 15336155900, dsadas@qq.com, 乔佳, 20
TRACE<==        Row: 3, 1312312312312, aiqianqian1@qq.com, 张倩, 27
TRACE<==        Row: 4, 1312312312312, aikaikai@qq.com, 张倩, 25
TRACE<==        Row: 5, 1312312312312, , 张倩111, 18
DEBUG<==      Total: 4

3.查询(年龄小于30或者email不为空)且名字有张的用户信息

  @Testpublic void select_3_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.nested(qw->qw.lt("user_age",30).or().isNotNull("user_email")).likeRight("user_name","张");List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • lt : 拼接小于符号
  • nested : 实现一开始拼接()里面使用Lambda表达式来实现

输出目录如下,SQL语句实现了先拼接()在拼接AND user_name LIKE…

DEBUG==>  Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (( (user_age < ? OR user_email IS NOT NULL) ) AND user_name LIKE ?)
DEBUG==> Parameters: 30(Integer), 张%(String)
TRACE<==    Columns: id, user_phone, user_email, user_name, user_age
TRACE<==        Row: 3, 1312312312312, aiqianqian1@qq.com, 张倩, 27
TRACE<==        Row: 4, 1312312312312, aikaikai@qq.com, 张倩, 25
TRACE<==        Row: 5, 1312312312312, , 张倩111, 18
DEBUG<==      Total: 3

4.查询指定字段并且用户年龄在指定年龄中

@Testpublic void select_4_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.select("user_name","user_age","user_email").in("user_age", Arrays.asList(20,6,30,15));List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • select : 实现查询指定字段的记录,参数为数据库字段名
  • in : 实现了拼接in(x,x,x…),第一个参数为数据库字段名,第二个参数为一个list包含in里面的内容

输出目录如下,SQL语句实现了查询指定字段并且in(x,x,x…)的记录

DEBUG==>  Preparing: SELECT user_name,user_age,user_email FROM user WHERE (user_age IN (?,?,?,?))
DEBUG==> Parameters: 20(Integer), 6(Integer), 30(Integer), 15(Integer)
TRACE<==    Columns: user_name, user_age, user_email
TRACE<==        Row: 乔佳, 20, dsadas@qq.com
DEBUG<==      Total: 1

5.查询不为空的字段加进查询子句中

 @Testpublic void select_5_ByWrapper(){String name="王";String age="";QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.like(StringUtils.isNotEmpty(name),"user_name",name).like(StringUtils.isNotEmpty(age),"user_age",age);List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • like : 可以实现带三个参数的方法,第一个参数若为false就不加指定字段的内容

输出目录如下,SQL语句实现了将不为空的字段加进like语句里面

DEBUG==>  Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (user_name LIKE ?)
DEBUG==> Parameters: %王%(String)
TRACE<==    Columns: id, user_phone, user_email, user_name, user_age
TRACE<==        Row: 1, 17729020601, 155019@qq.com, 王凯艺, 10
DEBUG<==      Total: 1

6.通过实体类查询实体类有的字段的信息

 @Testpublic void select_6_ByWrapper(){UserDO userDO=new UserDO();userDO.setUserAge(20);userDO.setUserName("张倩");QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>(userDO);List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • 这里我们直接构造了一个对象,将对象传进去,拼接里面不为空的字段到where中,实现查询
DEBUG==>  Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE user_name=? AND user_age=?
DEBUG==> Parameters: 张倩(String), 20(Integer)
DEBUG<==      Total: 0

7.通过selectMap的方式返回一个map查询你想要的字段信息

@Testpublic void select_7_ByWrapperByMaps(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.select("user_name","user_phone").like("user_name","张").eq("user_age",18);List<Map<String,Object>> userDOList=userDOMapper.selectMaps(queryWrapper);}
  • eq : 拼接=符号,第一个参数为数据库字段,第二个参数为拼接=后的内容
  • selectMaps : 这里使用了map来传递查询指定字段记录,其余字段并不显示

输出日志如下,结果为Map的两个字段的内容

DEBUG==>  Preparing: SELECT user_name,user_phone FROM user WHERE (user_name LIKE ? AND user_age = ?)
DEBUG==> Parameters: %张%(String), 18(Integer)
TRACE<==    Columns: user_name, user_phone
TRACE<==        Row: 张倩111, 1312312312312
DEBUG<==      Total: 1

8.查询在查询条件下的返回记录数

   @Testpublic void select_8_ByWrapperCount(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.like("user_name","张").le("user_age",30);Integer count=userDOMapper.selectCount(queryWrapper);System.out.println("总记录数: "+count);}
  • le : 拼接<=符号,数据库字段+参数内容
  • selectCount : 使用查询记录的方法,返回一个查询的记录数

输出日志如下,返回一个记录数

DEBUG==>  Preparing: SELECT COUNT( 1 ) FROM user WHERE (user_name LIKE ? AND user_age <= ?)
DEBUG==> Parameters: %张%(String), 30(Integer)
TRACE<==    Columns: COUNT( 1 )
TRACE<==        Row: 3
DEBUG<==      Total: 1
总记录数: 3

9.lambda表达式拼接语句防误写

    @Testpublic void select_9_Lambda(){LambdaQueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>().lambda();queryWrapper.select(UserDO::getId).like(UserDO::getUserName,"张").le(UserDO::getUserAge,30);List<UserDO> list=userDOMapper.selectList(queryWrapper);}
  • new QueryWrapper().lambda() : 这里使用lambda()方法来实现lambda表达式
  • select : (类名:: 参数)来实现 select(“数据库的字段名”)一样的方法

输出日志如下,这里使用lambda表达式来防误写数据库字段

DEBUG==>  Preparing: SELECT id FROM user WHERE (user_name LIKE ? AND user_age <= ?)
DEBUG==> Parameters: %张%(String), 30(Integer)
TRACE<==    Columns: id
TRACE<==        Row: 3
TRACE<==        Row: 4
TRACE<==        Row: 5
DEBUG<==      Total: 3

10.实现分页查询查询在条件下若每页显示2条记录,显示第一页的记录

分页查询

@Testpublic void select_10_Page(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.le("user_age",30);Page<UserDO> page=new Page<>(1,2);IPage<UserDO> iPage=userDOMapper.selectPage(page,queryWrapper);System.out.println("总页数: "+iPage.getPages());System.out.println("总记录数: "+iPage.getTotal());List<UserDO> records = iPage.getRecords();
//   引用输出     records.forEach(System.out::println);records.forEach(l-> System.out.println(l));}
  • new Page<>(1,2) : 第一个参数为第几页,第二个参数为一页显示的数量
  • selectPage : 实现分页查询,第一个参数为设置好的page对象,第二个参数为构造器内容

输出日志如下,这里我们输出了总页数与总记录

DEBUG==>  Preparing: SELECT COUNT(1) FROM user WHERE (user_age <= ?)
DEBUG==> Parameters: 30(Integer)
TRACE<==    Columns: COUNT(1)
TRACE<==        Row: 5
DEBUG==>  Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (user_age <= ?) LIMIT ?,?
DEBUG==> Parameters: 30(Integer), 0(Long), 2(Long)
TRACE<==    Columns: id, user_phone, user_email, user_name, user_age
TRACE<==        Row: 1, 17729020601, 155019@qq.com, 王凯艺, 10
TRACE<==        Row: 2, 15336155900, dsadas@qq.com, 乔佳, 20
DEBUG<==      Total: 2
总页数: 3
总记录数: 5
UserDO(id=1, userName=王凯艺, userPhone=17729020601, userAge=10, userEmail=155019@qq.com)
UserDO(id=2, userName=乔佳, userPhone=15336155900, userAge=20, userEmail=dsadas@qq.com)

11.根据id更新用户信息

  @Testpublic void select_11_updateById(){UserDO userDO=new UserDO();userDO.setId(4);userDO.setUserAge(25);userDO.setUserEmail("aikaikai@qq.com");int rows=userDOMapper.updateById(userDO);System.out.println("影响了: "+rows+" 行");}
  • updateById : 这里我们传入一个实体类对象,根据id来更新实体类里存在的字段名称,返回一个影响的记录数
DEBUG==>  Preparing: UPDATE user SET user_email=?, user_age=? WHERE id=?
DEBUG==> Parameters: aikaikai@qq.com(String), 25(Integer), 4(Integer)
DEBUG<==    Updates: 1
影响了: 1 行

12.更新用户年龄和邮箱被更新用户信息为张倩,邮箱为qianqian@qq.com

  @Testpublic void select_12_update(){UpdateWrapper<UserDO> userDOUpdateWrapper=new UpdateWrapper<>();userDOUpdateWrapper.eq("user_name","张倩").eq("user_email","qianqian@qq.com");UserDO userDO=new UserDO();userDO.setUserAge(26);userDO.setUserEmail("aiqianqian@qq.com");int rows=userDOMapper.update(userDO,userDOUpdateWrapper);System.out.println("影响记录数: "+rows);}
  • new UpdateWrapper<>() : 这里使用这个构造方法来拼接where后的sql语句
  • update() : 这个方法有两个参数,第一个参数传入一个实体类,包含实体类里有的字段都会更新,第二个参数使用构造器来拼接where后的字段

输出日志如下,这里我们输出了update方法

DEBUG==>  Preparing: UPDATE user SET user_email=?, user_age=? WHERE (user_name = ? AND user_email = ?)
DEBUG==> Parameters: aiqianqian@qq.com(String), 26(Integer), 张倩(String), qianqian@qq.com(String)
DEBUG<==    Updates: 0
影响记录数: 0

13.当更新少数字段的时候可以用set方法

@Testpublic void select_13_update(){UpdateWrapper<UserDO> userDOUpdateWrapper=new UpdateWrapper<>();userDOUpdateWrapper.eq("user_name","张倩").eq("user_email","aiqianqian@qq.com").set("user_age",27);int rows=userDOMapper.update(null,userDOUpdateWrapper);System.out.println("影响记录数: "+rows);}
  • set : 使用这个方法可以使更新少数字段更为简便,数据库字段名+参数

输出日志如下,这里我们我们的update跟的第一个参数实体类我们要设置为空才可以

DEBUG==>  Preparing: UPDATE user SET user_age=? WHERE (user_name = ? AND user_email = ?)
DEBUG==> Parameters: 27(Integer), 张倩(String), aiqianqian@qq.com(String)
DEBUG<==    Updates: 0
影响记录数: 0

14.Lambda表达式更新用户信息

  @Testpublic void select_14_updateLambda(){LambdaUpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>().lambda();updateWrapper.eq(UserDO::getUserName,"张倩").eq(UserDO::getUserAge,27).set(UserDO::getUserEmail,"aiqianqian1@qq.com");int rows=userDOMapper.update(null,updateWrapper);System.out.println("影响记录数: "+rows);}

这里我们跟之前lambda表达式一样,引用(类名::方法名)就可以指定数据库字段

DEBUG==>  Preparing: UPDATE user SET user_email=? WHERE (user_name = ? AND user_age = ?)
DEBUG==> Parameters: aiqianqian1@qq.com(String), 张倩(String), 27(Integer)
DEBUG<==    Updates: 1
影响记录数: 1

15.根据id删除信息返回删除条数

@Testpublic void select_15_deleteById(){`在这里插入代码片`int rows=userDOMapper.deleteById(6);System.out.println("删除条数 :"+rows+" 条");}
  • deleteById : 删除指定id记录,返回删除的记录数
DEBUG==>  Preparing: DELETE FROM user WHERE id=?
DEBUG==> Parameters: 6(Integer)
DEBUG<==    Updates: 0
删除条数 :0 条

16.根据map设置进去的参数删除符合条件的记录

@Testpublic void select_16_deleteByMap(){Map<String,Object> map=new HashMap<>();map.put("user_name","测试");map.put("user_age",25);int rows=userDOMapper.deleteByMap(map);System.out.println("删除条数 :"+rows+" 条");// 下一个方法是批量删除id为list里的记录,返回删除记录数// int row=userDOMapper.deleteBatchIds(Arrays.asList(7));}
  • deleteByMap : 根据map里面的字段来删除指定记录,返回了一个删除记录数

输出日志如下,这里输出了删除语句

DEBUG==>  Preparing: DELETE FROM user WHERE user_name = ? AND user_age = ?
DEBUG==> Parameters: 测试(String), 25(Integer)
DEBUG<==    Updates: 0
删除条数 :0 条

17.Lambda表达式拼接删除语句

 @Testpublic void select_17_deleteLambda(){LambdaQueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>().lambda();queryWrapper.eq(UserDO::getUserName,"测试").eq(UserDO::getUserAge,15);int rows=userDOMapper.delete(queryWrapper);System.out.println("删除条数 :"+rows+" 条");}

输出日志如下,这里运用了lambda表达式拼接SQL语句,返回一个删除记录数

DEBUG==>  Preparing: DELETE FROM user WHERE (user_name = ? AND user_age = ?)
DEBUG==> Parameters: 测试(String), 15(Integer)
DEBUG<==    Updates: 0
删除条数 :0 条

制作不易,转载请标注~

MybatisPlus学习〖三〗crud接口实现相关推荐

  1. MyBatis-Plus学习总结

    MyBatis-Plus学习总结 什么是MyBatis-Plus? MyBatis-Plus的优点有哪些? 快速开始(在SpringBoot中使用MP) MyBatis-Plus常用注解 MyBati ...

  2. 【Mybatis-Plus 学习笔记】2、日志配置及常用 CRUD

    前言 上一篇文章中我们讲了 Mybatis-Plus 的定义以及相关特点,并从零开始编写了一个 SpringBoot + Mybatis-Plus 的实例.今天我们就来看看,如何利用 MP 来实现对数 ...

  3. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-7.分类的模型关联和通用CRUD接口

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-7.分类的模型关联和通用CRUD接口 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-1.工具和 ...

  4. MyBatis-Plus(八)Mapper的CRUD接口5:增删改操作

    Mapper的CRUD接口5:增删改操作 1.新增数据 insert 方法可以将一个实体对象插入到对应的数据表中: @RestController public class HelloControll ...

  5. MyBatis-Plus 学习笔记

    MyBatis-Plus 学习笔记 学习官网: https://mp.baomidou.com/guide/ 一.快速入门 1.简介 MyBatis的增强工具,在Mybatis的基础上只做增强功能,兼 ...

  6. MyBatisPlus 学习笔记_MP的AR模式

    狂神说 MyBatisPlus 学习笔记 一.快速入门 文档:https://mp.baomidou.com/ 使用第三方组件: 导入对应依赖 研究依赖如何配置 代码如何编写 提高扩展技术能力 步骤: ...

  7. MyBatisPlus 学习文档 2021-9-25

    文章目录 MyBatis Plus 基础篇 一.简介 三.基本开发环境 1. 准备数据 2. Hello World 第一步:创建一个 Spring Boot 项目 第二步:编辑 pom.xml 文件 ...

  8. MyBatis-Plus学习基本教程!

    一.MyBatis-Plus 1.简介 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBa ...

  9. 深度学习三(PyTorch物体检测实战)

    深度学习三(PyTorch物体检测实战) 文章目录 深度学习三(PyTorch物体检测实战) 1.网络骨架:Backbone 1.1.神经网络基本组成 1.1.1.卷积层 1.1.2.激活函数层 1. ...

最新文章

  1. OpenCV Hough Line变换
  2. python常用数据结构的常用操作
  3. centos服务器之间相互挂载(samba)
  4. svn的更新、合并、提交
  5. 产业企业和投资机会研究(中小板、创业板) 碧水源(300070)创业板
  6. python 预测足球_利用 Python 预测英雄联盟胜负,分析了 5 万多场比赛才得出的数据!...
  7. 【工作秘籍】Facebook内部高效工作大揭秘
  8. Report Service 中数据类型的问题
  9. SAP云平台里Run index.html和Run as SAP Fiori Launchpad的区别
  10. 5如何让进行项目管理
  11. 最易忽视的肾虚4件事
  12. Keras-2 Keras Mnist
  13. 小菜学Flex2(二 currentState初步使用)
  14. Elasticsearch6.3.0环境安装
  15. 【计算机三级网络】考前看一看,必过60分
  16. 第8节 破解系统密码—利用win7漏洞和PE系统破解密码
  17. 西安交通大学MOOC C++期末1
  18. C语言中“=,^=,|=”分别表示什么意
  19. 电缆的差分特性阻抗(120欧姆)及插入损耗的测量方法
  20. 【信号处理】数字信号处理Matlab设计附GUI界面和报告

热门文章

  1. js 数组entries迭代方法
  2. 数组的entries()方法
  3. 【眼见为实】自己动手实践理解数据库REPEATABLE READ Next-Key Lock
  4. 传统6大茶类都有哪些
  5. Scratch3.0创意编程(基础篇):第4课 算数小达人
  6. PowerMill2019基础到三四五轴编程视频教程全
  7. 计算机二级选择题37套word,计算机二级word选择题
  8. linux文件扫描并打印,Linux办公一条龙—Linux中扫描、打印的实现
  9. saltstack内置执行模块列表
  10. (转)少儿编程这么火, 究竟学哪一种语言最靠谱?这篇文章说透了!