SpringBoot整合Mybatis-plus案例及用法實例
一、mybatis-plus簡介:
Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。這是官方給的定義,關(guān)于mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網(wǎng)。那么它是怎么增強(qiáng)的呢?其實就是它已經(jīng)封裝好了一些crud方法,我們不需要再寫xml了,直接調(diào)用這些方法就行,就類似于JPA。并且3.X系列支持lambda語法,讓我在寫條件構(gòu)造的時候少了很多的"魔法值",從代碼結(jié)構(gòu)上更簡潔了.
二、springboot整合mybatis-plus案例
pom.xml配置
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--springboot程序測試依賴,如果是自動創(chuà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 # 配置啟動端口號
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是定義時區(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掃描,多個目錄用逗號或者分號分隔(告訴 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:
# 是否開啟自動駝峰命名規(guī)則映射:從數(shù)據(jù)庫列名到Java屬性駝峰命名的類似映射
map-underscore-to-camel-case: true
# 如果查詢結(jié)果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
call-setters-on-nulls: true
# 這個配置會將執(zhí)行的sql打印出來,在開發(fā)或測試的時候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl用戶信息實體
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中可以決定主鍵的類型,不寫會采取默認(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;
/**
* 評價
*/
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啟動類
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實現(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> 返回數(shù)據(jù)
*/
@RequestMapping("/getInfoListPlus")
public Map<String,Object> getInfoListPage(){
//初始化返回類
Map<String,Object> result = new HashMap<>();
//查詢年齡等于18歲的學(xué)生
//等價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é)生
//等價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ù),并按照年齡降序
//等價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é)生
//等價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);
//查詢評價不為null的學(xué)生,并且分頁
//等價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> 返回數(shù)據(jù)
*/
@RequestMapping("/getInfoListPlus")
public Map<String,Object> getInfoListPage(){
//初始化返回類
Map<String,Object> result = new HashMap<>();
//查詢年齡等于18歲的學(xué)生
//等價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é)生
//等價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ù),并按照年齡降序
//等價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é)生
//等價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);
//查詢評價不為null的學(xué)生,并且分頁
//等價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語句,就可以實現(xiàn)簡單的增刪改查、批量操作、分頁mybatis-plus功能還是比較強(qiáng)大,能減少我們寫很多代碼,我個人還是比較喜歡用這個mybatis-plus的
mybatis-plus只是mybatis的增強(qiáng)版,它不影響mybatis的使用,我們可以寫我們自定的方法以及sql,接下來我們看一個小案例
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)造器使用中的各個方法格式和說明

總結(jié)
到此這篇關(guān)于SpringBoot整合Mybatis-plus案例及用法的文章就介紹到這了,更多相關(guān)SpringBoot整合Mybatis-plus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源配置功能
- SpringBoot?整合Mybatis-Plus并輸出SQL日志示例詳解
- SpringBoot中整合MyBatis-Plus-Join使用聯(lián)表查詢的實現(xiàn)
- SpringBoot整合Mybatis-Plus分頁失效的解決
- SpringBoot整合MyBatis-Plus樂觀鎖不生效的問題及解決方法
- SpringBoot整合Mybatis-plus的具體使用
- springboot整合mybatis-plus基于注解實現(xiàn)一對一(一對多)查詢功能
- Springboot3整合Mybatis-plus3.5.3報錯問題解決
相關(guān)文章
Spring?Boot?配置?Hikari?數(shù)據(jù)庫連接池的操作代碼
數(shù)據(jù)庫連接池是一個提高程序與數(shù)據(jù)庫的連接的優(yōu)化,連接池它主要作用是提高性能、節(jié)省資源、控制連接數(shù)、連接管理等操作,這篇文章主要介紹了SpringBoot配置Hikari數(shù)據(jù)庫連接池,需要的朋友可以參考下2023-09-09
SpringBoot獲取當(dāng)前運(yùn)行環(huán)境三種方式小結(jié)
在使用SpringBoot過程中,我們只需要引入相關(guān)依賴,然后在main方法中調(diào)用SpringBootApplication.run(應(yīng)用程序啟動類.class)方法即可,那么SpringBoot是如何獲取當(dāng)前運(yùn)行環(huán)境呢,接下來由小編給大家介紹一下SpringBoot獲取當(dāng)前運(yùn)行環(huán)境三種方式,需要的朋友可以參考下2024-01-01
java實現(xiàn)pgsql自動更新創(chuàng)建時間與更新時間的兩種方式小結(jié)
本文主要介紹了java實現(xiàn)pgsql自動更新創(chuàng)建時間與更新時間的兩種方式小結(jié),主要包括通過數(shù)據(jù)庫自身實現(xiàn)以及通過mybatisplus的TableField注解添加,具有一定的參考價值,感興趣的可以了解一下2024-01-01

