免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      SpringBoot整合Mybatisplus

      SpringBoot整合Mybatisplus

      Mybatis-Plus 實戰(zhàn)教程

      1.什么是Mybatis-Plus

      1.1 什么是mybatis-plus

      官網(wǎng):www.mybatis-plus.com/guide/

      MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。

      1.2 官方愿景

      1.3 特性

      • 無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑
      • 損耗?。簡蛹磿詣幼⑷牖?CURD,性能基本無損耗,直接面向對象操作
      • 強大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實現(xiàn)單表大部分 CRUD 操作,更有強大的條件構(gòu)造器,滿足各類使用需求
      • 支持 Lambda 形式調(diào)用:通過 Lambda 表達式,方便地編寫各類查詢條件,無需再擔心字段寫錯
      • 支持主鍵自動生成:支持多達 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 – Sequence),可自由配置,完美解決主鍵問題
      • 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
      • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
      • 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
      • 內(nèi)置分頁插件:基于 MyBatis 物理分頁,開發(fā)者無需關(guān)心具體操作,配置好插件之后,寫分頁等同于普通 List 查詢
      • 分頁插件支持多種數(shù)據(jù)庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫
      • 內(nèi)置性能分析插件:可輸出 Sql 語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪出慢查詢
      • 內(nèi)置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作

      1.4 支持數(shù)據(jù)庫

      • mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver

      1.5 框架結(jié)構(gòu)

      從圖中我們可以看出,使用mybatis-plus可以自動起別名,完成java對象與數(shù)據(jù)庫中記錄的映射,以及自動創(chuàng)建CRUD,無需再去創(chuàng)建mapper配置文件了。


      2. 快速入門

      2.1 創(chuàng)建springboot項目

      1.引入依賴

      com.baomidou mybatis-plus-boot-starter 3.2.0復(fù)制代碼

      • 注意:不需要在引入mybatis的相關(guān)依賴,只引入這一個即可,當然數(shù)據(jù)庫相關(guān)的驅(qū)動還的顯式引入

      因為要連接數(shù)據(jù)庫,所以我們需要引入mysql、druid等依賴,下面是項目中所有的依賴

      org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus-boot-starter 3.2.0 com.alibaba druid 1.1.19復(fù)制代碼

      為了防止創(chuàng)建maven過慢,我們可以使用阿里巴巴的鏡像

      aliyun-repos http://maven.aliyun.com/nexus/content/groups/public/ false aliyun-plugin http://maven.aliyun.com/nexus/content/groups/public/ false 復(fù)制代碼

      2.在入口類加入注解

      @SpringBootApplication@MapperScan(“com.baizhi.dao”) // 掃描dao接口所在的包public class SpringbootMybatisplusApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMybatisplusApplication.class, args); }}復(fù)制代碼

      3.編寫配置文件

      spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?characterEncoding=UTF-8spring.datasource.username=rootspring.datasource.password=rootlogging.level.root=infologging.level.com.baizhi.dao=debug復(fù)制代碼

      2.2 創(chuàng)建數(shù)據(jù)庫以及表結(jié)構(gòu)

      DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `bir` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;SET FOREIGN_KEY_CHECKS = 1;復(fù)制代碼

      2.3 開發(fā)實體類

      實體類是什么,mybatisplus就會去數(shù)據(jù)庫中找相同名字的表

      @Data //lombok的注解用來生成get set 等相關(guān)方法@AllArgsConstructor //有參構(gòu)造@NoArgsConstructor //無參構(gòu)造@ToString //toString方法@Accessors(chain = true) // 不寫默認為false,當該值為 true 時,對應(yīng)字段的 setter 方法調(diào)用后,會返回當前對象。public class User { private String id; private String name; private Integer age; private Date bir;}復(fù)制代碼

      2.4 開發(fā)mapper通用實現(xiàn)

      import com.baomidou.mybatisplus.core.mapper.BaseMapper; //提供了各種CRUD方法// 使用mybatisplus的接口增強功能public interface UserDAO extends BaseMapper { // 方法不夠的話在DAO接口中寫方法,然后寫相應(yīng)的mapper配置文件對其做實現(xiàn) // 如果官網(wǎng)提供的方法不夠用的話,可以在這里自己寫方法并寫相應(yīng)的mapper配置文件即可}復(fù)制代碼

      2.5 測試

      @Autowiredprivate UserDAO userDAO;@Testvoid contextLoads() { List users = userDAO.selectList(null); System.out.println(users);}


      3.常用注解說明

      • @TableName
      • @TableId
      • @TableField

      3.1 @TableName注解

      • 描述:用來將實體對象與數(shù)據(jù)庫表名完成映射
      • 修飾范圍: 用在類上
      • 常見屬性: value: String類型,指定映射的表名 resultMap: String類型,用來指定XML配置中resultMap的id值

      3.2 @TableId注解

      • 描述:主鍵注解
      • 當前對象的哪個屬性對應(yīng)數(shù)據(jù)庫的主鍵
      • 修飾范圍:用在屬性上
      • 常見屬性:
        • value: String類型,指定實體類中與表中對應(yīng)的主鍵列名
        • type: 枚舉類型,指定主鍵生成類型 type屬性寫枚舉類 IdType.AUTO

      3.3 @TableField

      • 描述:字段注解(非主鍵)
      • 修飾范圍:用在屬性上
      • 常用屬性: value: String類型,用來指定對應(yīng)的數(shù)據(jù)庫表中的字段名 el: String類型,映射為原生 #{ … } 邏輯,相當于寫在 xml 里的 #{ … } 部分 3.0不存在 exist 如果對象中某一個屬性不是數(shù)據(jù)庫表中的字段,我們可以加上這個屬性,以免將它作為數(shù)據(jù)庫的列而產(chǎn)生錯誤 boolean是否為數(shù)據(jù)庫表字段 true代表是數(shù)據(jù)庫字段,false代表不是

      @Data //lombok的注解用來生成get set 等相關(guān)方法@AllArgsConstructor //有參構(gòu)造@NoArgsConstructor //無參構(gòu)造@ToString //toString方法@Accessors(chain = true) // 不寫默認為false,當該值為 true 時,對應(yīng)字段的 setter 方法調(diào)用后,會返回當前對象。@TableName(“tuser”) // 指定數(shù)據(jù)庫中與該對象對應(yīng)的表的名稱public class User { @TableId(value = “id”, type = IdType.AUTO) // 指定該屬性與表中的主鍵字段對應(yīng),value不寫表中字段為屬性名 private String id; @TableField // 指定該屬性與表中哪個字段對應(yīng),value屬性寫字段名,不寫表示字段名與屬性名一致 private String name; @TableField // 指定該屬性與表中哪個字段對應(yīng),value屬性寫字段名,不寫表示字段名與屬性名一致 private Integer age; @TableField // 指定該屬性與表中哪個字段對應(yīng) private Date bir; @TableField(exist = false) // 指定該屬性不與表中字段對應(yīng) private String aaa;}復(fù)制代碼

      4.常用方法

      4.1 查詢方法

      selectList方法中的參數(shù)是用來幫我們做條件查詢的,如果為參數(shù)為null代表查詢所有數(shù)據(jù)

      • 查詢所有
      • @Test public void testFindAll(){ List users = userDAO.selectList(null); users.forEach(user-> System.out.println(“user = ” + user)); } 復(fù)制代碼
      • 根據(jù)主鍵查詢一個
      • @Test public void testFindOne(){ User user = userDAO.selectById(“1”); System.out.println(“user = ” + user); } 復(fù)制代碼
      • 條件查詢
      • //條件查詢 //泛型里面寫實體對象 @Test public void testFind(){ QueryWrapper queryWrapper = new QueryWrapper(); // 第一個字段應(yīng)該寫數(shù)據(jù)庫中表的字段名 queryWrapper.eq(“age”,23);//設(shè)置等值查詢,查詢age等于23的 //queryWrapper.lt(“age”,23);//設(shè)置小于查詢 //queryWrapper.ge(“age”,23);//小于等于查詢 gt 大于 ge 大于等于 List users = userDAO.selectList(queryWrapper); users.forEach(user-> System.out.println(user)); } 復(fù)制代碼
      • 模糊查詢
      • @Test public void testFindAll(){ QueryWrapper queryWrapper = new QueryWrapper(); // like %?% 內(nèi)容中包含對應(yīng)的值就可以了 // likeLeft %? 以···結(jié)尾的查詢 // likeRight ?% 以···開頭的查詢 // queryWrapper.like(“username”,”小”); queryWrapper.likeRight(“username”,”小”); List users = userDAO.selectList(queryWrapper); users.forEach(user-> System.out.println(“user = ” + user)); } 復(fù)制代碼
        • like 相當于 %?%
        • likeLeft 相當于 %?
        • likeRight 相當于 ?%

      4.2 添加方法

      • 添加方法
      • @Test public void testSave(){ User entity = new User(); entity.setAge(23).setName(“小明明”).setBir(new Date()); userDAO.insert(entity); } 復(fù)制代碼

      4.3 修改方法

      • 基于id修改
      • @Test public void testUpdateById(){ User user = userDAO.selectById(“1”); user.setAge(24); userDAO.updateById(user); } 復(fù)制代碼
      • 基于條件修改
      • @Test public void testUpdate(){ User user = new User(); user.setName(“小陳陳”); QueryWrapper updateWrapper = new QueryWrapper(); updateWrapper.eq(true,”age”,23); // 修改age為23的記錄 userDAO.update(user, updateWrapper); // 修改age為23的記錄的name修改為百知教育 } 復(fù)制代碼

      4.4 刪除方法

      • 基于id刪除
      • @Test public void testDeleteById(){ userDAO.deleteById(“3”); } 復(fù)制代碼
      • 基于條件刪除
      • @Test public void testDelete(){ QueryWrapper wrapper = new QueryWrapper(); wrapper.lambda().gt(“age”,23); // 刪除年齡大于 wrapper.lambda().eq(true,User::getAge,23); userDAO.delete(wrapper); } 復(fù)制代碼

      5.Mybatis-Plus分頁查詢

      分頁查詢的原理就是在查詢之后加上分頁的攔截,所以我們要實現(xiàn)在工廠中注冊攔截器類,所以我們實現(xiàn)需要創(chuàng)建一個 MybatisPlusConfig 類。

      0.預(yù)先配置

      • 注意:使用分頁查詢必須設(shè)置mybatis-plus提供的分頁插件(配置),才能實現(xiàn)分頁效果
      • @EnableTransactionManagement // 支持事務(wù)管理 @Configuration // 代表這是一個配置類 @MapperScan(“com.baizhi.dao”) // 掃描dao接口所在的包 public class MybatisPlusConfig { // 分頁的攔截器對象 @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; } } 復(fù)制代碼
      • 注意事項:目前分頁查詢僅僅支持單表查詢,不能在表連接時使用分頁插件

      1.分頁查詢

      • 非條件分頁查詢
      • // 分頁查詢 @Test public void testFindPage(){ // 參數(shù)1:當前頁從第幾頁開始 參數(shù)2:當前頁顯示幾條記錄 // 不傳參的話當前頁從第1頁開始,當前頁顯示10條記錄 IPage page = new Page(1, 2); IPage userIPage = userDAO.selectPage(page, null); // 獲取總記錄數(shù) System.out.println(“總記錄數(shù):” + userIPage.getTotal()); // 獲取指定條件的記錄 userIPage.getRecords().forEach(user -> System.out.println(“user = ” + user)); } 復(fù)制代碼
      • 帶條件分頁查詢
      • @Test public void testFindAll(){ QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq(“age”,23); IPage page = new Page(1,2); page = userDAO.selectPage(page, queryWrapper); page.getRecords().forEach(user-> System.out.println(“user = ” + user)); } 復(fù)制代碼

      6. Mybatis-Plus多數(shù)據(jù)源配置

      引言

      為了確保數(shù)據(jù)庫產(chǎn)品的穩(wěn)定性,很多數(shù)據(jù)庫擁有雙機熱備功能。也就是,第一臺數(shù)據(jù)庫服務(wù)器,是對外提供增刪改業(yè)務(wù)的生產(chǎn)服務(wù)器;第二臺數(shù)據(jù)庫服務(wù)器,主要進行讀的操作?!?/p>

      注意:這里我并沒有講解關(guān)于主從同步的配置,只是講了關(guān)于多數(shù)據(jù)源切換的配置,讀寫分離配置

      6.1 引入dynamic-datasource-spring-boot-starter依賴

      com.baomidou dynamic-datasource-spring-boot-starter 3.0.0復(fù)制代碼

      6.2 配置數(shù)據(jù)源

      使用多數(shù)據(jù)源的話就不需要原來application.properties中的dataSource配置了,使用下面的配置即可

      spring.datasource.primary=master #指定默認數(shù)據(jù)源spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driverspring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/mybatis-plus?characterEncoding=UTF-8spring.datasource.dynamic.datasource.master.username=rootspring.datasource.dynamic.datasource.master.password=rootspring.datasource.dynamic.datasource.slave_1.driver-class-name=com.mysql.jdbc.Driverspring.datasource.dynamic.datasource.slave_1.url=jdbc:mysql://localhost:3306/mybatisplus-1?characterEncoding=UTF-8spring.datasource.dynamic.datasource.slave_1.username=rootspring.datasource.dynamic.datasource.slave_1.password=root

      6.3 創(chuàng)建多個數(shù)據(jù)庫模擬不同mysql服務(wù)

      一個mybatisplus數(shù)據(jù)庫,一個是mybatisplus-1數(shù)據(jù)庫

      6.4 @DS注解

      • 作用: 用來切換數(shù)據(jù)源的注解
      • 修飾范圍: 方法上和類上,同時存在則方法注解優(yōu)先于類上注解。
      • Value屬性: 切換數(shù)據(jù)源名稱(不是數(shù)據(jù)庫名稱,是application.propertis配置文件中的,比如:master、slave_1等)
      • 不使用這個注解的話默認就是master

      6.5 開發(fā)業(yè)務(wù)層

      • 業(yè)務(wù)接口
      • public interface UserService{ List findAll(); void save(User user); } 復(fù)制代碼
      • 業(yè)務(wù)實現(xiàn)類
      • @Service @Transactional public class UserServiceImpl implements UserService { @Autowired private UserDAO userDAO; @Override @DS(“slave_1”) public List findAll() { return userDAO.selectList(null); } @Override public void save(User user) { userDAO.insert(user); } } 復(fù)制代碼

      6.6 測試結(jié)果

      package com.baizhi;import com.baizhi.entity.User;import com.baizhi.service.UserService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.Date;@SpringBootTestpublic class TestUserService { @Autowired private UserService userService; @Test public void testFindAll(){ userService.findAll().forEach(user-> System.out.println(“user = ” + user)); } @Test public void testSave(){ User user = new User(); user.setName(“aaa”).setAge(23).setBir(new Date()); userService.save(user); }}

      作者:嘿_魚骨頭鏈接:https://juejin.cn/post/7109612457923985444

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
      (0)
      用戶投稿
      上一篇 2022年6月17日 15:05
      下一篇 2022年6月17日 15:05

      相關(guān)推薦

      • 快手KEI國際邀請賽,CFM總決賽打響!情久能否保持手感呢?

        喜歡快手KEI國際邀請賽的小伙伴都知道,在8月23號晚上,CFM項目將會正式打響總決賽,觀眾們都十分期待著情久戰(zhàn)隊在總決賽的表現(xiàn),他們是否能保持之前的手感,打出一系列的高光時刻呢?…

        2022年8月24日
      • 支付寶大額存款需3年提???回應(yīng)來了

        近期,一則“有用戶在支付寶里存46萬元,想提取時卻發(fā)現(xiàn)要花3年時間”的消息在網(wǎng)上流傳,引發(fā)關(guān)注。很多人表示不解:難道支付寶對大額存款有提取限制?記者在向支付寶了解情況后發(fā)現(xiàn),情況并…

        2022年7月26日
      • 如何開拼多多網(wǎng)店(拼多多無貨源開店流程)

        無貨源一件代發(fā)這個概念,只要做網(wǎng)店的朋友應(yīng)該不陌生?,F(xiàn)在無貨源開店應(yīng)該也是不少賣家們想要選擇的模式,而且在不少電商平臺上面都有這種模式,一些拼多多賣家也想要嘗試無貨源開店,具體應(yīng)該…

        2022年4月11日
      • 金庸武俠人物與你并肩作戰(zhàn) 俠客冰雪 今天下午一點正式開服

        大家好,經(jīng)過上個星期的測試服,終于俠客冰雪在今天下午一點就要迎來正式開服了,在測試服的時候人氣就十分火爆了,我想應(yīng)該一些玩家不知道這款游戲的亮眼之處在哪里吧,小編這次就來跟大家聊聊…

        2022年6月29日
      • 信用卡申請不通過是什么原因 可能存在這些情況

        現(xiàn)在是科技時代,不用出門可以購物,甚至可以申請信用卡使用。一些人想辦理信用卡,但被告知申請不通過,那么信用卡申請不通過是什么原因?其實可能是存在這些情況。 1、資料不齊全。我們辦理…

        2022年10月12日
      • 小米米家聯(lián)動,內(nèi)置“機器人”,8H樂輕松智能電動慢搖沙發(fā)來了

        黃小琥有首歌唱得很好,“不想擁有太多情緒,一杯紅酒配電影,在周末晚上關(guān)上了手機,舒服窩在沙發(fā)里”。曾幾何時,生活的奔波讓我們不能窩在客廳沙發(fā)好好看個電視或者窩在陽臺沙發(fā)好好曬個太陽…

        2022年6月18日
      • 車貸下不來可以找人擔保嗎 這些情況要知曉

        雖然貸款買車可以減輕消費者的購買壓力,但是車貸辦理要具備條件才能通過,并不是保證一定申請成功的,所以有被拒情形是不奇怪的,那么車貸下不來可以找人擔保嗎,下面來看答案。 車貸下不來可…

        2022年8月25日
      • 被評為“娛樂圈頂級綠茶”,她把容祖兒逼得連連道歉,最后還哭了

        娛樂圈就好似大染缸,深深淺淺,真真假假,誰也摸不清楚 ,一個個的仿佛都帶有一層面具,鏡頭前的他們光鮮亮麗,完美的模樣似乎是大家想要成為的對象。 但事實上深知娛樂圈復(fù)雜的小伙伴應(yīng)該都…

        2022年6月17日
      • 男生如何祛痘

        最近我真的很受臉上痘痘的困擾,用了很多方法都不管用,自己都不太敢出門了,我還買了粉底液用來遮痘。痘痘真的是太令人討厭了,消下去又重新長出來,真的很無語。 一、痘痘產(chǎn)生的原因 痘痘產(chǎn)…

        2022年5月17日
      • 前端-React: Hook的秘密

        大家知道React Hook中存在依賴數(shù)組,它的存在是為了控制組件是否變化而需要重新渲染。那么它是怎么判斷這個依賴的值是否有變化的呢? 我發(fā)現(xiàn)沒有文檔介紹這個判斷count變化到底…

        2022年6月23日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時間:周一至周五,10:30-18:30,節(jié)假日休息