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);
 ​
 }

 

結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM