Bootstrap

Spring Boot集成MyBatis实现增删改查

当你使用 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技术的详尽文章,让您能够深入了解该领域的各种技巧和方法,让我们一起成为更优秀的程序员👩‍💻👨‍💻!

;