• MybatisPlus的CRUD及拓展


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

    一、CRUD

    1. select

    1.1 查找全部用户

    //
     @Test
     public void select(){
     ​
         //查询全部用户
         List<User> 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<User> 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<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
         users.forEach(System.out::println);
     ​
     }

    结果

     

    1.2 条件查询

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

    结果

     

    1.3 分页查询

    在配置类 MybatisPlusConfig 加入分页插件

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

    测试

    @Test
     public void selectByPage(){
         Page<User> 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<String, Object> 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);
     ​
     }

    结果

     

  • 相关阅读:
    搭建 Linux 下 GitLab 服务器(转)
    sql语法:inner join on, left join on, right join on具体用法
    Android Studio之同一应用创建多个Activity(一)
    java环境变量配置
    老鸟的Python新手教程
    域名注冊以及域名解析设置
    Android在WebView上构建Web应用程序
    利用JasperReport+iReport进行Web报表开发
    android App Widgets
    多数据库下activiti的流程定义缓存问题
  • 原文地址:https://www.cnblogs.com/kzyuan/p/12642488.html
Copyright © 2020-2023  润新知