【Spring】使用 MyBatis 操作数据库

简介: 1. MyBatis 是什么2. 为什么要使用 MyBatis3. MyBatis 框架交互流程4. 配合 Spring 来使用 MyBatis4.1 添加 MyBatis 框架支持4.2 配置数据库4.3 添加实体类4.4 添加 mapper 接口4.5 通过注解的方式操作数据库4.5.1 增加用户4.5.2 删除用户4.5.3 修改用户数据4.5.4 查询用户数据4.6 通过 XML 文件的形式操作数据库4.6.1 配置 XML 文件4.6.2 在 yml 中配置 xml 路径4.6.3 查询用户数据4.6.4 批量查询用户数据4.6.5 批量插入用户数

1. MyBatis 是什么

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。


简单来说 MyBatis 是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库工具。


2. 为什么要使用 MyBatis

对数据库的操作是后端开发中非常重要的一部分,之前已经学习过使用 JDBC 来操作数据库,那为什么还要学习 MyBatis


因为 JDBC 的操作太繁琐了,对于 JDBC 来说,整个操作非常的繁琐,我们不但要拼接每一个参数,而且还要按照模板代码的方式,一 步步的操作数据库,并且在每次操作完,还要手动关闭连接等,而所有的这些操作步骤都需要在每个方法中重复书写。


这就是学习 MyBatis 的真正原因,它可以帮助我们更方便、更快捷的操作数据库

3. MyBatis 框架交互流程

20.png

4. 配合 Spring 来使用 MyBatis
MyBatis 的使用有两种方式:


通过注解使用(相对较容易,好上手,但是做一些复杂操作时不太灵活)

通过 XML 配置文件的形式(比较规则,缺点就是 XML 一大堆,出错不容易排查)

4.1 添加 MyBatis 框架支持

在创建 Spring 项目是勾选以下依赖即可添加成功,导入 Spring Data JDBC 和 MySQL Driver 只是为了将 DataSource 对象注册到 Spring 中,真正导入 MyBatis 的是 MyBatis Framework


21.png

项目创建成功后在 XML 文件中多出了以下内容,也可在老项目的 XML 文件中直接添加以下内容来引入 MyBatis


22.png

4.2 配置数据库

在 yml 文件中添加以下内容

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/<库名>?useSSL=false&characterEncoding=utf8&serverTimeZone=Asia/Shanghai
    username: root
    password: root

4.3 添加实体类

import lombok.Data;
@Data
public class UserDO {
    Integer uid;
    String username;
    String password;
}

4.4 添加 mapper 接口

@Repository
// 通过 @Mapper 注解让 mybatis 将这个接口看出一个 Mapper,并且使用代理对象代理它
@Mapper
// 经常按照 Mybatis 的习惯,称为 UserMapper
public interface UserMapper {
}

4.5 通过注解的方式操作数据库

MyBatis 中操作数据库的注解主要有:


@Insert() :插入

@Delete() :删除

@Update() :更改

@Select() :查询

将实际的 SQL 代码写入注解后面的括号中即可


这里没有添加 Controller 类和 Service 类,实际开发中需要 Controller 类调用 Service 类对数据进行处理,再调用接口中的方法来操作数据库


以下所有代码全写在 UserMapper 接口中


4.5.1 增加用户

当增加操作需要得到自增 id 时,可以用 @Options(useGeneratedKeys = true, keyColumn = “uid”, keyProperty = “uid”) 来修饰方法以得到自增 id


useGeneratedKeys:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。

keyColumn:设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。 如果生成列不止一个,可以用逗号分隔多个属性名称。

keyProperty:指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它 的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。


@Insert("insert into users (username, password) values (#{username}, #{password})")
@Options(useGeneratedKeys = true, keyColumn = "uid", keyProperty = "uid")
void insert1(UserDO userDO);

4.5.2 删除用户

@Delete("delete from users where uid = #{uid}")
int delete1(@Param("uid") int uid);

4.5.3 修改用户数据

@Update("update users set username = #{username}, password = #{password} where uid = #{uid}")
int update1(UserDO userDO);

4.5.4 查询用户数据

@Select("select uid, username, password from users where uid = #{uid}")
UserDO select1(@Param("uid") int uid);

4.6 通过 XML 文件的形式操作数据库

4.6.1 配置 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.hsq.mybatis_xml.UserMapper">
    <resultMap id="xxx" type="com.hsq.mybatis_xml.User">
        <id property="uid" javaType="Integer" column="uid" jdbcType="INTEGER" />
        <result property="username" javaType="String" column="username" jdbcType="VARCHAR" />
        <result property="password" column="password" />
    </resultMap>
</mapper>

4.6.3 查询用户数据

<!-- xml 中写入 -->
<select id="selectOneByUid" resultMap="xxx" parameterType="int">
    select uid, username, password from users where uid = #{uid}
</select>
// UserMapper 中写入
User selectOneByUid(@Param("uid") int uid);

4.6.4 批量查询用户数据

<!-- xml 中写入 -->
<select id="selectListByUidList" resultMap="xxx" parameterType="List">
    select uid, username, password from users where uid in (
    <foreach collection="uidList" item="id" separator=", ">
        #{id}
    </foreach>
    ) order by uid
</select>
// UserMapper 中写入
List<User> selectListByUidList(@Param("uidList") List<Integer> uidList);

4.6.5 批量插入用户数据

<!-- xml 中写入 -->
<insert id="insertBatch" useGeneratedKeys="true" keyProperty="a" keyColumn="uid">
    insert into users (username, password) values
    <foreach collection="userList" item="user" separator=", ">
        (#{user.b}, #{user.c})
    </foreach>
</insert>
// UserMapper 中写入
int insertBatch(@Param("userList") List<User> userList);
目录
相关文章
|
6天前
|
SQL Java 数据库连接
SpringBoot整合Mybatis
SpringBoot整合Mybatis
34 2
|
3天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之采集oracle的时候报ORA-65040:不允许从可插入数据库内部执行该操作如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
22 3
|
4天前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
|
6天前
|
存储 数据处理 数据库
深入了解达梦数据库的增删查改操作:从入门到精通
深入了解达梦数据库的增删查改操作:从入门到精通
|
6天前
|
Java 数据库连接 Spring
Spring 整合mybatis
Spring 整合mybatis
21 2
|
5天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之当 SQL Server 源数据库中的数据更新后,CDC 吐出的操作(op)是怎样的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
15 0
|
6天前
|
SQL Java 数据库连接
【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL(下)
【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态
6 0
|
6天前
|
SQL Java 数据库连接
【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL(上)
【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL
5 0
|
6天前
|
SQL Java 数据库连接
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作(下)
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作
8 0
|
6天前
|
SQL 前端开发 Java
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作(上)
【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作
8 0