Mybatis-Plus基础入门知识详细讲解-mybatisplus极速入门版

缺乏、安全感 2023-09-25 22:54 231阅读 0赞

#

Mybatis-Plus基础知识入门和运用

    • 简介
    • 标准数据层开发
        • 1.标准CRUD使用
        • 分页功能
    • DQL编程控制
        • 1.条件查询方式
        • 2.查询投影
        • 3.查询条件设定
        • 4.字段映射与表名映射

简介

MyBatis-Plus(简称MP )是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。

在这里插入图片描述

从这张图中我们可以看出MP旨在成为MyBatis的最好搭档,而不是替换MyBatis,所以可以理解为MP是MyBatis的一套增强工具,它是在MyBatis的基础上进行开发的,我们虽然使用MP但是底层依然是MyBatis的东西,也就是说我们也可以在MP中写MyBatis的内容。

标准数据层开发

1.标准CRUD使用

对于标准的CRUD功能MP提供了这些方法可以使用。

在这里插入图片描述

创建一个user实体类

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. public class User {
  5. private Long id;
  6. private String name;
  7. private String password;
  8. private Integer age;
  9. private String tel;
  10. }

创建一个userdao接口

  1. @Mapper
  2. public interface UserDao extends BaseMapper<User> {
  3. }

在测试类中测试

  1. SpringBootTest
  2. class MybatisplusApplicationTests {
  3. @Autowired
  4. private UserDao userDao;
  5. //新增
  6. @Test
  7. void testsave() {
  8. User user=new User();
  9. user.setName("zhang");
  10. user.setPassword("111");
  11. user.setAge(11);
  12. user.setTel("1112");
  13. userDao.insert(user);
  14. }
  15. //删除
  16. @Test
  17. void testdelete(){
  18. userDao.deleteById(1645347976381272065L);
  19. }
  20. //修改
  21. @Test
  22. public void testupdate(){
  23. User user=new User();
  24. user.setId(1L);
  25. user.setName("lisi");
  26. userDao.updateById(user);
  27. }
  28. //查询
  29. @Test
  30. public void testGetAll(){
  31. List<User> userList= userDao.selectList(null);
  32. System.out.println(userList);
  33. }

分页功能

分页查询使用的方法是:

  1. IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)

IPage:用来构建分页查询条件
Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null
IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage
IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+h,会找到其有一个实现类为Page。

调用方法传入参数获取返回值

  1. @SpringBootTest
  2. class Mybatisplus01QuickstartApplicationTests {
  3. @Autowired
  4. private UserDao userDao;
  5. //分页查询
  6. @Test
  7. void testSelectPage(){
  8. //1 创建IPage分页对象,设置分页参数,1为当前页码,3为每页显示的记录数
  9. IPage<User> page=new Page<>(1,3);
  10. //2 执行分页查询
  11. userDao.selectPage(page,null);
  12. //3 获取分页结果
  13. System.out.println("当前页码值:"+page.getCurrent());
  14. System.out.println("每页显示数:"+page.getSize());
  15. System.out.println("一共多少页:"+page.getPages());
  16. System.out.println("一共多少条数据:"+page.getTotal());
  17. System.out.println("数据:"+page.getRecords());
  18. }
  19. }

设置分页拦截器

  1. @Configuration
  2. public class MybatisPlusConfig {
  3. @Bean
  4. public MybatisPlusInterceptor mybatisPlusInterceptor(){
  5. //1 创建MybatisPlusInterceptor拦截器对象
  6. MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
  7. //2 添加分页拦截器
  8. mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
  9. return mpInterceptor;
  10. }
  11. }

如果想查看MP执行的SQL语句,可以修改application.yml配置文件

  1. mybatis-plus:
  2. configuration:
  3. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印SQL日志到控制台

DQL编程控制

1.条件查询方式

需求:查询数据库表中,年龄在10岁到30岁之间的用户信息

  1. @SpringBootTest
  2. class Mybatisplus02DqlApplicationTests {
  3. @Autowired
  4. private UserDao userDao;
  5. @Test
  6. void testGetAll(){
  7. LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
  8. lqw.lt(User::getAge, 30);
  9. lqw.gt(User::getAge, 10);
  10. List<User> userList = userDao.selectList(lqw);
  11. System.out.println(userList);
  12. }
  13. }

gt:大于(>),最终的SQL语句为

  1. SELECT id,name,password,age,tel FROM user WHERE (age < ? AND age > ?)

需求:查询数据库表中,年龄小于10或年龄大于30的数据

  1. lqw.lt(User::getAge, 10).or().gt(User::getAge, 30);

or()就相当于我们sql语句中的or关键字,不加默认是and,最终的sql语句为:

  1. SELECT id,name,password,age,tel FROM user WHERE (age < ? OR age > ?)

null的判断

  1. private UserDao userDao;
  2. @Test
  3. void testGetAll(){
  4. //模拟页面传递过来的查询数据
  5. UserQuery uq = new UserQuery();
  6. uq.setAge(10);
  7. uq.setAge2(30);
  8. LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
  9. lqw.lt(null!=uq.getAge2(),User::getAge, uq.getAge2());
  10. lqw.gt(null!=uq.getAge(),User::getAge, uq.getAge());
  11. List<User> userList = userDao.selectList(lqw);
  12. System.out.println(userList);
  13. }
  14. }

在这里插入图片描述

2.查询投影

  1. @SpringBootTest
  2. class Mybatisplus02DqlApplicationTests {
  3. @Autowired
  4. private UserDao userDao;
  5. @Test
  6. void testGetAll(){
  7. LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
  8. lqw.select(User::getId,User::getName,User::getAge);
  9. List<User> userList = userDao.selectList(lqw);
  10. System.out.println(userList);
  11. }
  12. }

3.查询条件设定

聚合函数查询:
count:总记录数
max:最大值
min:最小值
avg:平均值
sum:求和
范围匹配(> 、 = 、between)
模糊匹配(like)
空判定(null)
包含性匹配(in)
分组(group)
排序(order)
gt():大于(>)
ge():大于等于(>=)
lt():小于(<)
lte():小于等于(<=)
between():between ? and ?
like():前后加百分号,如 %J%
likeLeft():前面加百分号,如 %J
likeRight():后面加百分号,如 J%

4.字段映射与表名映射

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ID生成策略对比

介绍了这些主键ID的生成策略,我们以后该用哪个呢?
NONE: 不设置id生成策略,MP不自动生成,约等于INPUT,所以这两种方式都需要用户手动设
置,但是手动设置第一个问题是容易出现相同的ID造成主键冲突,为了保证主键不冲突就需要做很
多判定,实现起来比较复杂
AUTO:数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用
ASSIGN_UUID:可以在分布式的情况下使用,而且能够保证唯一,但是生成的主键是32位的字符
串,长度过长占用空间而且还不能排序,查询性能也慢
ASSIGN_ID:可以在分布式的情况下使用,生成的是Long类型的数字,可以排序性能也高,但是
生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键
综上所述,每一种主键策略都有自己的优缺点,根据自己项目业务的实际情况来选择使用才是最明
智的选择。

多记录操作

根据传入的id集合将数据库表中的数据删除掉(删除(根据ID 批量删除),参数是一个集合,可以存放多个id值。)。

  1. @SpringBootTest
  2. class Mybatisplus03DqlApplicationTests {
  3. @Autowired
  4. private UserDao userDao;
  5. @Test
  6. void testDelete(){
  7. //删除指定多条数据
  8. List<Long> list = new ArrayList<>();
  9. list.add(1402551342481838081L);
  10. list.add(1402553134049501186L);
  11. list.add(1402553619611430913L);
  12. userDao.deleteBatchIds(list);
  13. }
  14. }

逻辑删除

逻辑删除的本质其实是修改操作。如果加了逻辑删除字段,查询数据时也会自动带上逻辑删除字段。
执行的SQL语句为:
UPDATE tbl_user SET deleted=1 where id = ? AND deleted=0

在这里插入图片描述
美好的一天到此结束,下次继续努力!

发表评论

表情:
评论列表 (有 0 条评论,231人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MybatisPlus入门

    什么是MybatisPlus? Mybatis是中国开发的一款基于mybatis优化的框架,具有非常好的应用场景, 荣获【 2019 年度开源中国最受欢迎的软件,开发工具

    相关 MybatisPlus入门

    MyBatisPlus简介 1.项目肯定要访问数据操作,并且每个domain都有crud,需多次写重复代码。我们使用MybatisPlus,就不用写重复代码,并且还有模板