news 2026/4/6 17:40:50

mybatis开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mybatis开发

对于mybatis的基本使用

简介:
对于使用mybatis编写代码,在开发中,我们认识mybatis从这几个角度来认识

核心问题

1.springboot项目引入mybatis的依赖
2.关于mybatis的配置需要配置什么东西
3.在实际开发接口的时候mybatis的最佳实践、
4.一个完整的接口全链路的的demo

1. Spring Boot 项目引入 MyBatis 的依赖

在 pom.xml(Maven 项目)中添加以下依赖:
1

<!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Spring Boot Web(可选,若为 Web 项目) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>

⚠️ 注意:MyBatis Spring Boot Starter 的版本需与 Spring Boot 版本兼容(如 Spring Boot 3.x 需使用 MyBatis Starter 3.x)。

2. MyBatis 的配置项(application.yml / application.properties)

在 application.yml 中配置数据源与 MyBatis 相关属性:

spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:

指定 Mapper XML 文件位置(可选,若使用注解则不需要)

mapper-locations: classpath:mapper/*.xml

如果你使用 注解方式 编写 SQL(如 @Select),则可以省略 mapper-locations。

3. 实际开发中的 MyBatis 最佳实践

✅ 推荐使用 接口 + XML 模式(或纯注解,看团队规范)
方式一:注解方式(适合简单 SQL)

@MapperpublicinterfaceUserMapper{@Select("SELECT * FROM user WHERE id = #{id}")UserfindById(Longid);@Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")@Options(useGeneratedKeys=true,keyProperty="id")intinsert(Useruser);}

方式二:XML 方式(推荐用于复杂 SQL、动态 SQL)

定义 Mapper 接口:

@MapperpublicinterfaceUserMapper{UserfindById(Longid);List<User>findByNameLike(Stringname);intinsert(Useruser);}

编写对应 XML 文件(src/main/resources/mapper/UserMapper.xml):

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.example.demo.mapper.UserMapper"><resultMapid="UserResultMap"type="User"><idproperty="id"column="id"/><resultproperty="name"column="name"/><resultproperty="email"column="email"/>

✅ 最佳实践建议:
统一使用 @Mapper 注解 或在启动类上加 @MapperScan(“com.example.demo.mapper”)(推荐后者,减少每个 Mapper 加注解)。
java
1234567
开启驼峰映射(map-underscore-to-camel-case: true),避免字段名和属性名不一致问题。
避免在 XML 中写业务逻辑,SQL 应保持简洁,复杂逻辑放在 Service 层。
使用 #{} 而不是,防止SQL注入({},防止 SQL 注入(,防止SQL注入({} 是直接拼接,仅用于表名、排序字段等动态场景,需谨慎)。
合理使用 resultMap 处理复杂映射(如一对一、一对多)。
日志调试:开发时开启 MyBatis SQL 日志(如上配置 log-impl),便于排查问题。
分页处理:可集成 PageHelper 或使用 MyBatis-Plus(若允许引入增强框架)。
总结
角度
关键点
依赖引入
mybatis-spring-boot-starter + 数据库驱动
配置
数据源 + mybatis.mapper-locations + 驼峰映射
最佳实践
接口 + XML / 注解、@MapperScan、#{} 防注入、SQL 与业务分离
通过以上方式,你可以在 Spring Boot 项目中高效、规范地使用 MyBatis 进行数据库操作。

4.完整的demo

下面提供一个完整的、可直接运行的 MyBatis 示例,假设你已经:

搭建好了 Spring Boot 项目(基于 Spring Boot 3.x)
引入了 mybatis-spring-boot-starter、mysql-connector-java、spring-boot-starter-web 等依赖
我们将以一个最简单的用户表(user)为例,实现“查询所有用户”和“根据 ID 查询用户”的功能。

第一步:创建数据库表(MySQL)
sql
1234567891011121314
CREATE DATABASE IF NOT EXISTS demo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE demo_db;

CREATE TABLEuser(
idBIGINT AUTO_INCREMENT PRIMARY KEY,
nameVARCHAR(100) NOT NULL,
emailVARCHAR(150) NOT NULL
);

第二步:配置 application.yml
yaml
12345678910111213
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.entity

请根据你的数据库用户名/密码调整。

第三步:创建实体类(Entity)
java
12345678910111213141516171819202122
// src/main/java/com/example/demo/entity/User.java
package com.example.demo.entity;

public class User {
private Long id;
private String name;
private String email;

public Long getId() { return id; } public void setId(Long id) { this.id = id; }

第四步:创建 Mapper 接口
java
123456789101112
// src/main/java/com/example/demo/mapper/UserMapper.java
package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface UserMapper {
User findById(Long id);

也可以不在每个接口加 @Mapper,而是在启动类上使用 @MapperScan(“com.example.demo.mapper”),推荐后者。

第五步:编写 Mapper XML 文件
创建目录:src/main/resources/mapper/

xml
12345678910111213141516

<?xml version="1.0" encoding="UTF-8"?>
<select id="findById" resultType="User" parameterType="long"> SELECT id, name, email FROM user WHERE id = #{id} </select>

注意:resultType=“User” 能生效是因为我们在 application.yml 中配置了 type-aliases-package。

第六步:创建 Service(可选,但推荐)
java
12345678910111213141516171819202122232425
// src/main/java/com/example/demo/service/UserService.java
package com.example.demo.service;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserService {

第七步:创建 Controller
java
2345678910111213141516171819202122232425262728291
public List getAllUsers() {
return userService.getAllUsers();
}

@GetMapping("/{id}") public User getUserById(@PathVariable Long id) { return userService.getUserById(id); }

}
第八步:启动类
java
1234567891011121314
// src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// 如果使用 @MapperScan,可去掉 Mapper 接口上的 @Mapper
// @MapperScan(“com.example.demo.mapper”)
@SpringBootApplication
public class DemoApplication {

启动项目后测试
启动 Spring Boot 应用
访问以下接口:
GET http://localhost:8080/users → 返回所有用户
GET http://localhost:8080/users/1 → 返回 ID 为 1 的用户
你将在控制台看到 MyBatis 打印的 SQL 日志,例如:

123456
> Preparing: SELECT id, name, email FROM user
> Parameters:
<
Columns: id, name, email
<
Row: 1, 张三, zhangsan@example.com
<== Row: 2, 李四, lisi@example.com
<== Total: 2
小结
这个 Demo 包含了:

实体类(User)
Mapper 接口 + XML
Service 层
REST Controller
正确的 MyBatis 配置
结构清晰、符合生产规范,可作为后续开发的模板。

提示:如果不想写 XML,也可以全部用注解(如 @Select),但对于复杂查询(如动态 WHERE、JOIN),XML 更灵活、可读性更好。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!