快速掌握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 是一个非常流行的持久层框架。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容