如何使用MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作
MyBatis-Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作
1.mp是什么
- MyBatis-Plus(簡(jiǎn)稱MP)是一個(gè)MyBatis 的增強(qiáng)工具,在MyBatis,的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生。
- 潤(rùn)物無(wú)聲,
- 只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑。
- 效率至上,
- 只需簡(jiǎn)單配置,即可快速進(jìn)行CRUD操作,從而節(jié)省大量時(shí)間。
- 豐富功能
- 熱加載、代碼生成、分頁(yè)、性能分析等功能一應(yīng)俱全。
mp實(shí)現(xiàn)添加修改刪除查詢
mp自動(dòng)填充樂(lè)觀鎖
mp邏輯刪除
mp分頁(yè)查詢
2、mp入門
CREATE TABLE `user` ( `id` bigint NOT NULL COMMENT '主鍵ID', `name` varchar(30) DEFAULT NULL COMMENT '姓名', `age` int DEFAULT NULL COMMENT '年齡', `email` varchar(50) DEFAULT NULL COMMENT '郵箱', PRIMARY KEY (`id`) ) INSERT INTO `user`(`id`,`name`,`age`,`email`) VALUES (1,'Jone',18,'test1@baomidou.com'), (2,'Jack',20,'test2@baomidou.com'), (3,'Tom',28,'test3@baomidou.com'), (4,'Sandy',21,'test4@baomidou.com'), (5,'Billie',24,'test5@baomidou.com');
sprinboot版本 2. 2.1
引入相關(guān)依賴
<!--mp--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
下載好lombok插件
配置數(shù)據(jù)庫(kù)信息
創(chuàng)建實(shí)體類User
創(chuàng)建對(duì)應(yīng)的Mapper
繼承BaseMapper,里面封裝了常用的增刪查改方法
在啟動(dòng)類上增加掃描該mapper的路徑。因?yàn)槭窃摻涌趧?dòng)態(tài)生成的,默認(rèn)掃描不到、
@Autowired 對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。
通過(guò) @Autowired的使用來(lái)消除 set ,get方法
@Repository、@Service、@Controller 和 @Component 將類標(biāo)識(shí)為Bean
@Repository(“名稱”):dao層
@Service(“名稱”):service層
@Controller(“名稱”):web層
#mybatis日志 開(kāi)啟 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
MP主鍵策略
ASSIGN_ID默認(rèn)生成19位 (根據(jù)符號(hào)位,時(shí)間戳、、、等等生成,百度)auto:自動(dòng)增長(zhǎng)
默認(rèn)開(kāi)啟ASSIGN_ID
#全局設(shè)置主鍵生成策略
mybatis-plus.global-config.db-config.id-type=auto
2.1、curd
查找
void findAll() { List<User> users = userMapper.selectList(null); users.forEach(System.out::println); }
增加
void addUser(){ User user = new User(12L, "黎明", 23, "592923@qq.com"); int insert = userMapper.insert(user); //影響行數(shù) System.out.println(insert); }
修改
public void upData(){ User user = new User(); user.setId(12L); user.setName("hhha"); int i = userMapper.updateById(user); System.out.println("影響行數(shù)"+i); }
2.2、自動(dòng)填充
字段賦值的時(shí)候需要set
增加兩個(gè)字段,對(duì)應(yīng)的實(shí)體類也增加
@TableField(fill = FieldFill.INSERT) private Data createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Data updateTime;
新建一個(gè)類不要忘記添加注解將它交給Spring管理
@Component public class MyMetaObjectHandler implements MetaObjectHandler { //實(shí)現(xiàn)兩個(gè)方法,自動(dòng)填充增加、修改 }
3、樂(lè)觀鎖
3.1、場(chǎng)景
主要適用場(chǎng)景:當(dāng)要更新一條記錄的時(shí)候,希望這條記錄沒(méi)有被別人更新,也就是說(shuō)實(shí)現(xiàn)線程安全的數(shù)據(jù)更新
解決丟失更新
的問(wèn)題。(可重復(fù)讀,解決了不可重復(fù)讀,隔離性第三級(jí)別,Mysql默認(rèn))
樂(lè)觀鎖實(shí)現(xiàn)方式:
取出記錄時(shí),獲取當(dāng)前versione更新時(shí),帶上這個(gè)versionv
執(zhí)行更新時(shí),set version = newexsion where version = oldVersion
如果version不對(duì),就更新失敗
提交后修改版本號(hào),另一個(gè)提交時(shí),會(huì)先檢查版本號(hào)和獲取時(shí)是否一樣,不一樣提交失敗,一樣提交成功。
MP實(shí)現(xiàn)樂(lè)觀鎖。
1.顯然,需要在表中加上字段version,實(shí)體類也是
添加注解@Version即可
3.配置樂(lè)觀鎖插件,Spring Boot創(chuàng)建一個(gè)配置類
添加配置注解,添加掃描,創(chuàng)建一個(gè)樂(lè)觀鎖插件
@Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }
4、MP查詢
4.1、多個(gè)ID批量查詢
selectBatchIds():Batch 批量
@Test public void select1() { List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3)); for (User user : users) { System.out.println(user); } }
4.2、簡(jiǎn)單條件查詢(Map)
public void select2(){ Map<String, Object> columnMap = new HashMap<>(); columnMap.put("name", "Jack"); columnMap.put("age", "20"); List<User> users = userMapper.selectByMap(columnMap); System.out.println(users); }
value的屬性 不對(duì)應(yīng)數(shù)據(jù)庫(kù)中的也能查詢到
4.3、分頁(yè)查詢
邏輯
public void selectPage() { Page<User> page = new Page<>(1,3); Page<User> userPage = userMapper.selectPage(page,null); long pages = userPage.getPages();//總頁(yè)數(shù) long current = userPage.getCurrent();//當(dāng)前頁(yè) List<User> records = userPage.getRecords();//數(shù)據(jù)集合 long total = userPage.getTotal(); boolean hasNext = userPage.hasNext();//是否還有下一頁(yè) boolean previous = userPage.hasPrevious();//上一頁(yè) System.out.println(pages); System.out.println(current); System.out.println(records); System.out.println(total); }
5、MP刪除
- 簡(jiǎn)單刪除,根據(jù)id刪除。簡(jiǎn)單
- 批量刪除
- 和批量查詢一樣
- 簡(jiǎn)單條件刪除,和上面一樣,使用map
5.1、物理刪除和邏輯刪除
物理刪除∶真實(shí)刪除,將對(duì)應(yīng)數(shù)據(jù)從數(shù)據(jù)庫(kù)中刪除,之后查詢不到此條被刪除數(shù)據(jù)(易懂)
**邏輯刪除︰**假刪除,將對(duì)應(yīng)數(shù)據(jù)中代表是否被刪除字段狀態(tài)修改為"被刪除狀態(tài)”,之后在數(shù)據(jù)庫(kù)中仍舊能看到此條數(shù)據(jù)記錄;
邏輯刪除
邏輯刪除實(shí)現(xiàn)的邏輯:
在表添加字段,作為邏輯刪除標(biāo)志,每次刪除時(shí)候,修改標(biāo)志位
0沒(méi)有刪除
1刪除
1.表添加字段,實(shí)體類添加屬性,這是標(biāo)志
2.增加注解@TableLogic :表邏輯
執(zhí)行刪除會(huì)將該字段的值設(shè)為1.
當(dāng)該字段的值為1時(shí),MP查不到該數(shù)據(jù),但是該數(shù)據(jù)仍在數(shù)據(jù)庫(kù)中存在
6、條件構(gòu)造器和常用接口
Wapper的使用
public void testWrapper1() { /** * ge :大于等于 * gt: 大于 * le : <= * lt : < */ QueryWrapper<User> wrapper = new QueryWrapper<>(); QueryWrapper<User> queryWrapper = wrapper.ge("age", 18); List<User> users = userMapper.selectList(queryWrapper); users.forEach(System.out::println); } SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND (age >= ?)
ge:大于等于
gt: 大于
le : <=
lt : <
eq :=
ne :!=
between: 閉區(qū)間
notBetween: 閉區(qū)間
用的多:模糊查詢
like 包含 %張%
notLike 不包含
likeLeft 張%
likeRight 張%
排序
orderBy、orderByDesc、orderByAsc. (參數(shù))
到此這篇關(guān)于MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)curd操作的文章就介紹到這了,更多相關(guān)MyBatis Plus curd操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java.lang.UnsupportedClassVersionError異常正確解決方法
java.lang.UnsupportedClassVersionError異常通常發(fā)生在嘗試在較低版本的Java虛擬機(jī)上運(yùn)行使用更高版本的Jav 編譯器編譯的類文件時(shí),下面就來(lái)介紹一下解決方法,感興趣的可以了解一下2024-05-05Spring Boot thymeleaf模板引擎的使用詳解
這篇文章主要介紹了Spring Boot thymeleaf模板引擎的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Spring Cloud Ribbon客戶端詳細(xì)介紹
Spring Cloud Ribbon 是一套基于 Netflix Ribbon 實(shí)現(xiàn)的客戶端負(fù)載均衡和服務(wù)調(diào)用工具。通過(guò)Spring Cloud的封裝,可以讓我們輕松地將面向服務(wù)的REST模版請(qǐng)求自動(dòng)轉(zhuǎn)換成客戶端負(fù)載均衡的服務(wù)調(diào)用2022-09-09SpringBoot自動(dòng)配置實(shí)現(xiàn)的詳細(xì)步驟
這篇文章主要為大家介紹了SpringBoot自動(dòng)配置實(shí)現(xiàn)詳細(xì)的過(guò)程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

通過(guò)java備份恢復(fù)mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼

Java開(kāi)發(fā)學(xué)習(xí)之Bean的生命周期詳解