在Spring Boot中集成Mybatis

原创
2017/02/18 11:44
阅读数 2.5W

    之前我们讲过在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<User> 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的配置,之后会有进阶篇,主要介绍事物、多数据源等等。

展开阅读全文
打赏
5
276 收藏
分享
加载中
厉害了 受教
2018/04/23 14:21
回复
举报

引用来自“芝麻绿豆”的评论

引用来自“老虎是个蛋蛋”的评论

引用来自“芝麻绿豆”的评论

楼主,可以转载不

@芝麻绿豆可以的
谢谢

@芝麻绿豆客气了
2017/02/25 17:53
回复
举报

引用来自“老虎是个蛋蛋”的评论

引用来自“芝麻绿豆”的评论

楼主,可以转载不

@芝麻绿豆可以的
谢谢
2017/02/25 17:37
回复
举报

引用来自“芝麻绿豆”的评论

楼主,可以转载不

@芝麻绿豆可以的
2017/02/25 17:19
回复
举报
楼主,可以转载不
2017/02/25 17:18
回复
举报

引用来自“老虎是个蛋蛋”的评论

引用来自“lnyu”的评论

还是用 hibernate 吧,要自己写 sql 不累么~~

@lnyu我还是比较推荐jpa

回复@老虎是个蛋蛋 : 什么叫你插件jpa, hibernate 是 jpa 唯一实现
2017/02/25 15:06
回复
举报
hibernate加试图
2017/02/24 19:43
回复
举报

引用来自“shellj”的评论

个人更倾向于xml方式,复杂一些的sql在注解里不好写
还是我文章里说的~看自己项目而定
2017/02/24 16:46
回复
举报
个人更倾向于xml方式,复杂一些的sql在注解里不好写
2017/02/24 16:17
回复
举报

引用来自“天下灯火”的评论

引用来自“老虎是个蛋蛋”的评论

引用来自“天下灯火”的评论

传统ORM是不是在工作量上会更小一点
在使用springboot的时候我更倾向于JPA的,毕竟每个项目的情况不一样,所以我才写了一篇整合Mybatis的,不过第二中基于注解的方式还是挺简单的,也比较符合springboot零配置的理念。

回复@老虎是个蛋蛋 : 不过感觉配置文件虽然没了,但是工作量其实也没怎么下降。哈

引用来自“老虎是个蛋蛋”的评论

所以我更倾向JPA
是的,JPA ++
2017/02/24 14:50
回复
举报
更多评论
打赏
37 评论
276 收藏
5
分享
返回顶部
顶部