【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);
目录
相关文章
|
2月前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
306 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
1月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
60 4
|
1月前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
67 3
|
2月前
|
Java 关系型数据库 数据库连接
使用 Spring Boot 执行数据库操作:全面指南
使用 Spring Boot 执行数据库操作:全面指南
152 1
|
2月前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
42 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
2月前
|
Java 数据库连接 数据库
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
35 1
|
2月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
3月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
353 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
3月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
208 1
|
3月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务提示:使用环境变量抽象数据库主机名
Spring 微服务提示:使用环境变量抽象数据库主机名
50 1