【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);
目录
相关文章
|
1月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
288 4
|
7月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
346 0
|
3月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
4月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
726 1
Spring boot 使用mybatis generator 自动生成代码插件
|
4月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
181 1
|
3月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
126 0
|
3月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
326 0
|
4月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
180 1
|
9月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
423 29
|
7月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
596 0