在 Spring Boot 中集成 Mybatis

本贴最后更新于 2858 天前,其中的信息可能已经时移世易

之前我们讲过在 Spring Boot 中集成 JPA“在 spring Boot 中使用 Spring-data-jpa 操作数据库”,本篇介绍另外一个 ORM 框架 Mybatis 在 Spring Boot 中的集成使用。

最近一直在用 JPA,其实还是蛮喜欢 JPA 的风格,最近需要开一个新项目,还没定下具体用什么 ORM 框架,不过 Mybatis 的几率会大一些,本篇就相当于一个温习回顾吧,话不多说了,大家看下面步骤吧。

在 Spring Boot 中集成 Mybatis

  • 在 POM 中添加 Mybatis 的相关起步依赖,Spring Boot 的项目构建大家可以参考我的这篇文章“Spring Boot 快速入门
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
  • 配置数据库连接,我们在 application.yml 文件中配置一下内容
spring:
  datasource:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/restful?useUnicode=true&characterEncoding=UTF-8&useSSL=false
      username: root
      password: root
      initialize: true
  • 在数据库中创建 user 表,字段为 ID(INT),NAME(VARCHAR),HOBBY(VARCHAR),并创建 user 实体 Bean,如下:
public class User {
    private Integer id;
    private String name;
    private String hobby;
    //省去get、set方法
    //之前文章我提过一个lombok的框架,可以省去get set方法,大家可以参考一下
    //https://my.oschina.net/wangxincj/blog/811611
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", hobby='" + hobby + '\'' +
                '}';
    }
}

  • user 对象创建好后我们编写 UserMapper,此处有两种方法,大家可以自行选择:

1、第一种方法如下:

  • 编写 Mapper
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {
    int insert(@Param("pojo") User pojo);

    int insertList(@Param("pojos") List pojo);

    int update(@Param("pojo") User pojo);
}

  • 在 resources 文件夹下面创建 mapper 文件夹,存放 mapper.xml 文件
  • 编写 UserMapper.xml
<?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.wang.mybatis.UserMapper">

    <!--auto generated Code-->
    <resultMap id="AllColumnMap" type="com.wang.mybatis.User">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="hobby" property="hobby"/>
    </resultMap>

    <!--auto generated Code-->
    <sql id="all_column">
        `id`,
        `name`,
        `hobby`
    </sql>

    <!--auto generated Code-->
    <insert id="insert">
        INSERT INTO `user`
        (`id`,`name`,`hobby`)
        VALUES (#{pojo.id},#{pojo.name},#{pojo.hobby})
    </insert>

    <!--auto generated Code-->
    <insert id="insertList">
        INSERT INTO `user`(
        <include refid="all_column"/>
        )VALUES
        <foreach collection="pojos" item="pojo" index="index" separator=",">
            (
            #{pojo.id},
            #{pojo.name},
            #{pojo.hobby}
            )
        </foreach>
    </insert>

    <!--auto generated Code-->
    <update id="update">
        UPDATE `user`
        <set>
            <if test="pojo.id != null"> `id` = #{pojo.id}, </if>
            <if test="pojo.name != null"> `name` = #{pojo.name}, </if>
            <if test="pojo.hobby != null"> `pwd` = #{pojo.hobby} </if>
        </set>
        WHERE `id` = #{pojo.id}
    </update>

</mapper>
  • 在 application.yml 中添加 Mybatis 的相关配置
mybatis:
  mapper-locations: classpath*:mapper/*Mapper.xml
  type-aliases-package: com.wang.mybatis

2、第二种方法如下

  • 编写 Mapper 对象
@Mapper
public interface UserMapper {
    @Insert("INSERT INTO user(name, hobby) VALUES(#{name}, #{hobby})")
    int insert(@Param("name") String name, @Param("hobby") String hobby);
    @Update("UPDATE user SET hobby=#{hobby} WHERE name=#{name}")
    void update(User user);
    @Delete("DELETE FROM user WHERE id =#{id}")
    void delete(Long id);
}

不难看出第一种方法是比较传统的 xml 方式配置,而第二种方式则是去除了 xml 将 sql 配置到了注解中,简化了配置,也更符合 Spring Boot 的初衷。两种方法大家看自己的情况而定吧。

至此,Mybatis 的相关配置完成。

ps:在此给大家安利一个 Mybatis 的自动化插件 MyBatisCodeHelper,使用这个插件,大家只要写好实体 bean,插件即可自动创建相应的 sql 脚本、Mapper.xml、Mapper 层代码、service 层代码,在 Mapper 层中大家还可以根据一定的规则编写方法名称,插件自动根据方法名称在 xml 生成相应的配置。

插件地址:https://www.oschina.net/news/81912/mybatiscodehelper-1-2

本篇主要介绍 Mybatis 的配置,之后会有进阶篇,主要介绍事物、多数据源等等。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 3 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 387 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • vgm

    问个问题,Mybatis 里面怎么处理动态查询的?