MyBatisPlus的使用--十数个案例足以让你步入mybatisplus
文章目錄
- 1. MybatisPlus
- 1.1 業(yè)務(wù)需求
- 1.2ORM
- 1.3ORM實(shí)現(xiàn)單表操作原理
- 1.4 MybatisPlus介紹(MP)
- 1.5 MybatisPlus特性
- 1.6 MybatisPlus的實(shí)際入門操作
- 1.6.1導(dǎo)入jar包
- 6.2 編輯POJO文件
- 6.3 繼承共同的API接口
- 編輯YML配置
- 6.5 入門案例測試
- 1.7Mybatis案例
- 1.selectBatchIds
- 2. selectByMap
- 3. 條件構(gòu)造器查詢
- 4. Between-and
- 5. order by
- 6. like練習(xí)
- 7.inSql
- 8.select
- 9.condition
- 10. 根據(jù)對象查詢
- 11. selectObjs
- 12.selectMaps
- 13. 新增用戶
- 14.刪除用戶
- 15. 修改操作
- 完結(jié)!希望打開了頁面就耐心的看完吧,你一定會有收獲de
1. MybatisPlus
1.1 業(yè)務(wù)需求
Mybatis缺點(diǎn):
- 1.Mybatis操作數(shù)據(jù)庫的過程中,需要編輯大量的sql語句.無論該sql是否復(fù)雜或者簡單.
- Mybatis操作時在xml配置文件中需要額外記憶單獨(dú)的標(biāo)簽.
需求:能否實(shí)現(xiàn)單表操作的CRUD的全自動的實(shí)現(xiàn).能否實(shí)現(xiàn)真正的ORM映射?
1.2ORM
要求:利用面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫
特點(diǎn):
???1.操作數(shù)據(jù)庫的面向?qū)ο?
??????userMapper.insert(user對象); ------->自己編輯sql語句
???2.查詢數(shù)據(jù)庫的面向?qū)ο?
??????userMapper.selectByWhere(user對象); ------>動態(tài)的生成Sql------>自動實(shí)現(xiàn)結(jié)果集封裝.
1.3ORM實(shí)現(xiàn)單表操作原理
要求:實(shí)現(xiàn)單表的自動的CRUD操作
例子:
框架內(nèi)部實(shí)現(xiàn)過程:
?????核心:數(shù)據(jù)庫只能識別sql語句.框架需要將對象轉(zhuǎn)化為sql.
核心配置:
?????1.User對象與數(shù)據(jù)庫的表 一一映射!
?????解決方法: 自定義注解標(biāo)識表與對象的關(guān)系
?????2.User對象的屬性與數(shù)據(jù)表中的字段一一映射!
?????解決方法:自定義注解完成屬性與字段的映射
?????3.將CURD的方法進(jìn)行統(tǒng)一的定義.形成工具API接口
?????解決方法:利用公共的mapper接口 BaseMapper,在其中定義幾乎所有的單表的CURD操作.
?????4.將接口方法按照數(shù)據(jù)庫方式轉(zhuǎn)化為特定的sql語句.
????????1.用戶的調(diào)用 userMapper.insert(user)
????????2.拼接特定的sql:
insert into 表名(字段名…) values(屬性值…);
?????一般利用反射技術(shù),可以通過對象或者有關(guān)對象的全部信息(注解,屬性,屬性值)
1.4 MybatisPlus介紹(MP)
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。
1.5 MybatisPlus特性
-
無侵入:只做增強(qiáng)不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑
-
損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向?qū)ο蟛僮?/p>
-
強(qiáng)大的 CRUD 操作:內(nèi)置通用 Mapper、通用 Service,僅僅通過少量配置即可實(shí)現(xiàn)單表大部分 CRUD 操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需求
-
支持 Lambda 形式調(diào)用:通過 Lambda 表達(dá)式,方便的編寫各類查詢條件,無需再擔(dān)心字段寫錯
-
支持主鍵自動生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
-
支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實(shí)體類只需繼承 Model 類即可進(jìn)行強(qiáng)大的 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)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作
1.6 MybatisPlus的實(shí)際入門操作
1.6.1導(dǎo)入jar包
最主要的jar包
<!--spring整合mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency>本次所需的其余jar包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--添加屬性注入依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--引入插件lombok 自動的set/get/構(gòu)造方法插件 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--支持熱部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!--引入數(shù)據(jù)庫驅(qū)動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--springBoot數(shù)據(jù)庫連接 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>6.2 編輯POJO文件
注意如果沒有l(wèi)ombok插件可以在
https://blog.csdn.net/XING_Gou/article/details/104316560中安裝Lombok插件
6.3 繼承共同的API接口
public interface UserMapper extends BaseMapper<User>{...}編輯YML配置
server:port: 8090 #標(biāo)識端口號信息servlet:context-path: / spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: root#SpringBoot整合Mybatis-plus配置信息 mybatis-plus:#定義別名包 只要定義了別名包,則程序中resultType可以省略包路徑type-aliases-package: com.jt.demo.pojo#配置文件的資源加載路徑mapper-locations: classpath:/mybatis/mappers/*.xml#開啟駝峰映射configuration:map-underscore-to-camel-case: true6.5 入門案例測試
@RunWith(SpringRunner.class) //注意測試文件的位置 必須在主文件加載包路徑下 @SpringBootTest public class TestMP {//注入mapper接口@Autowiredprivate UserMapper userMapper;/*** 1.入門案例* 要求:查詢?nèi)康挠脩粜畔? 不需要寫where條件* 注意事項(xiàng):利用MP的方法和自己的接口方法 名稱不能重復(fù).* * 參數(shù)說明:queryWrapper 動態(tài)生成sql語句中的where條件*/@Testpublic void test01() {List<User> userList = userMapper.selectList(null);System.out.println(userList);} }1.7Mybatis案例
1.selectBatchIds
/*** 練習(xí)1: 查詢id信息為1,3,4,5,6用戶數(shù)據(jù)* sql: select * from user where id in (1,2,3,4,5,6);* 思考:id可以利用數(shù)組進(jìn)行接收 利用數(shù)組查詢數(shù)據(jù)*/@Testpublic void test02() {List<Integer> idList = new ArrayList<Integer>();idList.add(1);idList.add(3);idList.add(4);idList.add(5);idList.add(6);//以對象的方式進(jìn)行數(shù)據(jù)庫操作List<User> userList = userMapper.selectBatchIds(idList);System.out.println(userList);}2. selectByMap
說明:根據(jù)字段查詢用戶信息
/*** 練習(xí)2: 根據(jù)name="黑熊精" age="3000"查詢數(shù)據(jù)信息* SelectByMap:根據(jù)具體的字段查詢用戶信息.* sql語句: select * from user where name="黑熊精" and age=3000* 規(guī)則:默認(rèn)使用and連接符.*/@Testpublic void test03() {Map<String,Object> map = new HashMap<>();//key="字段名稱" value="字段值"map.put("name", "黑熊精");map.put("age", 3000);List<User> userList = userMapper.selectByMap(map);System.out.println(userList);}3. 條件構(gòu)造器查詢
/*** 4.name屬性中包含"精"的數(shù)據(jù),并且為女性* sql: SELECT * FROM USER WHERE NAME LIKE "%精%" AND sex = "女"* queryWrapper: 條件構(gòu)造器* 作用 動態(tài)拼接sql的where條件* 邏輯運(yùn)算符: >gt , <lt, =eq, >=ge, <= le*/@Testpublic void test04() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", "精").eq("sex", "女");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}4. Between-and
/*** 查詢年齡在18-35之間的女性用戶.* sql: SELECT * FROM USER WHERE age BETWEEN 18 AND 35 AND sex ="女";*/@Testpublic void test05() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.between("age", 18, 35).eq("sex", "女");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}5. order by
/*** 條件: 查詢年齡大于100歲的,并且按照年齡降序排列,* 如果年齡相同按照Id降序排列. * sql:SELECT * FROM USER WHERE age > 100 ORDER BY age DESC,id DESC;*/@Testpublic void test06() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("age", 100).orderByDesc("age","id");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}6. like練習(xí)
/*** 條件: 查詢名稱以"喬"結(jié)尾的,并且性別為女,并且age小于30歲.按照年齡降序排列.* SQL:* SELECT * FROM USER WHERE (NAME LIKE "%喬" AND sex="女" AND age < 30) ORDER BY age DESC;*/@Testpublic void test07(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeLeft("name","喬").eq("sex", "女").lt("age", 30).orderByDesc("age");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}7.inSql
說明:適用于子查詢
/*** 查詢age < 100歲的用戶,并且性別與name="孫尚香"的性別相同的的用戶數(shù)據(jù).* 分析: age<100 sex=男/女* sql:SELECT * FROM USER WHERE age < 100 AND sex in(SELECT sex FROM USER WHERE NAME = "孫尚香")*/@Testpublic void test08(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.lt("age",100).inSql("sex", "select sex from user where name ='孫尚香'");List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}8.select
/*** 需求: 有時可能不需要查詢?nèi)康臄?shù)據(jù)庫的表字段* 查詢age為18歲的用戶的名稱和id.* select:挑選字段的屬性.* 查詢結(jié)果:User(id=12, name=貂蟬, age=null, sex=null)*/@Testpublic void test09() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name","id").eq("age", 18);List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}9.condition
/*** 條件判斷* 以name和sex不為null的數(shù)據(jù)當(dāng)做where條件.* condition作用:* 判斷參數(shù)是否拼接為where條件* 結(jié)果true, 動態(tài)拼接參數(shù)* 結(jié)果false, 參數(shù)不會動態(tài)拼接* 應(yīng)用場景:* 接收前臺的參數(shù)時,參數(shù)可能為null或者其他的數(shù)值類型時* 需要添加判斷.* 業(yè)務(wù)需求:* 如果age>18時,才能查詢年齡*/@Testpublic void test10() {String name = null;int age = 18;QueryWrapper<User> queryWrapper = new QueryWrapper<>();//name屬性的值,不為null時,才會拼接where條件queryWrapper.eq(!StringUtils.isEmpty(name), "name", name);queryWrapper.eq(age>18, "age", age);List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}10. 根據(jù)對象查詢
/*** 根據(jù)對象查詢數(shù)據(jù)庫* 條件:根據(jù)對象中不為null的屬性充當(dāng)where條件* 需求:查詢age=18的用戶信息 性別=女* 說明:利用對象的方式查詢時,邏輯運(yùn)算符都是"="號*/@Testpublic void test11() {User user = new User();user.setAge(18).setSex("女");QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}11. selectObjs
說明:只查詢主鍵信息(第一列)數(shù)據(jù)
/*** 需求:只查詢主鍵的信息. * 類比: select * sql: SELECT id FROM USER where age >18*/@Testpublic void test12() {QueryWrapper<User> queryWrapper2 = new QueryWrapper<User>();queryWrapper2.select("id");//查詢的List<User>對象信息userMapper.selectList(queryWrapper2);QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.gt("age", 18);//只查詢主鍵信息List<Object> idList = userMapper.selectObjs(queryWrapper);System.out.println(idList);}12.selectMaps
說明:獲取任意字段的數(shù)據(jù)信息
/*** 獲取任意的字段信息* 需求:查詢用戶信息 只想獲取id和name的值.不想獲取age/sex* sql: select id,name from user where age > 18;*/@Testpublic void test13() {QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.select("id","name").gt("age", 18);//獲取全部的對象信息List<User> userList = userMapper.selectList(queryWrapper);//獲取字段的信息List<Map<String,Object>> listMap = userMapper.selectMaps(queryWrapper);System.out.println(userList);System.out.println(listMap);}13. 新增用戶
@Testpublic void test14() {User user = new User();user.setName("外國人永久居住權(quán)").setSex("男").setAge(30);userMapper.insert(user);}14.刪除用戶
/*** 刪除用戶信息*/@Testpublic void test15() {QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.eq("name", "外國人永久居住權(quán)");//根據(jù)多個條件 刪除用戶數(shù)據(jù).userMapper.delete(queryWrapper);//根據(jù)集合中的數(shù)據(jù).批量刪除用戶信息Integer[] ids = {2000,2001};List<Integer> idList = Arrays.asList(ids);userMapper.deleteBatchIds(idList);//id 代表主鍵信息 根據(jù)主鍵進(jìn)行刪除.userMapper.deleteById(2000);//挑選字段和屬性進(jìn)行刪除.Map<String,Object> columnMap = new HashMap<String, Object>();columnMap.put("name", "疫情");userMapper.deleteByMap(columnMap);}15. 修改操作
/*** 更新操作* updateById: 根據(jù)主鍵信息修改數(shù)據(jù).* 主鍵信息必須添加充當(dāng)where條件, * 根據(jù)對象中不為null的數(shù)據(jù),充當(dāng)set條件.* sql: update user set name="xx",age=xxx,sex=xx where id=23* * update方法說明:* 參數(shù)1:entity 修改后的數(shù)據(jù)結(jié)果* 參數(shù)2:updateWrapper 修改的條件構(gòu)造器* 案例:* 將楊穎改為范冰冰 修改年齡/性別* sql : update user set name="xxxx",age=xxx,sex=xxx* where name = "楊穎";* */@Testpublic void test16() {User user = new User();user.setId(23).setName("潘鳳").setAge(35).setSex("男");userMapper.updateById(user);User user2 = new User();user2.setName("范冰冰").setAge(40).setSex("女");UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("name", "楊穎");userMapper.update(user2, updateWrapper);}完結(jié)!希望打開了頁面就耐心的看完吧,你一定會有收獲de
總結(jié)
以上是生活随笔為你收集整理的MyBatisPlus的使用--十数个案例足以让你步入mybatisplus的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样用cmd创建Windows计划任务
- 下一篇: mac系统python读取文件路径_ma