SpringBoot 项目集成 MyBatis 框架的方法
1. 添加依赖
首先在 SpringBoot 项目的 pom.xml 文件中添加 MyBatis 依赖,我使用的 SpringBoot 版本是 2.5.3,这里我引入最新的 MyBatis 版本:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
然后再在 pom.xml 的build
标签中添加资源配置,因为 MyBatis 一般会使用 xml 文件写 SQL,并且我习惯将 xml 文件放在/src/main/java/**/mapper/xml
包下,所以这里需要该配置,否则编译或打包的时候 IDEA 不会将该目录下的 xml 文件一起打包的。
<resources>
<!-- src/main/java下的xml资源编译到classes下 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!-- src/main/resources下的资源编译到classes下 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
注意:这里未正确配置可能会引起异常
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
2. 配置文件
下面写几条我认为要用到的配置。以下配置均配置在application.properties
中。
2.1. 配置 xml 文件地址
当 xml 文件和 mapper 接口不在同一个包下的时候必须配置这个,我的项目一般 mapper 接口在src/main/java/**/mapper
包下,而 xml 文件我习惯放在该包下的 xml 包中,也就是src/main/java/**/mapper/xml
包下。当 xml 文件和 mapper 接口在同一个包下的时候这个配置可以省略。
mybatis.mapper-locations=classpath:**/mapper/xml/*.xml
注意:这里未正确配置也可能会引起异常
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
2.2. 配置实体包地址
指定 model 包地址,mybatis 的 xml 中的 resultType 等返回类型就可直接写为该类的首字母小写的简写形式,该项配置非必须,我们可以直接写完整类名,便于跳转和识别。比如:
<select id="listOutputTasks" resultType="com.gtcom.web.entity.OutputTask">
SELECT * FROM output_task
</select>
mybatis.type-aliases-package=com.gtcom.web.entity
2.3. 配置下划线自动映射驼峰
将带有下划线的表字段映射为驼峰格式的实体类属性,因为数据库表字段一般都是以下划线分割的,而 Java 类字段命名都是驼峰命名的。要让 MyBatis 实现自动映射,就要启用该配置项。
mybatis.configuration.map-underscore-to-camel-case=true
2.4. 配置日志级别
mybatis 日志设置,我们可以在开发阶段将 mapper 接口所在的包的日志格式调整为 trace 级别,这样能完整输出 SQL 的执行过程日志,便于调试。其中com.gtcom.web.mapper
是我的 mapper 接口和 xml 文件所在的包。
logging.level.com.gtcom.web.mapper=trace
从下面的日志可以看出,SQL 语句和参数以及结果总数的日志级别是 DEBUG,返回结果明细的日志级别是 TRACE,所以我们可以在开发或测试环境指定对应包的日志级别为 TRACE,而生产环境可以指定为 DEBUG 或者 INFO,减少日志输出。
2021-08-21 17:58:44.827 DEBUG 14848 --- [nio-8080-exec-1] c.g.w.m.O.listOutputTasks : ==> Preparing: SELECT * FROM output_task
2021-08-21 17:58:44.857 DEBUG 14848 --- [nio-8080-exec-1] c.g.w.m.O.listOutputTasks : ==> Parameters:
2021-08-21 17:58:44.884 TRACE 14848 --- [nio-8080-exec-1] c.g.w.m.O.listOutputTasks : <== Columns: id, create_time, update_time
2021-08-21 17:58:44.886 TRACE 14848 --- [nio-8080-exec-1] c.g.w.m.O.listOutputTasks : <== Row: 1, 2021-08-15 10:10:07, 2021-08-18 10:11:28
2021-08-21 17:58:44.892 TRACE 14848 --- [nio-8080-exec-1] c.g.w.m.O.listOutputTasks : <== Row: 2, 2021-01-01 13:04:04, 2021-08-21 17:08:54
2021-08-21 17:58:44.893 DEBUG 14848 --- [nio-8080-exec-1] c.g.w.m.O.listOutputTasks : <== Total: 2
3. 代码编写
OutputTaskMapper.xml
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gtcom.web.mapper.OutputTaskMapper">
<select id="listOutputTasks" resultType="com.gtcom.web.entity.OutputTask">
SELECT * FROM data_center.output_task
</select>
</mapper>
OutputTaskMapper.java
package com.gtcom.web.mapper;
import com.gtcom.web.entity.OutputTask;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author wangbo
* @date 2021/8/20
*/
@Mapper
public interface OutputTaskMapper {
/**
* 查询输出任务列表
*
* @return List<OutputTask>
*/
List<OutputTask> listOutputTasks();
}
转载自:https://juejin.cn/post/7352144724294221878