MyBatis-Plus框架整合詳細(xì)方法
MyBatis-Plus
MyBatis-Plus(簡(jiǎn)稱 MP)是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生。
其特性有:
- 無(wú)侵入:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑
- 損耗?。?jiǎn)?dòng)即會(huì)自動(dòng)注入基本 CURD,性能基本無(wú)損耗,直接面向?qū)ο蟛僮?/li>
- 強(qiáng)大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過(guò)少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需求
- 支持 Lambda 形式調(diào)用:通過(guò) Lambda 表達(dá)式,方便的編寫(xiě)各類查詢條件,無(wú)需再擔(dān)心字段寫(xiě)錯(cuò)
- 支持主鍵自動(dòng)生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問(wèn)題
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實(shí)體類只需繼承 Model 類即可進(jìn)行強(qiáng)大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來(lái)使用
- 內(nèi)置分頁(yè)插件:基于 MyBatis 物理分頁(yè),開(kāi)發(fā)者無(wú)需關(guān)心具體操作,配置好插件之后,寫(xiě)分頁(yè)等同于普通 List 查詢
- 分頁(yè)插件支持多種數(shù)據(jù)庫(kù):支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數(shù)據(jù)庫(kù)
- 內(nèi)置性能分析插件:可輸出 Sql 語(yǔ)句以及其執(zhí)行時(shí)間,建議開(kāi)發(fā)測(cè)試時(shí)啟用該功能,能快速揪出慢查詢
- 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作
支持的數(shù)據(jù)庫(kù)有:
- mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver
- 達(dá)夢(mèng)數(shù)據(jù)庫(kù) 、 虛谷數(shù)據(jù)庫(kù) 、 人大金倉(cāng)數(shù)據(jù)庫(kù)
引入依賴
<!--mybatis-plus-boot-starter 包含了mybatis的所有依賴--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version> </dependency> <!--推薦大家使用阿里巴巴的druid的連接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version> </dependency> <!--引入mysql數(shù)據(jù)庫(kù)相關(guān)依賴--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope>
yml配置
spring: application: name: manage-client datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/mysql?userSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 username: root password: ys@2017 main: allow-circular-references: true #mybatis-plus配置 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath:com/huangyabei/mapper/xml/*.xml
主啟動(dòng)類加上包掃碼
@SpringBootApplication(scanBasePackages = {"com.win.sky"}) @MapperScan(basePackages="com.win.sky.dao") @EnableDiscoveryClient public class SaasAdminApplication { public static void main(String[] args) { SpringApplication.run(SaasAdminApplication.class, args); } }
自動(dòng)生產(chǎn)代碼接口util
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import java.util.Arrays; import java.util.List; public class MyBatisPlusGenerate { public static void main(String[] args) { //創(chuàng)建generator對(duì)象:通過(guò)操作這個(gè)對(duì)象來(lái)生成代碼 AutoGenerator autoGenerator = new AutoGenerator(); //數(shù)據(jù)源:建立數(shù)據(jù)源與數(shù)據(jù)庫(kù)連接 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL);//選擇數(shù)據(jù)庫(kù)的類型 //數(shù)據(jù)源 dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); //賬號(hào) dataSourceConfig.setUsername("root"); //密碼 dataSourceConfig.setPassword("ys@2017"); //連接地址 dataSourceConfig.setUrl("jdbc:mysql://192.168.10.77:3306/yszh_gw?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"); autoGenerator.setDataSource(dataSourceConfig); //全局配置 GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir("D:/generatingCode/test/main/java");//放到子工程里,修改了路徑 //這里個(gè)人建議經(jīng)歷不要直接放在公司項(xiàng)目里面,避免覆蓋已經(jīng)寫(xiě)好的代碼, globalConfig.setAuthor("yszh-gw"); globalConfig.setOpen(false); globalConfig.setServiceName("%sService"); autoGenerator.setGlobalConfig(globalConfig); //包信息 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("com.win.sky.news"); packageConfig.setEntity("entity"); packageConfig.setMapper("mapper"); packageConfig.setService("service"); packageConfig.setServiceImpl("service.impl"); packageConfig.setController("controller"); autoGenerator.setPackageInfo(packageConfig); //策略配置 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setInclude("t_test","t_order");//有新的表往里面加就是了 strategyConfig.setNaming(NamingStrategy.underline_to_camel);//數(shù)據(jù)庫(kù)表映射到實(shí)體的命名策略駝峰命名 strategyConfig.setTablePrefix(packageConfig.getModuleName() + "t_");//生成實(shí)體時(shí)去掉表前綴 strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);//數(shù)據(jù)庫(kù)表字段映射到實(shí)體的命名策略 strategyConfig.setEntityLombokModel(true); TableFill tableFill = new TableFill("create_time", FieldFill.INSERT); TableFill tableFill1 = new TableFill("update_time", FieldFill.INSERT_UPDATE); List<TableFill> tableFills = Arrays.asList(tableFill,tableFill1); strategyConfig.setTableFillList(tableFills); autoGenerator.setStrategy(strategyConfig); //運(yùn)行 autoGenerator.execute(); } }
擴(kuò)展
mybatis-plus在使用過(guò)程中類似JPA框架
自定義接口繼承了mybatis-plus框架提供的這個(gè)IService接口之后,基本的CRUD方法都可以直接使用
Mybatis-plus提供了分頁(yè)查詢方法
Page<TenantVo> page = new Page<>(pageNum,pageSize);
MyBatis-plus提供的條件拼接對(duì)象
QueryWrapper<TenantVo> qw = new QueryWrapper<>();
自定義sql查詢
在實(shí)際開(kāi)發(fā)過(guò)程中,可能涉及到多表復(fù)雜查詢,簡(jiǎn)單的sql已經(jīng)不適合使用,這樣的情況下,我們可以通過(guò)自定義sql配合QueryWrapper條件拼接對(duì)象使用
SELECT md.id, md.name, md.menus_id, md.coding, md.data_id, md.remark, md.create_by, md.create_time, md.update_by, md.update_time, d.name dataName, d.rule FROM t_menus_data md LEFT JOIN t_data_permission d on d.id = md.data_id --下面的代碼就是用例接收服務(wù)層傳過(guò)來(lái)的拼接的條件參數(shù) <where> ${ew.sqlSegment} </where>
mapper層
IPage<MenusDataEntity> pageVo(@Param("page") IPage<MenusDataEntity> page, @Param(Constants.WRAPPER) QueryWrapper<MenusDataEntity> qw);
service層
IPage<MenusDataEntity> page = new Page<>(pageNum,pageSize); QueryWrapper<MenusDataEntity> qw = new QueryWrapper<>(); // 查詢添加環(huán)節(jié)篩選需求 qw.eq("md.menus_id",menusId); if (!StrUtil.isEmpty(name)){ qw.like("md.name",name); } IPage<MenusDataEntity> menusDataEntityIPage = menusDataMapper.pageVo(page,qw);
到此這篇關(guān)于MyBatis-Plus框架整合的文章就介紹到這了,更多相關(guān)MyBatis-Plus框架整合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot+Mybatis+Druid+PageHelper實(shí)現(xiàn)多數(shù)據(jù)源并分頁(yè)的方法
這篇文章主要給大家介紹了關(guān)于Spring Boot+Mybatis+Druid+PageHelper實(shí)現(xiàn)多數(shù)據(jù)源并分頁(yè)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們來(lái)一起看看吧2018-05-05基于springboot+vue實(shí)現(xiàn)垃圾分類管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于springboot+vue實(shí)現(xiàn)垃圾分類管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Java服務(wù)假死后續(xù)之內(nèi)存溢出的原因分析
這篇文章主要介紹了Java服務(wù)假死后續(xù)之內(nèi)存溢出,本文給大家分享原因排查和故障解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07java基礎(chǔ)(System.err和System.out)詳解
下面小編就為大家?guī)?lái)一篇java基礎(chǔ)(System.err和System.out)詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06深入詳解Java中synchronized鎖升級(jí)的套路
synchronized鎖是啥?鎖其實(shí)就是一個(gè)對(duì)象,隨便哪一個(gè)都可以,Java中所有的對(duì)象都是鎖,換句話說(shuō),Java中所有對(duì)象都可以成為鎖。本文我們主要來(lái)聊聊synchronized鎖升級(jí)的套路,感興趣的可以收藏一下2023-04-04SpringBoot java-jar命令行啟動(dòng)原理解析
這篇文章主要介紹了SpringBoot java-jar命令行啟動(dòng)原理解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07