【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);
目录
相关文章
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第六章(操作本地数据库前置知识优化)
【4月更文挑战第6天】本文介绍了Node.js操作本地数据库的前置配置和优化,包括处理接口跨域的CORS中间件,以及解析请求数据的body-parser、cookie-parser和multer。还讲解了与MySQL数据库交互的两种方式:`createPool`(适用于高并发,通过连接池管理连接)和`createConnection`(适用于低负载)。
19 0
|
1月前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
16 0
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
42 1
|
1月前
|
druid Java 数据库连接
Spring Boot3整合MyBatis Plus
Spring Boot3整合MyBatis Plus
45 1
|
1天前
|
算法 数据库
Mybatis-Plus实现常规增删改操作
Mybatis-Plus实现常规增删改操作
|
4天前
|
SQL Java 数据库连接
Javaweb之Mybatis的基础操作之新增和更新操作的详细解析
Javaweb之Mybatis的基础操作之新增和更新操作的详细解析
10 0
|
17天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
30天前
|
敏捷开发 监控 前端开发
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
71 0
|
1月前
|
Java Windows Perl
mybatis+spring报错PropertyAccessException 1: org.springframework.beans.MethodInvocationException
mybatis+spring报错PropertyAccessException 1: org.springframework.beans.MethodInvocationException
12 0
|
1月前
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
12 0