久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring Boot環(huán)境下Mybatis Plus的快速應(yīng)用操作

瀏覽:33日期:2023-07-30 14:05:00

一、簡(jiǎn)介

Mybatis-Plus(簡(jiǎn)稱MP)是一個(gè) Mybatis 的一個(gè)增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生。其愿景是成為Mybatis最好的搭檔,將開發(fā)效率翻倍,由于受到學(xué)習(xí)研究深入限制,本例只進(jìn)行Mybatis Plus在Spring Boot環(huán)境下的基本應(yīng)用(如Select、Insert、Update、Delete等基本操作,其中還包括動(dòng)態(tài)生成組合查詢與更新的動(dòng)態(tài)SQL語(yǔ)句)。

特性:

無侵入:Mybatis-Plus 在 Mybatis 的基礎(chǔ)上進(jìn)行擴(kuò)展,只做增強(qiáng)不做改變,引入 Mybatis-Plus 不會(huì)對(duì)您現(xiàn)有的 Mybatis 構(gòu)架產(chǎn)生任何影響,而且 MP 支持所有 Mybatis 原生的特性。

依賴少:僅僅依賴 Mybatis 以及 Mybatis-Spring

損耗小:?jiǎn)?dòng)即會(huì)自動(dòng)注入基本CURD,性能基本無損耗,直接面向?qū)ο蟛僮鳌?/p>

預(yù)防Sql注入:內(nèi)置Sql注入剝離器,有效預(yù)防Sql注入攻擊。

通用CRUD操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需求。

多種主鍵策略:支持多達(dá)4種主鍵策略(內(nèi)含分布式唯一ID生成器),可自由配置,完美解決主鍵問題。

支持ActiveRecord:支持 ActiveRecord 形式調(diào)用,實(shí)體類只需繼承 Model 類即可實(shí)現(xiàn)基本 CRUD 操作。

支持代碼生成:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用(P.S. 比 Mybatis 官方的 Generator 更加強(qiáng)大!)。

支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )。

支持關(guān)鍵詞自動(dòng)轉(zhuǎn)義:支持?jǐn)?shù)據(jù)庫(kù)關(guān)鍵詞(order、key……)自動(dòng)轉(zhuǎn)義,還可自定義關(guān)鍵詞。

內(nèi)置分頁(yè)插件:基于Mybatis物理分頁(yè),開發(fā)者無需關(guān)心具體操作,配置好插件之后,寫分頁(yè)等同于普通List查詢。

內(nèi)置性能分析插件:可輸出Sql語(yǔ)句以及其執(zhí)行時(shí)間,建議開發(fā)測(cè)試時(shí)啟用該功能,能有效解決慢查詢。

內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,預(yù)防誤操作。

二、快速入門開發(fā)

1、依賴配置(Spring Boot方式)

pom.xml引入MyBatis依賴類

<!--mybatis plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatisplus-spring-boot-starter</artifactId> <version>1.0.5</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.1.9</version> </dependency>

application.yaml配置內(nèi)容如下:

#mybatis plus配置mybatis-plus: #由于本例中采用注解方式編寫sql,故而此處可不配置 #mapper-locations: classpath:/mapper/*Mapper.xml #實(shí)體掃描,多個(gè)package用逗號(hào)或者分號(hào)分隔 typeAliasesPackage: com.szss.admin.model #枚舉掃描配置(本示例未使用到) #typeEnumsPackage: com.szss.admin.model.domain global-config: #主鍵類型 0:'數(shù)據(jù)庫(kù)ID自增', 1:'用戶輸入ID',2:'全局唯一ID (數(shù)字類型唯一ID)', 3:'UUID'; id-type: 0 #字段策略 0:'忽略判斷',1:'非 NULL 判斷'),2:'非空判斷' field-strategy: 2 #駝峰下劃線轉(zhuǎn)換 db-column-underline: true #刷新mapper 調(diào)試神器(由于本例中采用注解方式編寫sql,故而不需要刷新mapper.xml文件) #refresh-mapper: true #數(shù)據(jù)庫(kù)大寫下劃線轉(zhuǎn)換 capital-mode: true #序列接口實(shí)現(xiàn)類配置,在新的mybatis-plus-boot-starter中不推薦此方式進(jìn)行配置,推薦自定義bean注入 key-generator: com.baomidou.mybatisplus.incrementer.H2KeyGenerator #邏輯刪除配置(下面3個(gè)配置) logic-delete-value: 1 logic-not-delete-value: 0 sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector # SQL 解析緩存,開啟后多租戶 @SqlParser 注解生效 sql-parser-cache: true configuration: map-underscore-to-camel-case: true cache-enabled: false

這樣我們就完成了MyBatis Plus基本快速開發(fā)配置,接下來我們看看具體如何快速進(jìn)行開發(fā)。

2、簡(jiǎn)單示例

假設(shè)我們已存在一張 Role 表,且已有對(duì)應(yīng)的實(shí)體類 Role,實(shí)現(xiàn) Role 表的 CRUD 操作我們需要做什么呢?

import com.baomidou.mybatisplus.mapper.BaseMapper;import com.szss.admin.model.domain.RoleDO;import java.util.List;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update; /** * @author Allen * @date 2018/3/7 * <p> * RoleDO實(shí)體數(shù)據(jù)操作對(duì)象 */@Mapperpublic interface RoleDAO extends BaseMapper<RoleDO> { //其他公共方法!}

以上就是所需的所有操作,不需要您創(chuàng)建任何XML文件,接下來我們?nèi)绾问褂盟镜腃RUD呢?

*角色的CRUD操作代碼信息

/** * 根據(jù)角色I(xiàn)D查詢角色 * * @param id 角色I(xiàn)D * @return 角色信息 */ RoleDO roleDO = roleDAO.selectById(id); /** * 根據(jù)查詢條件查詢角色列表(分頁(yè)) * * @roleParam 查詢條件 * @return 角色列表分頁(yè)信息 */ Page<RoleDO> page = new Page<RoleDO>(roleParam.getPi().intValue(), roleParam.getPs().intValue()); //這里會(huì)動(dòng)態(tài)根據(jù)前臺(tái)所傳入的值自動(dòng)組合需要查詢的字段信息,從而實(shí)現(xiàn)動(dòng)態(tài)查詢語(yǔ)句 EntityWrapper<RoleDO> eWrapper = new EntityWrapper<RoleDO>(roleDO); List<RoleDO> roleDOList = roleDAO.selectPage(page,eWrapper); /** * 角色新增 * * @param roleParam 角色信息 * @return 角色信息 */ roleDAO.insert(roleDO); /** * 角色更新(這里mybatis plus的CRUD 操作會(huì)自動(dòng)更新所需要更新的字段動(dòng)態(tài)生成更新語(yǔ)句) * * @param roleParam 角色信息 * @return 角色信息 */ roleDAO.updateById(roleDO); /** * 角色刪除(如果需要邏輯刪除而非物理刪除的話,需要結(jié)合@TableLogic標(biāo)簽使用,后續(xù)會(huì)說明) * * @param id 角色I(xiàn)d * @return 刪除角色 */ roleDAO.deleteById(id);

以上是基本的 CRUD 操作,當(dāng)然可用的 API 遠(yuǎn)不止這幾個(gè),目前最新版本可提供了多達(dá) 19 個(gè)方法給大家使用,可以極其方便的實(shí)現(xiàn)單一、批量、分頁(yè)等操作,上述中 selectPage即是MP 實(shí)現(xiàn)分頁(yè)的強(qiáng)大操作,而對(duì)于EntityWrapper還可以動(dòng)態(tài)組合各種復(fù)雜的查詢條件各種組合。如上述所見,僅僅需要繼承一個(gè) BaseMapper 即可實(shí)現(xiàn)大部分單表 CRUD 操作,極大的減少的開發(fā)負(fù)擔(dān)。有人也許會(huì)質(zhì)疑:這難道不是通用 Mapper 么?別急,咱們接著往下看。

現(xiàn)有一個(gè)需求,我們需要分頁(yè)查詢 User 表中,年齡在18~50之間性別為男且姓名為張三的所有用戶,這時(shí)候我們?cè)撊绾螌?shí)現(xiàn)上述需求呢?

傳統(tǒng)做法是 Mapper 中定義一個(gè)方法,然后在 Mapper XML 中填寫對(duì)應(yīng)的 SELECT 語(yǔ)句或者使用@SelectProvider注解來進(jìn)行SQL語(yǔ)句代碼的硬拼接,且還要集成分頁(yè),實(shí)現(xiàn)以上一個(gè)簡(jiǎn)單的需求,往往需要我們做很多重復(fù)單調(diào)的工作,普通的通用 Mapper或@SelectProvider能夠解決這類痛點(diǎn)么?答案是肯定的,不能!

用 MP 的方式打開以上需求

// 分頁(yè)查詢 10 條姓名為‘王五’、性別為男,且年齡在18至50之間的用戶記錄List<User> userList = userMapper.selectPage( new Page<User>(1, 10), new EntityWrapper<User>().eq('name', '王五') .eq('sex', 0) .between('age', '18', '50'));

以上操作,等價(jià)于

SELECT *FROM sys_userWHERE (name=’王五’ AND sex=0 AND age BETWEEN ’18’ AND ’50’)LIMIT 0,10

Mybatis-Plus 通過 EntityWrapper(簡(jiǎn)稱 EW,MP 封裝的一個(gè)查詢條件構(gòu)造器)或者 Condition(與EW類似) 來讓用戶自由的構(gòu)建查詢條件,簡(jiǎn)單便捷,沒有額外的負(fù)擔(dān),能夠有效提高開發(fā)效率。關(guān)于具體的EntityWrapper與Condition的用法請(qǐng)關(guān)注后續(xù)更多的文章說明,本例中不進(jìn)行詳細(xì)展開敘述。

ActiveRecord 一直廣受動(dòng)態(tài)語(yǔ)言( PHP 、 Ruby 等)的喜愛,而 Java 作為準(zhǔn)靜態(tài)語(yǔ)言,對(duì)于 ActiveRecord 往往只能感嘆其優(yōu)雅,所以我們也在 AR 道路上進(jìn)行了一定的探索,喜歡大家能夠喜歡,也同時(shí)歡迎大家反饋意見與建議。

我們?nèi)绾问褂?AR 模式?

三、開啟AR模式

直接貼代碼觀內(nèi)容:

package com.szss.admin.model.domain; import com.baomidou.mybatisplus.activerecord.Model;import com.baomidou.mybatisplus.annotations.TableField;import com.baomidou.mybatisplus.annotations.TableId;import com.baomidou.mybatisplus.annotations.TableLogic;import com.baomidou.mybatisplus.annotations.TableName;import com.baomidou.mybatisplus.enums.IdType;import com.baomidou.mybatisplus.mapper.SqlCondition;import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;import java.io.Serializable;import java.util.Date;import lombok.Data; /** * @author Allen * @date 2018/3/7 角色實(shí)體 */@Data@TableName('admin_role')public class RoleDO extends Model<RoleDO> { /** * 角色I(xiàn)D */ @TableId(type = IdType.AUTO) private Long id; /** * 角色名稱 */ @TableField(condition = SqlCondition.LIKE) private String name; /** * 角色描述 */ private String description; /** * 是否啟用:0-不可用,1-可用 */ private Boolean enabled; /** * 刪除標(biāo)示:0-未刪除,1-已刪除 */ @TableLogic private Boolean deleted; /** * 創(chuàng)建人ID */ protected Long creatorId; /** * 創(chuàng)建人 */ protected String creator; /** * 創(chuàng)建時(shí)間 */ @SuppressFBWarnings('EI_EXPOSE_REP') protected Date dateCreated; /** * 修改人ID */ protected Long modifierId; /** * 修改人 */ protected String modifier; /** * 更新時(shí)間 */ @SuppressFBWarnings('EI_EXPOSE_REP') protected Date lastModified; /** 指定主鍵 */ @Override protected Serializable pkVal() { return this.id; }}

如上所述僅僅需要繼承 Model 類且實(shí)現(xiàn)主鍵pkVal指定方法 即可讓實(shí)體開啟 AR 之旅,開啟 AR 之路后,又將如何使用它呢?其實(shí)比較簡(jiǎn)單,在上述<角色的CRUD操作代碼信息>中角色新增、更新與查詢角色列表我們通過roleDAO.selectPage方法進(jìn)行分頁(yè)查詢,而現(xiàn)在只需要直接通過roleDO.selectPage直接進(jìn)行查詢,具體代碼如下所示:

/** * 查詢角色列表(分頁(yè)) * * @param roleParam 角色參數(shù) * @return 查詢角色分頁(yè)列表 */ public Page<RoleDO> selectListPage(ListRoleParam roleParam) { RoleDO roleDO = new RoleDO(); BeanUtils.copyProperties(roleParam, roleDO); Page<RoleDO> page = new Page<RoleDO>((int)roleParam.getPi(), (int)roleParam.getPs()); EntityWrapper<RoleDO> eWrapper = new EntityWrapper<RoleDO>(roleDO);// Page<RoleDO> roleDOList = roleDAO.selectPage(page, eWrapper);//非AR方式的調(diào)用. Page<RoleDO> roleDOList = roleDO.selectPage(page, eWrapper);//這里使用的就是Model提供的AR return roleDOList; }

AR 模式提供了一種更加便捷的方式實(shí)現(xiàn) CRUD 操作,其本質(zhì)還是調(diào)用的 Mybatis 對(duì)應(yīng)的方法。

通過以上兩個(gè)簡(jiǎn)單示例,我們簡(jiǎn)單領(lǐng)略了 Mybatis-Plus 的魅力與高效率,可以快速開發(fā)代碼開發(fā),真正的做到了即開即用。

對(duì)于上述RoleDO中的部分注解現(xiàn)就進(jìn)行說明如下:

@TableName('admin_role') // 注解指定表名

//主鍵類型 AUTO:'數(shù)據(jù)庫(kù)ID自增', INPUT:'用戶輸入ID',UUID:'全局唯一ID UUID';

@TableId(type = IdType.AUTO)

@TableField(condition = SqlCondition.LIKE)//在查詢時(shí)匹配like動(dòng)態(tài)語(yǔ)句

MP支持以下4中主鍵類型策略,可根據(jù)需求自行選用:

值 描述 IdType.AUTO 數(shù)據(jù)庫(kù)ID自增 IdType.INPUT 用戶輸入ID IdType.ID_WORKER 全局唯一ID,內(nèi)容為空自動(dòng)填充(默認(rèn)配置) IdType.UUID 全局唯一ID,內(nèi)容為空自動(dòng)填充

上述三個(gè)注解是最為基本注解,也較為常用,對(duì)于各注解里面的參數(shù)詳細(xì)部分不屬于本示例范疇故而不一一詳細(xì)說明。

四、總結(jié)

通過上述三個(gè)注解可以動(dòng)態(tài)生成Insert語(yǔ)句,在插入新增角色時(shí),自動(dòng)生成Insert into admin_role (name,description,enabled deleted,...) values(...)對(duì)應(yīng)的字段,而自動(dòng)忽略id字段,因id主鍵通過@TableId注解為數(shù)據(jù)庫(kù)自增類型。

而對(duì)于name這樣的字段在日常查詢中往往是通過like方式來進(jìn)行匹配的而非精確匹配,所以此處通過@TableField(condition = SqlCondition.LIKE)來實(shí)現(xiàn)動(dòng)態(tài)組合查詢條件,其應(yīng)用示例如上<根據(jù)查詢條件查詢角色列表(分頁(yè))>selectPage的應(yīng)用,會(huì)根據(jù)前臺(tái)傳入的參數(shù)自動(dòng)組合查詢語(yǔ)句并進(jìn)行分頁(yè)。

其他update操作本示例中通過指定ID字段進(jìn)行動(dòng)態(tài)語(yǔ)句更新操作,當(dāng)傳入的值不為空時(shí)自動(dòng)組合所需要更新的字段,而where條件即為指定的主鍵,自動(dòng)生成update admin_role set name = ’王五’ where id=1,當(dāng)然如果想實(shí)現(xiàn)某些字段更新成空的情況下,也可通過field-strategy屬性配置的方式來進(jìn)行實(shí)現(xiàn)。通過new EntityWrapper<RoleDO>(roleDO)這種模式從而解決當(dāng)一張表有眾多字段拼接冗長(zhǎng)的SQL或增加字段時(shí)而修改大量代碼及SQL時(shí)極易造成某些地方未完全修改導(dǎo)致地隱性BUG的風(fēng)險(xiǎn)。

在本例中delete操作并不是真正意義上的物理刪除,而是邏輯刪除,如果不配置@TableLogic注解的話,則為物理刪除,會(huì)自動(dòng)生成delete admin_role where id=1的語(yǔ)句。如yml文件中配置了邏輯刪除結(jié)合使用@TableLogic注解的話為邏輯刪除,自動(dòng)生成UPDATE admin_role SET deleted=1 WHERE id=1的語(yǔ)句(本例中不刪除為0(False),刪除為1(Ture),故而logic-delete-value: 1與logic-not-delete-value: 0如是配置)。

注:當(dāng)配置了@TableLogic注解時(shí)在mp自帶查詢和更新方法的sql后面,追加『邏輯刪除字段』=『LogicNotDeleteValue默認(rèn)值』 刪除方法: deleteById()和其他delete方法, 底層SQL調(diào)用的是update tbl_xxx set 『邏輯刪除字段』=『logicDeleteValue默認(rèn)值』

至此我們完成了數(shù)據(jù)庫(kù)的DML與DQL的基本操作,在不改變現(xiàn)有的框架下,快速啟用Mybatis plus的插件,簡(jiǎn)化操作提高開發(fā)效率,極大了解決了編寫SQL語(yǔ)句的繁重工作,同時(shí)集成分頁(yè)實(shí)現(xiàn),減少代碼量,從而為快速開發(fā)做好基礎(chǔ)!

以上這篇Spring Boot環(huán)境下Mybatis Plus的快速應(yīng)用操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 丁香五月网久久综合 | 成人av免费在线 | 日本高清视频网站www | 中文字幕一区二区三区四区 | av在线一区二区三区 | 涩涩视频观看 | 亚洲久久| 激情网在线观看 | 国产最新网站 | 99热这里有 | 在线欧美亚洲 | 欧美日韩精品一区二区在线播放 | 国产成人综合在线观看 | 成人av一区二区三区 | xx视频在线观看 | 日韩欧美在线一区 | 亚洲免费资源 | 国产中文字幕一区 | 国产乱码精品一区二区三区忘忧草 | 精品免费国产一区二区三区四区 | 中文字幕一区二区三区四区 | 日韩欧美国产一区二区 | 午夜免费电影 | 欧美日韩一区二区三区不卡视频 | 欧美一区二区三区在线视频观看 | 欧美99| 视频一二区 | 日本黄色一级电影 | 性处破╳╳╳高清欧美 | 国产成人精品久久二区二区 | 久久免费视频3 | 色综合色综合网色综合 | 亚洲一区免费观看 | 欧美日韩综合一区 | 一级篇 | 国产精品视频成人 | 日韩欧美理论片 | 免费视频一区 | 毛片免费观看视频 | www.一区 | 一区二区中文 |