【SpringBoot】整合Mybatis

您所在的位置:网站首页 springboot日志打印到控台 【SpringBoot】整合Mybatis

【SpringBoot】整合Mybatis

2024-07-14 17:35| 来源: 网络整理| 查看: 265

目录 本地开发环境说明pom.xml主要依赖application.yml主要配置@MapperScan注解使用说明实体类示例Mapper接口示例Service接口示例Service接口实现类示例单元测试示例打印SQL日志使用slf4j打印SQL 总结

本地开发环境说明 开发依赖版本Spring Boot3.0.6Mybatis-Plus3.5.3.1JDK20 pom.xml主要依赖 org.springframework.boot spring-boot-starter-web com.baomidou mybatis-plus-boot-starter com.h2database h2 application.yml主要配置 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 @MapperScan注解使用说明

@MapperScan注解的作用是用来指定Mapper接口的位置,示例如下

@MapperScan(basePackages = "com.wen3.demo.mybatisplus.dao") @SpringBootApplication public class DemoMybatisplusApplication { public static void main(String[] args) { SpringApplication.run(DemoMybatisplusApplication.class, args); } } basePackages一定要指定Mapper接口的包路径,启动的时候Mybatis-Plus会把这个包及子包下的所有接口当做Mapper比如basePackages的值指定为com.wen3,则会把Service接口也当做Mapper,在调用方法的时候就会报错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; /** *

* *

* * @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; /** * 用户状态 */ @TableField("USER_STATUS") private Integer userStatus; /** * 用户区县 */ @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 { } 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接口实现类示例 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 implements UserService { @Override public UserPo getById(String userId) { LambdaQueryWrapper 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实现 使用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重启后就能看到日志了 总结

Mybatis-Plus完全兼容Mybatis,如果项目曾经使用的是Mybatis,想要引入Mybatis-Plus,是完成可以的,仅仅是在数据源的处理上有稍微细节的处理,本人在处理Mybatis和Mybatis-Plus方面具有丰富经验,如有需要,欢迎交流!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3