MybatisPlus的CRUD及拓展
一、CRUD
1.1 查找全部用户
//查 @Test public void select(){ ? //查询全部用户 Listusers = 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("删除成功"); Listusers = userMapper.selectList(null); users.forEach(System.out::println); }else System.out.println("删除失败"); }
结果
二、拓展
1. select
1.1 批量查询
@Test public void select() { ? //查询 1,2,3号用户 Listusers = userMapper.selectBatchIds(Arrays.asList(1, 2, 3)); users.forEach(System.out::println); ? }
结果
1.2 条件查询
@Test public void selectByMap(){ HashMapmap=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(){ Pagepage=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() { HashMapmap = 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); ? }
结果