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í)體類所在包路徑
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.Slf4jImplbasePackages一定要指定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í)體類示例
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)類示例
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)文章
淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式
本文主要介紹了淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
springboot的切面應(yīng)用方式(注解Aspect)
文章總結(jié):Spring?Boot提供了三種攔截器:Filter、Interceptor和Aspect,Filter主要用于內(nèi)容過(guò)濾和非登錄狀態(tài)的非法請(qǐng)求過(guò)濾,無(wú)法獲取Spring框架相關(guān)的信息,Interceptor可以在獲取請(qǐng)求類名、方法名的同時(shí),獲取請(qǐng)求參數(shù),但無(wú)法獲取參數(shù)值2024-11-11
java開(kāi)發(fā)技巧代碼寫(xiě)的快且bug少的原因分析
這篇文章主要為大家介紹了java開(kāi)發(fā)中代碼寫(xiě)的快且bug少的原因分析及技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時(shí)不能查到內(nèi)容的原因分析
這篇文章主要介紹了JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時(shí)不能查到內(nèi)容的原因分析及簡(jiǎn)單處理方法,文中給大家介紹了javaweb中dbutils的使用,需要的朋友可以參考下2017-12-12
Mybatis 傳參與排序模糊查詢功能實(shí)現(xiàn)
這篇文章主要介紹了Mybatis 傳參與排序模糊查詢功能實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-04-04

