文档章节

在Spring Boot中集成Mybatis

老虎是个蛋蛋
 老虎是个蛋蛋
发布于 2017/02/18 11:44
字数 846
阅读 11901
收藏 275

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

© 著作权归作者所有

老虎是个蛋蛋
粉丝 173
博文 31
码字总数 40085
作品 0
朝阳
高级程序员
私信 提问
加载中

评论(37)

qweasdqwee
qweasdqwee
厉害了 受教
老虎是个蛋蛋
老虎是个蛋蛋 博主

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

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

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

楼主,可以转载不

@芝麻绿豆可以的
谢谢

@芝麻绿豆客气了
芝麻绿豆
芝麻绿豆

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

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

楼主,可以转载不

@芝麻绿豆可以的
谢谢
老虎是个蛋蛋
老虎是个蛋蛋 博主

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

楼主,可以转载不

@芝麻绿豆可以的
芝麻绿豆
芝麻绿豆
楼主,可以转载不
lnyu
lnyu

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

引用来自“lnyu”的评论

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

@lnyu我还是比较推荐jpa

回复@老虎是个蛋蛋 : 什么叫你插件jpa, hibernate 是 jpa 唯一实现
MGL_ONE
MGL_ONE
hibernate加试图
老虎是个蛋蛋
老虎是个蛋蛋 博主

引用来自“shellj”的评论

个人更倾向于xml方式,复杂一些的sql在注解里不好写
还是我文章里说的~看自己项目而定
s
shellj
个人更倾向于xml方式,复杂一些的sql在注解里不好写
程进凯
程进凯

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

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

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

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

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

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

所以我更倾向JPA
是的,JPA ++
Mybatis Spring Boot 1.2.2 和 1.3.1 发布

Mybatis Spring Boot 1.2.2 和 1.3.1 已发布,Mybatis Spring Boot 是 MyBatis 和 Spring Boot 的集成。更新如下: mybatis-spring-boot-1.2.2 升级至 Spring Boot 1.4.7.RELEASE #172 升级至......

淡漠悠然
2017/08/21
1K
5
Spring Boot [集成-MyBatis]

导读: 在上篇文章中我们介绍了spring-data-jpa的一些常用方法,在这篇文章中我们在介绍关于mybatis与Spring Boot 的集成,及一些常用方法 集成: 这里有两种方式,一种是常规的Spring 应用的...

yangrd
2018/08/27
0
0
Mybatis Spring Boot

Mybatis Spring Boot 是 MyBatis 和 Spring Boot 的集成。可以幫助你快速在 Spring Boot 項目中集成 MyBatis 。 依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifac......

匿名
2015/11/19
15.4K
4
Mybatis Spring Boot 1.0.1 正式发布

Mybatis Spring Boot 1.0.1 正式发布了。 Mybatis Spring Boot 是 MyBatis 和 Spring Boot 的集成。 下载地址: https://github.com/mybatis/mybatis-spring-boot/archive/mybatis-spring-bo......

淡漠悠然
2016/03/15
3.1K
8
MyBatis Spring Boot 1.3.2 发布,功能增强

MyBatis Spring Boot 1.3.2 发布了。Mybatis Spring Boot 是 MyBatis 和 Spring Boot 的集成。更新如下: 更新至 Spring Boot 1.5.10 #220 更新至 MyBatis 3.4.6 #212 更新至 MyBatis-Spring......

达尔文
2018/03/15
3.1K
3

没有更多内容

加载失败,请刷新页面

加载更多

浅谈prototype原型模式

一、原型模式简介 原型(Prototype)模式是一种对象创建型模式,他采取复制原型对象的方法来创建对象的实例。使用原型模式创建的实例,具有与原型一样的数据。 原型模式的特点: 1、由原型对...

青衣霓裳
30分钟前
8
0
shell mysql 备份

#!/bin/bash time2=$(date "+%Y-%m-%d-%H:%M:%S") /usr/local/mysql/bin/mysqldump -uroot -p ad > /usr/local/mysql/backup/"$time2".sql 变量引用原来是这么用的。......

奋斗的小牛
38分钟前
4
0
Jmeter监控Linux服务器操作

系统:Win7 64位 工具:Jmeter 4.0 要准备好的插件:JMeterPlugins-Standard-1.4.0,ServerAgent-2.2.1 解压JMeterPlugins-Standard-1.4.0.zip,将其中\lib\ext\JMeterPlugins-Standard.jar......

魔鬼妹子
38分钟前
5
0
系列文章:云原生Kubernetes日志落地方案

在Logging这块做了几年,最近1年来越来越多的同学来咨询如何为Kubernetes构建一个日志系统或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经...

Mr_zebra
39分钟前
5
0
入门必备!快速学会用Aspose.Words在表格中插入和删除列!

Aspose.Words For .Net(点击下载)是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft W...

mnrssj
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部