SpringBoot整合Mybatis-plus案例及用法實(shí)例
一、mybatis-plus簡介:
Mybatis-Plus(簡稱MP)是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。這是官方給的定義,關(guān)于mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網(wǎng)。那么它是怎么增強(qiáng)的呢?其實(shí)就是它已經(jīng)封裝好了一些crud方法,我們不需要再寫xml了,直接調(diào)用這些方法就行,就類似于JPA。并且3.X系列支持lambda語法,讓我在寫條件構(gòu)造的時(shí)候少了很多的"魔法值",從代碼結(jié)構(gòu)上更簡潔了.
二、springboot整合mybatis-plus案例
pom.xml配置
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--springboot程序測試依賴,如果是自動(dòng)創(chuàng)建項(xiàng)目默認(rèn)添加--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency> <!-- 包含spirng Mvc ,tomcat的包包含requestMapping restController 等注解 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- druid依賴 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.0</version> </dependency> <!-- mybatisPlus 核心庫 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.0</version> </dependency> </dependencies>
application.yml配置
server: port: 10100 # 配置啟動(dòng)端口號 mybatis: config-location: classpath:mybatis.cfg.xml # mybatis主配置文件所在路徑 type-aliases-package: com.demo.drools.entity # 定義所有操作類的別名所在包 mapper-locations: # 所有的mapper映射文件 - classpath:mapper/*.xml spring: #springboot的配置 datasource: #定義數(shù)據(jù)源 #127.0.0.1為本機(jī)測試的ip,3306是mysql的端口號。serverTimezone是定義時(shí)區(qū),照抄就好,mysql高版本需要定義這些東西 #useSSL也是某些高版本mysql需要問有沒有用SSL連接 url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useSSL=FALSE username: root #數(shù)據(jù)庫用戶名,root為管理員 password: 123456 #該數(shù)據(jù)庫用戶的密碼 # 使用druid數(shù)據(jù)源 type: com.alibaba.druid.pool.DruidDataSource # mybatis-plus相關(guān)配置 mybatis-plus: # xml掃描,多個(gè)目錄用逗號或者分號分隔(告訴 Mapper 所對應(yīng)的 XML 文件位置) mapper-locations: classpath:mapper/*.xml # 以下配置均有默認(rèn)值,可以不設(shè)置 global-config: db-config: #主鍵類型 AUTO:"數(shù)據(jù)庫ID自增" INPUT:"用戶輸入ID",ID_WORKER:"全局唯一ID (數(shù)字類型唯一ID)", UUID:"全局唯一ID UUID"; id-type: auto #字段策略 IGNORED:"忽略判斷" NOT_NULL:"非 NULL 判斷") NOT_EMPTY:"非空判斷" field-strategy: NOT_EMPTY #數(shù)據(jù)庫類型 db-type: MYSQL configuration: # 是否開啟自動(dòng)駝峰命名規(guī)則映射:從數(shù)據(jù)庫列名到Java屬性駝峰命名的類似映射 map-underscore-to-camel-case: true # 如果查詢結(jié)果中包含空值的列,則 MyBatis 在映射的時(shí)候,不會(huì)映射這個(gè)字段 call-setters-on-nulls: true # 這個(gè)配置會(huì)將執(zhí)行的sql打印出來,在開發(fā)或測試的時(shí)候可以用 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
用戶信息實(shí)體
package com.demo.drools.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:14 */ @Data @TableName("user_info")//@TableName中的值對應(yīng)著表名 public class UserInfoEntity { /** * 主鍵 * @TableId中可以決定主鍵的類型,不寫會(huì)采取默認(rèn)值,默認(rèn)值可以在yml中配置 * AUTO: 數(shù)據(jù)庫ID自增 * INPUT: 用戶輸入ID * ID_WORKER: 全局唯一ID,Long類型的主鍵 * ID_WORKER_STR: 字符串全局唯一ID * UUID: 全局唯一ID,UUID類型的主鍵 * NONE: 該類型為未設(shè)置主鍵類型 */ @TableId(type = IdType.AUTO) private Long id; /** * 姓名 */ private String name; /** * 年齡 */ private Integer age; /** * 技能 */ private String skill; /** * 評價(jià) */ private String evaluate; /** * 分?jǐn)?shù) */ private Long fraction; }
config類
package com.demo.drools.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.springframework.context.annotation.Bean; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:14 */ public class MybatisPlusConfig { /** * mybatis-plus SQL執(zhí)行效率插件【生產(chǎn)環(huán)境可以關(guān)閉】 */ @Bean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); } /** * 分頁插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
spring boot啟動(dòng)類
package com.demo.drools; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author 于嘉琪 */ @SpringBootApplication //@MapperScan和dao層添加@Mapper注解意思一樣 @MapperScan(basePackages = "com.demo.drools.dao") public class DroolsApplication { public static void main(String[] args) { SpringApplication.run(DroolsApplication.class, args); } }
dao層
package com.demo.drools.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.demo.drools.entity.UserInfoEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * 用戶信息DAO * * @author Yujiaqi * @date 2020/12/2 19:16 */ @Mapper public interface UserInfoDao extends BaseMapper<UserInfoEntity> { }
service層
package com.demo.drools.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.demo.drools.entity.UserInfoEntity; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:17 */ public interface UserInfoService extends IService<UserInfoEntity> { }
serviceImpl實(shí)現(xiàn)類層
package com.demo.drools.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.demo.drools.dao.UserInfoDao; import com.demo.drools.entity.UserInfoEntity; import com.demo.drools.service.UserInfoService; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:18 */ @Service public class UserInfoSerivceImpl extends ServiceImpl<UserInfoDao, UserInfoEntity> implements UserInfoService { }
controller控制層
package com.demo.drools.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.demo.drools.entity.UserInfoEntity; import com.demo.drools.service.UserInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import java.util.HashMap; import java.util.List; import java.util.Map; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:28 */ public class UserInfoPlusController { @Autowired private UserInfoService userInfoService; /** * MP擴(kuò)展演示 * @Author Sans * @CreateTime 2019/6/8 16:37 * @Return Map<String,Object> 返回?cái)?shù)據(jù) */ @RequestMapping("/getInfoListPlus") public Map<String,Object> getInfoListPage(){ //初始化返回類 Map<String,Object> result = new HashMap<>(); //查詢年齡等于18歲的學(xué)生 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age = 18 QueryWrapper<UserInfoEntity> queryWrapper1 = new QueryWrapper<>(); queryWrapper1.lambda().eq(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList1 = userInfoService.list(queryWrapper1); result.put("studentAge18",userInfoEntityList1); //查詢年齡大于5歲的學(xué)生且小于等于18歲的學(xué)生 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age > 5 AND age <= 18 QueryWrapper<UserInfoEntity> queryWrapper2 = new QueryWrapper<>(); queryWrapper2.lambda().gt(UserInfoEntity::getAge,5); queryWrapper2.lambda().le(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList2 = userInfoService.list(queryWrapper2); result.put("studentAge5",userInfoEntityList2); //模糊查詢技能字段帶有"畫"的數(shù)據(jù),并按照年齡降序 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE skill LIKE '%畫%' ORDER BY age DESC QueryWrapper<UserInfoEntity> queryWrapper3 = new QueryWrapper<>(); queryWrapper3.lambda().like(UserInfoEntity::getSkill,"畫"); queryWrapper3.lambda().orderByDesc(UserInfoEntity::getAge); List<UserInfoEntity> userInfoEntityList3 = userInfoService.list(queryWrapper3); result.put("studentAgeSkill",userInfoEntityList3); //模糊查詢名字帶有"小"或者年齡大于18的學(xué)生 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE name LIKE '%小%' OR age > 18 QueryWrapper<UserInfoEntity> queryWrapper4 = new QueryWrapper<>(); queryWrapper4.lambda().like(UserInfoEntity::getName,"小"); queryWrapper4.lambda().or().gt(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList4 = userInfoService.list(queryWrapper4); result.put("studentOr",userInfoEntityList4); //查詢評價(jià)不為null的學(xué)生,并且分頁 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE evaluate IS NOT NULL LIMIT 0,5 IPage<UserInfoEntity> page = new Page<>(); page.setCurrent(1); page.setSize(5); QueryWrapper<UserInfoEntity> queryWrapper5 = new QueryWrapper<>(); queryWrapper5.lambda().isNotNull(UserInfoEntity::getEvaluate); page = userInfoService.page(page,queryWrapper5); result.put("studentPage",page); return result; } }
controller層用到lambda語法
package com.demo.drools.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.demo.drools.entity.UserInfoEntity; import com.demo.drools.service.UserInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import java.util.HashMap; import java.util.List; import java.util.Map; /** * TODO your comment * * @author Yujiaqi * @date 2020/12/2 19:28 */ public class UserInfoPlusController { @Autowired private UserInfoService userInfoService; /** * MP擴(kuò)展演示 * @Author Sans * @CreateTime 2019/6/8 16:37 * @Return Map<String,Object> 返回?cái)?shù)據(jù) */ @RequestMapping("/getInfoListPlus") public Map<String,Object> getInfoListPage(){ //初始化返回類 Map<String,Object> result = new HashMap<>(); //查詢年齡等于18歲的學(xué)生 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age = 18 QueryWrapper<UserInfoEntity> queryWrapper1 = new QueryWrapper<>(); queryWrapper1.lambda().eq(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList1 = userInfoService.list(queryWrapper1); result.put("studentAge18",userInfoEntityList1); //查詢年齡大于5歲的學(xué)生且小于等于18歲的學(xué)生 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE age > 5 AND age <= 18 QueryWrapper<UserInfoEntity> queryWrapper2 = new QueryWrapper<>(); queryWrapper2.lambda().gt(UserInfoEntity::getAge,5); queryWrapper2.lambda().le(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList2 = userInfoService.list(queryWrapper2); result.put("studentAge5",userInfoEntityList2); //模糊查詢技能字段帶有"畫"的數(shù)據(jù),并按照年齡降序 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE skill LIKE '%畫%' ORDER BY age DESC QueryWrapper<UserInfoEntity> queryWrapper3 = new QueryWrapper<>(); queryWrapper3.lambda().like(UserInfoEntity::getSkill,"畫"); queryWrapper3.lambda().orderByDesc(UserInfoEntity::getAge); List<UserInfoEntity> userInfoEntityList3 = userInfoService.list(queryWrapper3); result.put("studentAgeSkill",userInfoEntityList3); //模糊查詢名字帶有"小"或者年齡大于18的學(xué)生 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE name LIKE '%小%' OR age > 18 QueryWrapper<UserInfoEntity> queryWrapper4 = new QueryWrapper<>(); queryWrapper4.lambda().like(UserInfoEntity::getName,"小"); queryWrapper4.lambda().or().gt(UserInfoEntity::getAge,18); List<UserInfoEntity> userInfoEntityList4 = userInfoService.list(queryWrapper4); result.put("studentOr",userInfoEntityList4); //查詢評價(jià)不為null的學(xué)生,并且分頁 //等價(jià)SQL: SELECT id,name,age,skill,evaluate,fraction FROM user_info WHERE evaluate IS NOT NULL LIMIT 0,5 IPage<UserInfoEntity> page = new Page<>(); page.setCurrent(1); page.setSize(5); QueryWrapper<UserInfoEntity> queryWrapper5 = new QueryWrapper<>(); queryWrapper5.lambda().isNotNull(UserInfoEntity::getEvaluate); page = userInfoService.page(page,queryWrapper5); result.put("studentPage",page); return result; } }
以上就是mybatis-plus的小案例,mybatis-plus它像我之前使用的spring data jpa框架不用寫sql語句,就可以實(shí)現(xiàn)簡單的增刪改查、批量操作、分頁mybatis-plus功能還是比較強(qiáng)大,能減少我們寫很多代碼,我個(gè)人還是比較喜歡用這個(gè)mybatis-plus的
mybatis-plus只是mybatis的增強(qiáng)版,它不影響mybatis的使用,我們可以寫我們自定的方法以及sql,接下來我們看一個(gè)小案例
dao層新增方法
/** * 查詢大于該分?jǐn)?shù)的學(xué)生 * @Author Sans * @CreateTime 2019/6/9 14:28 * @Param page 分頁參數(shù) * @Param fraction 分?jǐn)?shù) * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù) */ IPage<UserInfoEntity> selectUserInfoByGtFraction( @Param(value = "page") IPage<UserInfoEntity> page, @Param(value = "fraction")Long fraction);
service新增方法
/** * 查詢大于該分?jǐn)?shù)的學(xué)生 * @Author Sans * @CreateTime 2019/6/9 14:27 * @Param page 分頁參數(shù) * @Param fraction 分?jǐn)?shù) * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù) */ IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page,Long fraction);
serviceImpl層新增方法
/** * 查詢大于該分?jǐn)?shù)的學(xué)生 * @Author Sans * @CreateTime 2019/6/9 14:27 * @Param page 分頁參數(shù) * @Param fraction 分?jǐn)?shù) * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù) */ @Override public IPage<UserInfoEntity> selectUserInfoByGtFraction(IPage<UserInfoEntity> page, Long fraction) { return userInfoDao.selectUserInfoByGtFraction(page,fraction); }
controller層新增方法
/** * MP自定義SQL * @Author Sans * @CreateTime 2019/6/9 14:37 * @Return IPage<UserInfoEntity> 分頁數(shù)據(jù) */ @RequestMapping("/getInfoListSQL") public IPage<UserInfoEntity> getInfoListSQL(){ //查詢大于60分以上的學(xué)生,并且分頁 IPage<UserInfoEntity> page = new Page<>(); page.setCurrent(1); page.setSize(5); page = userInfoService.selectUserInfoByGtFraction(page,60L); return page; }
配置我們的mybatis的xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.demo.drools.dao.UserInfoDao"> <!-- Sans 2019/6/9 14:35 --> <select id="selectUserInfoByGtFraction" resultType="com.demo.drools.entity.UserInfoEntity"> SELECT * FROM user_info WHERE fraction > #{fraction} </select> </mapper>
以上配置就是我們的mybatis用法。
mybatis plus強(qiáng)大的條件構(gòu)造器queryWrapper、updateWrapper
1.QueryWrapper: Entity 對象封裝操作類
2.UpdateWrapper : Update 條件封裝,用于Entity對象更新操作
3.條件構(gòu)造器使用中的各個(gè)方法格式和說明
總結(jié)
到此這篇關(guān)于SpringBoot整合Mybatis-plus案例及用法的文章就介紹到這了,更多相關(guān)SpringBoot整合Mybatis-plus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能
- SpringBoot?整合Mybatis-Plus并輸出SQL日志示例詳解
- SpringBoot中整合MyBatis-Plus-Join使用聯(lián)表查詢的實(shí)現(xiàn)
- SpringBoot整合Mybatis-Plus分頁失效的解決
- SpringBoot整合MyBatis-Plus樂觀鎖不生效的問題及解決方法
- SpringBoot整合Mybatis-plus的具體使用
- springboot整合mybatis-plus基于注解實(shí)現(xiàn)一對一(一對多)查詢功能
- Springboot3整合Mybatis-plus3.5.3報(bào)錯(cuò)問題解決
相關(guān)文章
Spring boot + LayIM + t-io 實(shí)現(xiàn)文件上傳、 監(jiān)聽用戶狀態(tài)的實(shí)例代碼
這篇文章主要介紹了Spring boot + LayIM + t-io 實(shí)現(xiàn)文件上傳、 監(jiān)聽用戶狀態(tài)的實(shí)例代碼,需要的朋友可以參考下2017-12-12淺析springboot通過面向接口編程對控制反轉(zhuǎn)IOC的理解
這篇文章主要介紹了springboot通過面向接口編程對控制反轉(zhuǎn)IOC的理解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-08-08解決使用@ResponseBody后返回500錯(cuò)誤的問題
這篇文章主要介紹了解決使用@ResponseBody后返回500錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09SpringBoot自定義對象參數(shù)超詳細(xì)介紹作用
SpringBoot通過自定義對象參數(shù),可以實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化,并可以級聯(lián)封裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09SpringBoot如何使用Fastjson解析Json數(shù)據(jù)
這篇文章主要介紹了SpringBoot如何使用Fastjson解析Json數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Springboot+Hutool自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏
我們在項(xiàng)目中會(huì)處理敏感數(shù)據(jù)時(shí),通常需要對這些數(shù)據(jù)進(jìn)行脫敏,本文主要使用了Springboot整合Hutool來自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏,感興趣的可以理解下2023-10-10Java?HttpURLConnection使用方法與實(shí)例演示分析
這篇文章主要介紹了Java?HttpURLConnection使用方法與實(shí)例演示,HttpURLConnection一個(gè)抽象類是標(biāo)準(zhǔn)的JAVA接口,該類位于java.net包中,它提供了基本的URL請求,響應(yīng)等功能,下面我們來深入看看2023-10-10