MyBatisPlus的使用--十数个案例足以让你步入mybatisplus
文章目錄
- 1. MybatisPlus
- 1.1 業務需求
- 1.2ORM
- 1.3ORM實現單表操作原理
- 1.4 MybatisPlus介紹(MP)
- 1.5 MybatisPlus特性
- 1.6 MybatisPlus的實際入門操作
- 1.6.1導入jar包
- 6.2 編輯POJO文件
- 6.3 繼承共同的API接口
- 編輯YML配置
- 6.5 入門案例測試
- 1.7Mybatis案例
- 1.selectBatchIds
- 2. selectByMap
- 3. 條件構造器查詢
- 4. Between-and
- 5. order by
- 6. like練習
- 7.inSql
- 8.select
- 9.condition
- 10. 根據對象查詢
- 11. selectObjs
- 12.selectMaps
- 13. 新增用戶
- 14.刪除用戶
- 15. 修改操作
- 完結!希望打開了頁面就耐心的看完吧,你一定會有收獲de
1. MybatisPlus
1.1 業務需求
Mybatis缺點:
- 1.Mybatis操作數據庫的過程中,需要編輯大量的sql語句.無論該sql是否復雜或者簡單.
- Mybatis操作時在xml配置文件中需要額外記憶單獨的標簽.
需求:能否實現單表操作的CRUD的全自動的實現.能否實現真正的ORM映射?
1.2ORM
要求:利用面向對象的方式操作數據庫
特點:
???1.操作數據庫的面向對象.
??????userMapper.insert(user對象); ------->自己編輯sql語句
???2.查詢數據庫的面向對象.
??????userMapper.selectByWhere(user對象); ------>動態的生成Sql------>自動實現結果集封裝.
1.3ORM實現單表操作原理
要求:實現單表的自動的CRUD操作
例子:
框架內部實現過程:
?????核心:數據庫只能識別sql語句.框架需要將對象轉化為sql.
核心配置:
?????1.User對象與數據庫的表 一一映射!
?????解決方法: 自定義注解標識表與對象的關系
?????2.User對象的屬性與數據表中的字段一一映射!
?????解決方法:自定義注解完成屬性與字段的映射
?????3.將CURD的方法進行統一的定義.形成工具API接口
?????解決方法:利用公共的mapper接口 BaseMapper,在其中定義幾乎所有的單表的CURD操作.
?????4.將接口方法按照數據庫方式轉化為特定的sql語句.
????????1.用戶的調用 userMapper.insert(user)
????????2.拼接特定的sql:
insert into 表名(字段名…) values(屬性值…);
?????一般利用反射技術,可以通過對象或者有關對象的全部信息(注解,屬性,屬性值)
1.4 MybatisPlus介紹(MP)
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
1.5 MybatisPlus特性
-
無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
-
損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
-
強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
-
支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯
-
支持主鍵自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
-
支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
-
支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
-
內置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
-
內置分頁插件:基于 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之后,寫分頁等同于普通 List 查詢
-
分頁插件支持多種數據庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種數據庫
-
內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
-
內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作
1.6 MybatisPlus的實際入門操作
1.6.1導入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/構造方法插件 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--支持熱部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!--引入數據庫驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--springBoot數據庫連接 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>6.2 編輯POJO文件
注意如果沒有lombok插件可以在
https://blog.csdn.net/XING_Gou/article/details/104316560中安裝Lombok插件
6.3 繼承共同的API接口
public interface UserMapper extends BaseMapper<User>{...}編輯YML配置
server:port: 8090 #標識端口號信息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.入門案例* 要求:查詢全部的用戶信息 不需要寫where條件* 注意事項:利用MP的方法和自己的接口方法 名稱不能重復.* * 參數說明:queryWrapper 動態生成sql語句中的where條件*/@Testpublic void test01() {List<User> userList = userMapper.selectList(null);System.out.println(userList);} }1.7Mybatis案例
1.selectBatchIds
/*** 練習1: 查詢id信息為1,3,4,5,6用戶數據* sql: select * from user where id in (1,2,3,4,5,6);* 思考:id可以利用數組進行接收 利用數組查詢數據*/@Testpublic void test02() {List<Integer> idList = new ArrayList<Integer>();idList.add(1);idList.add(3);idList.add(4);idList.add(5);idList.add(6);//以對象的方式進行數據庫操作List<User> userList = userMapper.selectBatchIds(idList);System.out.println(userList);}2. selectByMap
說明:根據字段查詢用戶信息
/*** 練習2: 根據name="黑熊精" age="3000"查詢數據信息* SelectByMap:根據具體的字段查詢用戶信息.* sql語句: select * from user where name="黑熊精" and age=3000* 規則:默認使用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. 條件構造器查詢
/*** 4.name屬性中包含"精"的數據,并且為女性* sql: SELECT * FROM USER WHERE NAME LIKE "%精%" AND sex = "女"* queryWrapper: 條件構造器* 作用 動態拼接sql的where條件* 邏輯運算符: >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練習
/*** 條件: 查詢名稱以"喬"結尾的,并且性別為女,并且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="孫尚香"的性別相同的的用戶數據.* 分析: 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
/*** 需求: 有時可能不需要查詢全部的數據庫的表字段* 查詢age為18歲的用戶的名稱和id.* select:挑選字段的屬性.* 查詢結果: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的數據當做where條件.* condition作用:* 判斷參數是否拼接為where條件* 結果true, 動態拼接參數* 結果false, 參數不會動態拼接* 應用場景:* 接收前臺的參數時,參數可能為null或者其他的數值類型時* 需要添加判斷.* 業務需求:* 如果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. 根據對象查詢
/*** 根據對象查詢數據庫* 條件:根據對象中不為null的屬性充當where條件* 需求:查詢age=18的用戶信息 性別=女* 說明:利用對象的方式查詢時,邏輯運算符都是"="號*/@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
說明:只查詢主鍵信息(第一列)數據
/*** 需求:只查詢主鍵的信息. * 類比: 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
說明:獲取任意字段的數據信息
/*** 獲取任意的字段信息* 需求:查詢用戶信息 只想獲取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("外國人永久居住權").setSex("男").setAge(30);userMapper.insert(user);}14.刪除用戶
/*** 刪除用戶信息*/@Testpublic void test15() {QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.eq("name", "外國人永久居住權");//根據多個條件 刪除用戶數據.userMapper.delete(queryWrapper);//根據集合中的數據.批量刪除用戶信息Integer[] ids = {2000,2001};List<Integer> idList = Arrays.asList(ids);userMapper.deleteBatchIds(idList);//id 代表主鍵信息 根據主鍵進行刪除.userMapper.deleteById(2000);//挑選字段和屬性進行刪除.Map<String,Object> columnMap = new HashMap<String, Object>();columnMap.put("name", "疫情");userMapper.deleteByMap(columnMap);}15. 修改操作
/*** 更新操作* updateById: 根據主鍵信息修改數據.* 主鍵信息必須添加充當where條件, * 根據對象中不為null的數據,充當set條件.* sql: update user set name="xx",age=xxx,sex=xx where id=23* * update方法說明:* 參數1:entity 修改后的數據結果* 參數2:updateWrapper 修改的條件構造器* 案例:* 將楊穎改為范冰冰 修改年齡/性別* 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);}完結!希望打開了頁面就耐心的看完吧,你一定會有收獲de
總結
以上是生活随笔為你收集整理的MyBatisPlus的使用--十数个案例足以让你步入mybatisplus的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样用cmd创建Windows计划任务
- 下一篇: 不采用Matlab函数,自行设计基于双线