Spring Boot集成MyBatis指南

引言

Spring Boot+MyBatis依然是当下国内最流行和使用最广泛的框架,让我们从基础部分来重新学习下这套经典组合吧。

什么是MyBatis

MyBatis是一款优秀的持久层框架,它支持自定义SQL存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis配置简单,使用方便灵活,下面我们就来看一下Spring Boot如何轻松集成MyBatis的吧!

引入依赖

本文使用的Spring Boot版本为2.7.4,这里可以通过Maven或者Gradle来引入依赖

Maven

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

Gradle

dependencies {
  compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2")
}

版本适配情况

在这里插入图片描述
因为使用的MySQL数据库,还需要引入以下依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

如需要了解MySQL的安装过程,可以查看我的另外一篇文章:CentOS8安装MySQL8详细教程,爬坑必备,希望可以帮到你。

应用配置

设置数据源以及MyBatis的基础配置

# 数据源配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/dbname
    username: someuser
    password: yourpassword

mybatis:
  # Mapper.xml文件的路径配置
  mapper-locations: classpath*:/mapper/**/*.xml
  configuration:
    map-underscore-to-camel-case: true

Spring数据源配置

配置数据库连接URL以及用户名密码

MyBatis mapper-locations

配置Mapper.xml文件的存放位置,一般放在resources下的mapper文件夹下(Mapper.java和Mapper.xml一般是要一一对应的,名称最好保持一致),如果未设置的话,会出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的异常

MyBatis map-underscore-to-camel-case

开启带有下划线的表字段与驼峰命名的Java实体字段自动映射的功能

编写代码

我们先来创建一个user表

create table user
(
    id   bigint auto_increment
        primary key,
    name varchar(64) null
);

创建实体类

建好表以后,我们来创建User的实体类

public class User {

    private Long id;

    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "id: " + getId() + ", name: " + name;
    }
}

创建Mapper接口

下面我们来创建MyBatis中最重要的Mapper接口,真正操作数据库的方法就在这里定义。下面这段代码简单定义了插入数据和查询数据的方法

@Mapper
public interface UserMapper {

    void insert(User user);

    List<User> select();

}

UserMapper使用了@Mapper注解,用来标记这是一个MyBatis的Mapper接口

创建Mapper XML

Mapper接口已经定义了,那我们具体要怎么实现呢?Mapper.xml就是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.mybatis.UserMapper">

    <insert id="insert" >
        insert into user(name)
        values (#{name})
    </insert>

    <select id="select" resultType="com.example.mybatis.User">
        select * from user
    </select>

</mapper>

我们来分析下上面的这段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">

这是XML的文档声明和DTD文档类型定义,http://mybatis.org/dtd/mybatis-3-mapper.dtd文件中定义了XML的标签、属性以及描述等信息,我们这里不过多关注。

mapper标签

<mapper namespace="com.example.mybatis.UserMapper">

这个标签是用来跟Mapper接口建立关联的,它只有一个属性namespace,用来指定相应Mapper接口的引用Reference。这里如果配置的引用路径不正确,也会出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的异常。

insert标签

<insert id="insert" >
    insert into user(name)
    values (#{name})
</insert>

表示一个insert语句,其中id属性是该标签的唯一标识符,对应Mapper接口中定义的具有相同名称的方法,这个例子中就对应UserMapper接口中insert(User.class)方法
#{name}表示获取传入对象中name属性值

select标签

<select id="select" resultType="com.example.mybatis.User">
    select * from user
</select>

表示一个select语句,id属性与insert标签的id属性一样
resultType属性定义了查询结果要映射的实体类型

Mapper.xml就相当于是Mapper接口的实现类,mapper标签通过namespace属性与Mapper接口进行映射,mapper下的insert、select等子标签对应的就是Mapper接口的方法,子标签中的id属性值与方法名要
一致。

测试代码

我们创建一个UserTest的测试类

@SpringBootTest
public class UserTest {

    @Autowired
    UserMapper userMapper;

    @Test
    void testInsert() {
        User user = new User();
        user.setName("Spring");
        userMapper.insert(user);
        System.out.println("Insert success.");
    }

    @Test
    void testSelect() {
        List<User> userList = userMapper.select();
        System.out.println("Select success: " + userList);
    }

}

我们先来测试insert方法,如下图点击测试方法左上角的按钮进行测试
在这里插入图片描述

测试成功会输出如下内容
在这里插入图片描述

这时我们使用DataGrip或者Navicat去连接数据库,查看数据是否插入成功:
在这里插入图片描述

OK,我们再来测试查询的方法,点击运行,输出如下
在这里插入图片描述
至此,简单的新增和查询功能就编写与测试完成了。更新和删除这里就不做介绍了,实现起来一样简单优雅。

效率插件

如果你使用的是Intellij IDEA,这里推荐一款插件,可以提高MyBatis的开发效率——MyBtisX
插件主要功能:

  • Mapper的接口和XML之间快速跳转
  • 代码提示与检查
  • 代码生成器

快速跳转

在IDEA的插件市场里搜索安装后,你会发现Mapper接口和Mapper.xml文件发生了变化:
在这里插入图片描述
在这里插入图片描述
左侧多出了几个小图标,点击图标或者Ctrl + Alt + 鼠标左键点击方法就可以跳转到Mapper.xml中对应标签上。

代码提示与检查

如果你在IDEA#Database中配置了当前项目使用的数据库,那么在XML中编写SQL语句就会像在DataGrip或Navicat中一样,智能提示,非常方便
在这里插入图片描述
在这里插入图片描述
假如在XML中我们故意将标签下的namespace属性值的包名写错,如下
在这里插入图片描述
这时属性值会变红并有错误提示,跟写Java代码是一样的,这样可以快速发现错误。

代码生成器

在IDEA#Database中找到你要生成代码的表,右键点击会弹出如下提示
在这里插入图片描述
点击进入生成器配置页面
在这里插入图片描述
点击选择module path,将base package配置为我们的包名com.example.mybatis,然后点击【Next】按钮,进入下面这个页面
在这里插入图片描述
可以根据个人需要进行调整,最后点击【Finish】就可以生成代码了。

本文介绍了Spring Boot如何集成MyBatis以及简单使用的过程,后面还会陆续推出一系列MyBatis的进阶课程,这里你可以学到关于MyBatis的一切,有问题可以在评论区交流下,欢迎点赞关注收藏。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BruceLuX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值