MybatisPlus的CRUD及拓展


创建一个简单的MybatisPlus项目在上一篇博客:

一、CRUD

1. select

1.1 查找全部用户

//
 @Test
 public void select(){
 ?
     //查询全部用户
     List users = userMapper.selectList(null);
     users.forEach(System.out::println);
 ?
 }

结果

 

1.2 通过id查找

@Test
 public void select() {
 ?
     //查 by id
     User user = userMapper.selectById(1L);
     System.out.println(user);
 ?
 }

结果

 

2. insert

2.1 设置对象的所有属性(包括id的时候)

//
 @Test
 public void insert(){
 ?
     User user = new User(6L, "Windy", 12, "10213@qq.com");
     int i = userMapper.insert(user);
     if (i!=0){
         System.out.println("添加成功");
         User userWindy = userMapper.selectById(user.getId());
         System.out.println("新用户名为:"+userWindy);
     }else System.out.println("添加失败");
 }

结果

 

2.2 只设置部分属性(不包含id)

@Test
 public void insert() {
 ?
     //User user = new User(6L, "Windy", 12, "10213@qq.com");
     User user = new User();
     user.setName("Windy");
     user.setAge(12);
     user.setEmail("10213@qq.com");
     int i = userMapper.insert(user);
 ?
     System.out.println(i);
     System.out.println("新用户为:" + user);
 }

结果

 

2.3 错误盘点

插入时没有自动配值,而是将0赋给id,再进行一次插入就报错

  org.springframework.dao.DuplicateKeyException

 

第一次

第二次

 

 

原因:实体类User中的 id 使用的是原始数据类型 long

解决:将 long 改为 包装类 Long

 

3. update

注意使用updateById,这样才能通过id修改

//
 @Test
 public void update() {
 ?
     User user = new User(6L, "Ridden", 65, "67542@qq.com");
     int i = userMapper.updateById(user);
     if (i != 0) {
         System.out.println("修改成功");
         User userRidden = userMapper.selectById(user.getId());
         System.out.println("修改后用户为:" + userRidden);
     } else System.out.println("修改失败");
 }

结果

 

4. delete

//
 @Test
 public void delete() {
 ?
     int i = userMapper.deleteById(6L);
     if (i != 0) {
         System.out.println("删除成功");
         List users = userMapper.selectList(null);
         users.forEach(System.out::println);
     }else System.out.println("删除失败");
 }

结果

 

二、拓展

1. select

1.1 批量查询

@Test
 public void select() {
 ?
     //查询 1,2,3号用户
     List users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
     users.forEach(System.out::println);
 ?
 }

结果

 

1.2 条件查询

@Test
 public void selectByMap(){
     HashMap map=new HashMap<>();
 ?
     //自定义查询
     map.put("name","Tom");
 ?
     List users = userMapper.selectByMap(map);
     users.forEach(System.out::println);
 ?
 }

结果

 

1.3 分页查询

在配置类 MybatisPlusConfig 加入分页插件

//分页插件
 @Bean
 public PaginationInterceptor paginationInterceptor(){
     return new PaginationInterceptor();
 }

测试

@Test
 public void selectByPage(){
     Page page=new Page<>(1,5);
     //current:当前页
     //size:页面大小
     userMapper.selectPage(page,null);
 ?
     page.getRecords().forEach(System.out::println);
 }

结果

 

2. delete

2.1 批量删除

@Test
 public void delete() {
 ?
     //批量删除
     userMapper.deleteBatchIds(Arrays.asList(4L,5L,6L));
 ?
 }

结果

 

2.2 map删除

@Test
 public void deleteByMap() {
     HashMap map = new HashMap<>();
 ?
     map.put("name","Jack");
 ?
     userMapper.deleteByMap(map);
 }

结果

 

2.3 逻辑删除

  • 物理删除:从数据库中直接移除

  • 逻辑删除:在数据库中没有被移除,而是通过一个变量让其失效( delete=0 --> delete=1 )

    比如:管理员可以查看删除记录

 

数据库添加deleted

 

User
package com.zy.pojo;
 ?
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 ?
 import java.util.Date;
 ?
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class User {
 ?
     //对应数据库的主键(UUID,自增id,雪花算法,redis,zookeeper)
     //@TableId(type = IdType.ID_WORKER) //全局唯一id
     @TableId(type = IdType.AUTO) //主键自增,对应数据库字段一定要自增
     //@TableId(type = IdType.INPUT) //手动输入
     private Long id;
     private String name;
     private Integer age;
     private String email;

     @TableLogic //逻辑删除
     private Integer deleted;
 
 }

要点: @TableLogic

 

配置了添加逻辑删除插件

MybatisPlusConfig

//逻辑删除插件
 @Bean
 public ISqlInjector sqlInjector() {
     return new LogicSqlInjector();
 }
配置文件配置逻辑删除
application.properties

 # 逻辑已删除值(默认为 1)
 mybatis-plus.global-config.db-config.logic-delete-value= 1 
 # 逻辑未删除值(默认为 0)
 mybatis-plus.global-config.db-config.logic-not-delete-value= 0 

 

测试
@Test
 public void deleteLog(){
     userMapper.deleteById(5L);
 }

结果

 

再查询被删用户
@Test
 public void select() {
 ?
     User user = userMapper.selectById(5L);
     System.out.println(user);
 ?
 }

结果