Mybatis-plus
-
官網地址:https://baomidou.com/
-
配置mysql
- 在組態檔連接mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/cat_house?serverTimezone=GMT%2B8 spring.datasource.username=username spring.datasource.password=password # mybatis日志(控制臺能顯示SQL陳述句) mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- 在組態檔連接mysql
-
Mybatis-plus使用方式
-
依賴匯入
<!-- mybatis驅動 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!-- 資料庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> -
lombok依賴匯入
<!-- lombok用來簡化物體類 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
-
-
Mybatis-plus實作簡單的CURD操作
-
準備表格(資料庫有相應的表格)
-
準備物體(物體檔案夾中有相應的物體類)
package com.xsha.boot.entity; import lombok.Data; @Data public class Topic { private int id; private String title; private String time; private int count; private int version; } -
準備映射檔案(映射檔案夾中有相應的映射介面)
package com.xsha.boot.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xsha.boot.entity.Topic; import org.springframework.stereotype.Repository; @Repository public interface TopicMapper extends BaseMapper<Topic> { } -
測驗操作(在test類中進行簡單的單元測驗)
package com.xsha.boot; import com.xsha.boot.entity.Topic; import com.xsha.boot.mapper.TopicMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest public class MainApplicationTest { @Autowired // 可在指定的介面上添加注解Repository,就不會爆紅了 private TopicMapper topicMapper; // 查詢所有資料 @Test public void findAll() { List<Topic> topics = topicMapper.selectList(null); for (int i = 0; i < topics.size(); i++) { System.out.println(topics.get(i)); } } // 添加操作 @Test public void addTopic() { // SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // Date date = new Date(); Topic topic = new Topic(); topic.setTitle("SSM框架整合了哪些主流框架"); // 時間的添加可以采用mybatis-plus框架實作,可查看Controller中介面實作和物體類屬性的注解 // topic.setTime(ft.format(date)); int row = topicMapper.insert(topic); System.out.println("添加的行數:"+row); } // 修改操作 @Test public void updateTopic() { Topic topic = new Topic(); topic.setId(20); topic.setCount(10); int row = topicMapper.updateById(topic); System.out.println("修改的行數"+row); } }
-
-
Mybatis-plus自動填充策略
-
主鍵自動填充
// 可以在id屬性上添加TableId注解可以修改id唯一鍵值的策略(自動填充),如@TableId(type=IdType.AUTO) // @TableId(type=IdType.ID_WORKER) 生成19位唯一數字的鍵值 // @TableId(type=IdType.ID_WORKER_STR) 生成19位唯一字串的鍵值 private int id; -
時間自動填充
-
物體類屬性添加注解
// 采用mybatis-plus框架的策略自動填充時間 // @TableField(fill=FieldFill.INSERT) 表示自動填充創建時間 // @TableField(fill=FieldFill.INSERT_UPDATE) 表示自動填充更新時間 @TableField(fill = FieldFill.INSERT) private String time; -
Controller類繼承介面實作時間自動填充方法
package com.xsha.boot.controller; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Date; @Component public class MyMetaObjectController implements MetaObjectHandler { // 使用mybatis-plus實作添加操作,這個方法自動呼叫 @Override public void insertFill(MetaObject metaObject) { SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); // 第一個引數不是表格的欄位名稱,而是物體類的屬性名稱 this.setFieldValByName("time", ft.format(date), metaObject); } // 使用mybatis-plus實作更新操作,這個方法自動呼叫 @Override public void updateFill(MetaObject metaObject) { // 更新時間可根據需求實作 SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); // 第一個引數不是表格的欄位名稱,而是物體類的屬性名稱 this.setFieldValByName("time", ft.format(date), metaObject); } }
-
-
-
樂觀鎖的具體實作
- 表格添加欄位version,作為樂觀鎖版本號
- 對應物體類添加版本號屬性,并且在屬性上面添加注解Version(baomidou下的Version)
- 在配置類中添加樂觀鎖插件
@Configuration @MapperScan("com.xsha.boot.mapper") public class MyConfig { // 樂觀鎖插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } }
-
Mybatis-plus查詢操作(簡單)
// 單個id查詢 @Test public void selectTopic() { Topic topic = topicMapper.selectById(20); System.out.println(topic); } // 多個id批量查詢 @Test public void selectTopics() { List<Topic> topics = topicMapper.selectBatchIds(Arrays.asList(1, 2, 3, 4)); for (int i = 0; i < topics.size(); i++) { System.out.println(topics.get(i)); } } -
Mybatis-plus實作分頁操作
-
在配置類中配置分頁插件
// 分頁插件 @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } -
撰寫分頁代碼
// 分頁查詢 @Test public void selectByPage() { // 1.創建page物件,傳遞當前頁和每頁記錄數的兩個引數 Page<Topic> page = new Page<>(1, 3); // 2.呼叫mybatis-plus分頁查詢的方法,把分頁所有的資料封裝到page物件里面,第二個引數是條件 topicMapper.selectPage(page, null); // 3.通過page物件獲取分頁資料 System.out.println(page.getCurrent()); // 當前頁 System.out.println(page.getRecords()); // 每頁資料list集合 System.out.println(page.getSize()); // 每頁顯示記錄數 System.out.println(page.getTotal()); // 總記錄數 System.out.println(page.getPages()); // 總頁數 System.out.println(page.hasNext()); // 是否有下一頁 System.out.println(page.hasPrevious()); // 是否有上一頁 }
-
-
Mybatis-plus洗掉操作(簡單)
-
物理洗掉
// 單個id洗掉 @Test public void deleteTopic() { int row = topicMapper.deleteById(20); System.out.println(row); } // 多個id批量洗掉 @Test public void deleteTopics() { int rows = topicMapper.deleteBatchIds(Arrays.asList(1, 2, 3, 4)); System.out.println(rows); } -
邏輯洗掉
-
表格中添加標志位欄位,供邏輯洗掉使用
- 表格欄位設定默認值,就不能使用mybatis-plus的自動填充
- 使用mybatis-plus的自動填充
-
使用mybatis-plus的自動填充時,在物體類屬性上添加TableLogic注解
@TableLogic private int delete; -
在配置類中配置邏輯洗掉插件
// 邏輯洗掉插件 @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } -
在組態檔中添加邏輯洗掉與否的默認值(可有可無)
# 邏輯洗掉與否的默認值 mybatis-plus.global-config.db-config.logic-delete-value=https://www.cnblogs.com/aitiknowledge/p/1 mybatis-plus.global-config.db-config.logic-not-delete-value=0 -
代碼撰寫
// 邏輯洗掉 @Test public void logicDeleteTopic() { int row = topicMapper.deleteById(21); System.out.println(row); } -
注意:采用mybatis-plus的邏輯洗掉方式時,之后查詢資料時就不會包括邏輯洗掉的資料
-
-
-
性能分析
-
在配置類中添加性能分析插件
/** * SQL執行性能分析插件 * 開發環境使用,線上不推薦,maxTime指的是sql最大執行時長 * * 三種環境:dev開發環境、test測驗環境、prod生成環境 * @return */ @Bean @Profile({"dev", "test"}) // 設定dev,test的環境開啟 public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); performanceInterceptor.setMaxTime(100); // 數值單位為毫秒ms performanceInterceptor.setFormat(true); return performanceInterceptor; } -
在組態檔中配置環境
# 環境設定:dev test prod spring.profiles.active=dev
-
-
Mybatis-plus實作復雜條件查詢
- 使用QueryWrapper類物件構造條件(還有其他的)
// mybatis-plus實作復雜查詢 @Test public void querySelect() { // 1.創建QueryWrapper物件 QueryWrapper<Topic> queryWrapper = new QueryWrapper<>(); // 2.通過QueryWrapper設定條件 // ge(>=)、gt(>)、le(<=)、lt(<) queryWrapper.ge("count", 3); List<Topic> topics1 = topicMapper.selectList(queryWrapper); System.out.println("FIRST"); System.out.println(topics1); // eq(==)、ne(!=) queryWrapper.ne("deleted", 0); List<Topic> topics2 = topicMapper.selectList(queryWrapper); System.out.println("SECOND"); System.out.println(topics2); // between(在···和···之間) queryWrapper.between("time", "2021-10-12 07:05:29.546779", "2021-10-27 15:02:09.458571"); List<Topic> topics3 = topicMapper.selectList(queryWrapper); System.out.println("THIRD"); System.out.println(topics3); // like(模糊查詢) queryWrapper.like("title", "SSM"); List<Topic> topics4 = topicMapper.selectList(queryWrapper); System.out.println("FORTH"); System.out.println(topics4); // 排序 orderByDesc orderByAsc queryWrapper.orderByDesc("count"); List<Topic> topics5 = topicMapper.selectList(queryWrapper); System.out.println("FIFTH"); System.out.println(topics5); // 指定要查詢的列 last拼接sql陳述句 queryWrapper.select("id", "title", "count"); queryWrapper.last("limit 2"); List<Topic> topics6 = topicMapper.selectList(queryWrapper); System.out.println("SIXTH"); System.out.println(topics6); }
- 使用QueryWrapper類物件構造條件(還有其他的)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431414.html
標籤:Java
下一篇:使用linqC#更新串列
