SpringBoot?整合Mybatis-Plus并輸出SQL日志示例詳解
本地開(kāi)發(fā)環(huán)境說(shuō)明
開(kāi)發(fā)依賴 | 版本 |
---|---|
Spring Boot | 3.0.6 |
Mybatis-Plus | 3.5.3.1 |
JDK | 20 |
application.yml主要配置
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <!-- 根據(jù)需要修改數(shù)據(jù)庫(kù) --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies>
@MapperScan注解使用說(shuō)明
@MapperScan
注解的作用是用來(lái)指定Mapper
接口的位置,示例如下
debug: true logging: level: root: debug spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:tcp://localhost/D:/ProgramFiles/h2database/data/test;MODE=MYSQL; username: password: mybatis-plus: # 所有實(shí)體類(lèi)所在包路徑 type-aliases-package: com.wen3.**.po # mapper.xmml文件路徑,多個(gè)使用逗號(hào)分隔 mapper-locations: classpath*:resources/mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
basePackages
一定要指定Mapper
接口的包路徑,啟動(dòng)的時(shí)候Mybatis-Plus
會(huì)把這個(gè)包及子包下的所有接口當(dāng)做Mapper- 比如
basePackages
的值指定為com.wen3
,則會(huì)把Service
接口也當(dāng)做Mapper
,在調(diào)用方法的時(shí)候就會(huì)報(bào)錯(cuò)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
實(shí)體類(lèi)示例
package com.wen3.demo.mybatisplus.po; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; /** * <p> * * </p> * * @author tangheng * @since 2023-05-21 */ @Getter @Setter @Accessors(chain = true) @TableName("USER") public class UserPo { /** * 用戶id */ @TableId(value = "USER_ID", type = IdType.AUTO) private String userId; /** * 用戶姓名 */ @TableField("USER_NAME") private String userName; /** * 用戶性別 */ @TableField("USER_SEX") private String userSex; /** * 用戶郵箱 */ @TableField("USER_EMAIL") private String userEmail; /** * 用戶賬號(hào) */ @TableField("USER_ACCOUNT") private String userAccount; /** * 用戶地址 */ @TableField("USER_ADDRESS") private String userAddress; /** * 用戶密碼 */ @TableField("USER_PASSWORD") private String userPassword; /** * 用戶城市 */ @TableField("USER_CITY") private String userCity; /** * 用戶狀態(tài) */ @TableField("USER_STATUS") private Integer userStatus; /** * 用戶區(qū)縣 */ @TableField("USER_SEAT") private String userSeat; }
Mapper接口示例
package com.wen3.demo.mybatisplus.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.wen3.demo.mybatisplus.po.UserPo; import java.util.Map; public interface UserMapper extends BaseMapper<UserPo> { }
Service接口示例
package com.wen3.demo.mybatisplus.service; import com.wen3.demo.mybatisplus.po.UserPo; import java.util.Map; public interface UserService { UserPo getById(String userId); }
Service接口實(shí)現(xiàn)類(lèi)示例
package com.wen3.demo.mybatisplus.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.wen3.demo.mybatisplus.po.UserPo; import com.wen3.demo.mybatisplus.dao.UserMapper; import com.wen3.demo.mybatisplus.service.UserService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import java.util.Map; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, UserPo> implements UserService { @Override public UserPo getById(String userId) { LambdaQueryWrapper<UserPo> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(UserPo::getUserId, userId); return baseMapper.selectOne(queryWrapper); } }
單元測(cè)試示例
package com.wen3.demo.mybatisplus.service; import com.wen3.demo.mybatisplus.MybatisPlusSpringbootTestBase; import com.wen3.demo.mybatisplus.po.UserPo; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; class UserServiceTest extends MybatisPlusSpringbootTestBase { @Resource private UserService userService; @Test void getById() { String userId = "U11902a8436094248a45dd3821b07e82a1651108484889"; UserPo testResult = userService.getById(userId); log.info("testResult: {}", testResult); } }
打印SQL日志
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
加上這段配置后,SQL的日志確實(shí)是輸出了,在控制臺(tái)可以看到
- StdOutImpl源碼是使用System.out或System.err來(lái)打印SQL的
- SpringBoot默認(rèn)使用logback日志組件,我們可以使用Mybatis-Plus提供的slf4j實(shí)現(xiàn)
使用slf4j打印SQL
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
- 重啟后日志沒(méi)打印出來(lái),連控制臺(tái)也沒(méi)有輸出SQL日志
- 使用slf4j后,日志輸出級(jí)別就由SpringBoot接管了,SpringBoot默認(rèn)是INFO級(jí)別
- 修改Mybatis-Plus下的日志為DEBUG,比如: logging.level.com.baomidou.mybatisplus=DEBUG
- 重啟后就能看到日志了
總結(jié)
Mybatis-Plus
完全兼容Mybatis
,如果項(xiàng)目曾經(jīng)使用的是Mybatis
,想要引入Mybatis-Plus
,是完成可以的,僅僅是在數(shù)據(jù)源的處理上有稍微細(xì)節(jié)的處理,本人在處理Mybatis
和Mybatis-Plus
方面具有豐富經(jīng)驗(yàn),如有需要,歡迎交流!
到此這篇關(guān)于SpringBoot 整合Mybatis-Plus并輸出SQL日志的文章就介紹到這了,更多相關(guān)SpringBoot 整合Mybatis-Plus內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Mybatis-Plus、Jwt實(shí)現(xiàn)登錄token設(shè)置
- SpringBoot整合Mybatis-Plus實(shí)現(xiàn)微信注冊(cè)登錄的示例代碼
- springboot3.2整合mybatis-plus詳細(xì)代碼示例
- SpringBoot3整合mybatis-plus的實(shí)現(xiàn)
- SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能
- SpringBoot中整合MyBatis-Plus-Join使用聯(lián)表查詢的實(shí)現(xiàn)
- SpringBoot整合Mybatis-Plus分頁(yè)失效的解決
- Spring Boot 中整合 MyBatis-Plus詳細(xì)步驟(最新推薦)
相關(guān)文章
一文搞懂JMeter engine中HashTree的配置問(wèn)題
本文主要介紹了JMeter engine中HashTree的配置,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Java Socket編程簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java Socket編程簡(jiǎn)介的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05java創(chuàng)建多級(jí)目錄文件的實(shí)例講解
下面小編就為大家分享一篇java創(chuàng)建多級(jí)目錄文件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Spring Boot 多個(gè)定時(shí)器沖突問(wèn)題的解決方法
這篇文章主要介紹了Spring Boot 多個(gè)定時(shí)器沖突問(wèn)題的解決方法,實(shí)際開(kāi)發(fā)中定時(shí)器需要解決多個(gè)定時(shí)器同時(shí)并發(fā)的問(wèn)題,也要解決定時(shí)器之間的沖突問(wèn)題,本文通過(guò)問(wèn)題場(chǎng)景重現(xiàn)給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-05-05用Java將字符串的首字母轉(zhuǎn)換大小寫(xiě)
在項(xiàng)目開(kāi)發(fā)的時(shí)候會(huì)需要統(tǒng)一字符串的格式,比如首字母要求統(tǒng)一大寫(xiě)或小寫(xiě),那用Java如何實(shí)現(xiàn)這一功能?下面一起來(lái)學(xué)習(xí)學(xué)習(xí)。2016-08-08Java EasyExcel導(dǎo)出報(bào)內(nèi)存溢出的解決辦法
使用EasyExcel進(jìn)行大數(shù)據(jù)量導(dǎo)出時(shí)容易導(dǎo)致內(nèi)存溢出,特別是在導(dǎo)出百萬(wàn)級(jí)別的數(shù)據(jù)時(shí),你有遇到過(guò)這種情況嗎,以下是小編整理的解決該問(wèn)題的一些常見(jiàn)方法,需要的朋友可以參考下2024-10-10mybatis類(lèi)型處理器JSR310標(biāo)準(zhǔn)詳解
這篇文章主要介紹了mybatis類(lèi)型處理器JSR310標(biāo)準(zhǔn)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01