一、CRUD
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); }
結果