Spring Boot + MyBatis 数据库连接配置指南
【摘要】 Spring Boot + MyBatis 数据库连接配置指南记录在 Spring Cloud 项目中用 MyBatis 连接 MySQL 的完整配置,以及踩过的坑。 一、需要引入的依赖放在 service 的公共父节点 module/pom.xml 里(所有 service 都能继承):<!-- MySQL 驱动 --><dependency> <groupId>com.mysql...
Spring Boot + MyBatis 数据库连接配置指南
记录在 Spring Cloud 项目中用 MyBatis 连接 MySQL 的完整配置,以及踩过的坑。
一、需要引入的依赖
放在 service 的公共父节点 module/pom.xml 里(所有 service 都能继承):
<!-- MySQL 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MyBatis 与 Spring Boot 集成 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>4.0.0</version>
</dependency>
版本号要和你的 Spring Boot 大版本对上(Boot 4.x → mybatis-spring-boot-starter 4.0.x)。
二、配置文件(application.yml)
放在 src/main/resources/application.yml:
server:
port: 8081
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://主机:端口/数据库名?useSSL=false&serverTimezone=Asia/Shanghai
username: 用户名
password: 密码
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
各部分说明
| 配置 | 作用 |
|---|---|
driver-class-name |
MySQL 驱动类,固定写 com.mysql.cj.jdbc.Driver |
url |
连接地址,格式 jdbc:mysql://主机:端口/库名 |
username / password |
数据库账号密码 |
mybatis.mapper-locations |
指定 XML 文件位置,classpath:mapper/*.xml 表示扫 resources/mapper 下所有 xml |
map-underscore-to-camel-case |
下划线转驼峰,user_name 自动映射成 userName |
关于 mapper-locations:可以配,也可以不配
推荐显式配置:
mybatis:
mapper-locations: classpath:mapper/*.xml
直观、规范,XML 统一放 resources/mapper/ 下,别人一看就知道在哪。
不配置也能生效的情况(默认约定):
当 XML 文件在 resources/ 下的包路径和 Mapper 接口的包路径完全一致,且文件名和接口同名时,MyBatis 会自动扫描到,不用写 mapper-locations。例如:
resources/com/example/user/mapper/UserMapper.xml ↔ com.example.user.mapper.UserMapper
结论: 虽然不配也能靠「接口同包」自动找到,但推荐显式配置,结构更可控。
三、三种 MyBatis 用法
方式 A:注解 SQL(入门简单)
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
UserEntity getUserById(@Param("id") Long id);
}
方式 B:XML 写 SQL(企业主流)
Mapper 接口(只写方法签名):
@Mapper
public interface UserMapper {
UserEntity getUserById(@Param("id") Long id);
}
XML 文件 src/main/resources/mapper/UserMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.user.mapper.UserMapper">
<select id="getUserById" resultType="com.example.user.entity.UserEntity">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
方式 C:启动类扫包(不用每个接口写 @Mapper)
@SpringBootApplication
@MapperScan("com.example.user.mapper")
public class UserServiceApplication { ... }
四、Mapper 与 XML 的对应关系(关键)
| XML 里的 | 必须等于 | 作用 |
|---|---|---|
<mapper namespace> |
Mapper 接口全限定名 com.example.user.mapper.UserMapper |
把 XML 和接口关联 |
<select id> |
接口方法名 getUserById |
把 SQL 和方法关联 |
resultType |
返回实体全限定名 | 结果映射到哪个类 |
#{id} |
方法参数 @Param("id") |
SQL 占位符对应的参数 |
五、分层结构(规范)
UserController → UserService(接口) → UserServiceImpl → UserMapper(接口) → XML
com.example.user
├── UserServiceApplication.java (启动类)
├── controller/UserController.java
├── service/UserService.java (接口)
├── service/UserServiceImpl.java (实现)
├── mapper/UserMapper.java (接口)
├── entity/UserEntity.java (实体)
└── resources/mapper/UserMapper.xml
六、踩坑记录
| 坑 | 报错/表现 | 解决 |
|---|---|---|
URL 里多了 http://,端口用 / |
连不上 | 去掉 http://,端口用 :,格式 主机:端口/库名 |
| XML 放错目录 | 找不到映射 | 放到 resources/mapper/,且 yml 配 classpath:mapper/*.xml |
| XML 内容是全局 configuration | 报 XML 解析错误 | Mapper 文件首行用 <!DOCTYPE mapper>,不是 <!DOCTYPE configuration> |
<mapper> 自闭合 /> |
“content must match EMPTY” | 用 <mapper ...> + </mapper> |
| 实体/表字段对不上 | 查出来字段为 null | 开启驼峰映射 或 SQL 别名对齐 |
| 域名无法解析 (UnknownHostException) | 连不上数据库 | 确认数据库地址真实可用(公网 IP / 本地 localhost) |
| IDEA 提示 mybatis 配置不存在 | 标红 | 刷新 Maven 依赖 (Reload All Maven Projects) |
七、验证是否连上
- 确认
application.yml里mybatis配置块已加 - 刷新 Maven 让依赖生效
- 启动应用,访问 Controller 接口
- 日志里看到
HikariPool-1 - Starting表示开始连数据库;若无报错即连接成功
常见失败:
UnknownHostException(域名不存在/地址错)、Access denied(账号密码错)、Connection refused(端口错/数据库没启动)。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)