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:
# 所有實(shí)體類所在包路徑
type-aliases-package: com.wen3.**.po
# mapper.xmml文件路徑,多個使用逗號分隔
mapper-locations: classpath*:resources/mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImplbasePackages一定要指定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)
實(shí)體類示例
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接口實(shí)現(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的日志確實(shí)是輸出了,在控制臺可以看到

- StdOutImpl源碼是使用System.out或System.err來打印SQL的
- SpringBoot默認(rèn)使用logback日志組件,我們可以使用Mybatis-Plus提供的slf4j實(shí)現(xiàn)
使用slf4j打印SQL
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl- 重啟后日志沒打印出來,連控制臺也沒有輸出SQL日志
- 使用slf4j后,日志輸出級別就由SpringBoot接管了,SpringBoot默認(rèn)是INFO級別
- 修改Mybatis-Plus下的日志為DEBUG,比如: logging.level.com.baomidou.mybatisplus=DEBUG
- 重啟后就能看到日志了
總結(jié)
Mybatis-Plus完全兼容Mybatis,如果項目曾經(jīng)使用的是Mybatis,想要引入Mybatis-Plus,是完成可以的,僅僅是在數(shù)據(jù)源的處理上有稍微細(xì)節(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實(shí)現(xiàn)登錄token設(shè)置
- SpringBoot整合Mybatis-Plus實(shí)現(xiàn)微信注冊登錄的示例代碼
- 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分頁失效的解決
- Spring Boot 中整合 MyBatis-Plus詳細(xì)步驟(最新推薦)
相關(guān)文章
一文搞懂JMeter engine中HashTree的配置問題
本文主要介紹了JMeter engine中HashTree的配置,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Java Socket編程簡介_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java Socket編程簡介的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05
java創(chuàng)建多級目錄文件的實(shí)例講解
下面小編就為大家分享一篇java創(chuàng)建多級目錄文件的實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Java EasyExcel導(dǎo)出報內(nèi)存溢出的解決辦法
使用EasyExcel進(jìn)行大數(shù)據(jù)量導(dǎo)出時容易導(dǎo)致內(nèi)存溢出,特別是在導(dǎo)出百萬級別的數(shù)據(jù)時,你有遇到過這種情況嗎,以下是小編整理的解決該問題的一些常見方法,需要的朋友可以參考下2024-10-10
mybatis類型處理器JSR310標(biāo)準(zhǔn)詳解
這篇文章主要介紹了mybatis類型處理器JSR310標(biāo)準(zhǔn)詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

