SpringBoot?整合Mybatis-Plus并輸出SQL日志示例詳解
本地開發(fā)環(huán)境說明
開發(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ù)庫 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies>
@MapperScan注解使用說明
@MapperScan
注解的作用是用來指定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: # 所有實體類所在包路徑 type-aliases-package: com.wen3.**.po # mapper.xmml文件路徑,多個使用逗號分隔 mapper-locations: classpath*:resources/mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
basePackages
一定要指定Mapper
接口的包路徑,啟動的時候Mybatis-Plus
會把這個包及子包下的所有接口當(dāng)做Mapper- 比如
basePackages
的值指定為com.wen3
,則會把Service
接口也當(dāng)做Mapper
,在調(diào)用方法的時候就會報錯org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
實體類示例
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; /** * 用戶賬號 */ @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接口實現(xiàn)類示例
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); } }
單元測試示例
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的日志確實是輸出了,在控制臺可以看到
- StdOutImpl源碼是使用System.out或System.err來打印SQL的
- SpringBoot默認使用logback日志組件,我們可以使用Mybatis-Plus提供的slf4j實現(xiàn)
使用slf4j打印SQL
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
- 重啟后日志沒打印出來,連控制臺也沒有輸出SQL日志
- 使用slf4j后,日志輸出級別就由SpringBoot接管了,SpringBoot默認是INFO級別
- 修改Mybatis-Plus下的日志為DEBUG,比如: logging.level.com.baomidou.mybatisplus=DEBUG
- 重啟后就能看到日志了
總結(jié)
Mybatis-Plus
完全兼容Mybatis
,如果項目曾經(jīng)使用的是Mybatis
,想要引入Mybatis-Plus
,是完成可以的,僅僅是在數(shù)據(jù)源的處理上有稍微細節(jié)的處理,本人在處理Mybatis
和Mybatis-Plus
方面具有豐富經(jīng)驗,如有需要,歡迎交流!
到此這篇關(guān)于SpringBoot 整合Mybatis-Plus并輸出SQL日志的文章就介紹到這了,更多相關(guān)SpringBoot 整合Mybatis-Plus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Mybatis-Plus、Jwt實現(xiàn)登錄token設(shè)置
- SpringBoot整合Mybatis-Plus實現(xiàn)微信注冊登錄的示例代碼
- springboot3.2整合mybatis-plus詳細代碼示例
- SpringBoot3整合mybatis-plus的實現(xiàn)
- SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源配置功能
- SpringBoot中整合MyBatis-Plus-Join使用聯(lián)表查詢的實現(xiàn)
- SpringBoot整合Mybatis-Plus分頁失效的解決
- Spring Boot 中整合 MyBatis-Plus詳細步驟(最新推薦)
相關(guān)文章
一文搞懂JMeter engine中HashTree的配置問題
本文主要介紹了JMeter engine中HashTree的配置,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Java Socket編程簡介_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Java Socket編程簡介的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05Java EasyExcel導(dǎo)出報內(nèi)存溢出的解決辦法
使用EasyExcel進行大數(shù)據(jù)量導(dǎo)出時容易導(dǎo)致內(nèi)存溢出,特別是在導(dǎo)出百萬級別的數(shù)據(jù)時,你有遇到過這種情況嗎,以下是小編整理的解決該問題的一些常見方法,需要的朋友可以參考下2024-10-10