美文网首页springMybatis
快速掌握Spring Boot集成MyBatis实现增删改查

快速掌握Spring Boot集成MyBatis实现增删改查

作者: 小虎哥的技术博客 | 来源:发表于2023-08-16 09:11 被阅读0次

    当你使用 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 是一个非常流行的持久层框架。

    相关文章

      网友评论

        本文标题:快速掌握Spring Boot集成MyBatis实现增删改查

        本文链接:https://www.haomeiwen.com/subject/gvykmdtx.html