当你使用 Spring Boot 来开发应用程序时,MyBatis 是一个非常流行的持久层框架,这篇教程将帮助您学习如何在 Spring Boot 中集成 MyBatis,实现基本的增删改查操作。 我们以一个用户表为例。
创建项目和数据库
首先,您需要下载并安装 MySQL 数据库,并创建一个名为 userdb
的数据库,并创建一个名为 user
的用户表,字段如下:
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
age INT,
email VARCHAR(128),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
同时,您还需要使用 Spring Initializr 创建一个新的 Maven 项目,并添加以下依赖项:
<dependencies>
<!-- Spring Boot 相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
创建实体类
其次,您需要创建一个用户实体类,用于描述用户对象。以下是一个示例:
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
创建 Mapper 接口
接下来,您需要创建一个 Mapper 接口,用于定义对用户表的数据库操作。我们将展示两种定义sql语句的方式:注解和xml。
使用注解定义 SQL 语句
在该接口中,我们使用 MyBatis 的注解来映射 SQL 语句。以下是一个示例:
@Mapper
public interface UserMapper {
@Insert("INSERT INTO user(name, age, email, create_time, update_time) VALUES(#{name}, #{age}, #{email}, now(),now())")
int insert(User user);
@Select("SELECT * FROM user")
List<User> selectAll();
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Long id);
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteById(Long id);
@Update("UPDATE user SET name=#{name}, age=#{age}, email=#{email}, update_time=now() WHERE id = #{id}")
int updateById(User user);
}
在上面的代码中,我们使用 MyBatis 的注解来定义了五个方法:
- insert:用于向用户表中插入一条记录
- selectAll:用于查询所有用户记录
- selectById:用于根据用户 ID 查询一条记录
- deleteById:删除指定 ID 的用户记录
- updateById:根据 ID 更新指定用户记录
使用 XML 方式定义 SQL 语句
另外,您也可以使用 XML 方式来定义 SQL 语句,需要在 resources 目录下新建一个名为 mapper
的子目录,并添加一个名为 UserMapper.xml
的文件,并在其中定义 SQL 语句。
以下是一个示例 mapper 文件:
<?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.springbootmybatis.mapper.UserMapper">
<resultMap id="userMap" type="com.example.springbootmybatis.entity.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="email" column="email"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<insert id="insert" parameterType="com.example.springbootmybatis.entity.User">
INSERT INTO user(name, age, email, create_time, update_time)
VALUES(#{name}, #{age}, #{email}, now(),now())
</insert>
<select id="selectAll" resultMap="userMap">
SELECT * FROM user
</select>
<select id="selectById" resultMap="userMap" parameterType="long">
SELECT * FROM user WHERE id = #{id}
</select>
<delete id="deleteById" parameterType="long">
DELETE FROM user WHERE id = #{id}
</delete>
<update id="updateById" parameterType="com.example.springbootmybatis.entity.User">
UPDATE user SET name=#{name}, age=#{age}, email=#{email}, update_time=now() WHERE id = #{id}
</update>
</mapper>
配置 MyBatis 和数据源
为了连接 MyBatis 和数据源,我们需要在 application.properties 文件中配置 MyBatis 和数据源。注意,在这里我们使用 Spring Boot 默认的数据源 HikariCP, 不需要额外去添加数据库连接池。
以下是一个示例:
# 配置 MyBatis
mybatis.type-aliases-package=com.example.springbootmybatis.entity
mybatis.mapper-locations=classpath:mapper/*.xml
配置扫描器
最后,我们来配置扫描器,扫描 Mapper 接口并将其注册到 Spring 中。以下是一个示例:
@Configuration
@MapperScan("com.example.springbootmybatis.mapper")
public class DataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource dataSource() {
return new HikariDataSource();
}
}
在上述示例中,我们使用了 @MapperScan 注解来扫描 Mapper 接口,并将其注册到 Spring 中。同时,我们还使用了 @ConfigurationProperties 注解来读取 application.properties 文件中的数据源配置信息,并将其注入到数据源对象中。
测试
最后,您需要编写一个简单的控制器类来测试应用程序是否正常运行。以下是一个示例:
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/users")
public List<User> getUsers() {
return userMapper.selectAll();
}
@PostMapping("/users")
public int addUser(@RequestBody User user) {
return userMapper.insert(user);
}
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
return userMapper.selectById(id);
}
@PutMapping("/users/{id}")
public int updateUserById(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
return userMapper.updateById(user);
}
@DeleteMapping("/users/{id}")
public int deleteUserById(@PathVariable Long id) {
return userMapper.deleteById(id);
}
}
在这个示例中,我们创建了一个名为 UserController 的控制器类,使用各种 HTTP 方法实现了添加、删除、查询用户操作。在每个方法的方法体中调用了对应的 Mapper 方法。
至此,我们已经完成了基于Spring Boot 框架集成 MyBatis 实现增删改查 的教程,包括使用注解和 XML 方式定义 SQL 语句以及使用 Spring Boot 默认的数据库连接池。通过该教程,初学者可以快速了解 Spring Boot 集成 Mybatis 的基本知识。
总结
MyBatis是基于Java的持久化框架,通过XML或注解的方式将SQL语句映射为Java方法,从而实现了对数据库的灵活操作。MyBatis与Hibernate相比,其轻量级、半自动化的特点使得开发更加灵活。MyBatis 与 Spring Boot 集成,可以通过注解或 XML 等方式,轻松实现常规的增删改查操作。同时通过 MyBatis 可以使用通用 Mapper 来简化 DAO 层代码。所以 MyBatis 是一个非常流行的持久层框架。
关注微信公众号:“小虎哥的技术博客”。我们会定期发布关于Java技术的详尽文章,让您能够深入了解该领域的各种技巧和方法,让我们一起成为更优秀的程序员👩💻👨💻!