Spring学习-MyBatis及项目实战

一.MySQL准备

这里先做一些准备,让 Java 后台能够连接到 MySQL 数据库上。

1.创建数据库

方法1:通过 MySQL 官方自带的 MySQLWorkbench 来创建新 MySQL Schema

方法2:通过 DDL SQL的方式创建新 MySQL Schema

CREATE SCHEMA `test_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

2.创建数据表

方法1:通过 MySQL 官方自带的 MySQLWorkbench 来创建新 MySQL Table

方法2:通过 DDL SQL 的方式创建新 MySQL Table

CREATE TABLE `user` (
    `id` bigint(64) NOT NULL AUTO_INCREMENT,
    `name` varchar(20) DEFAULT NULL,
    `birthday` datetime NOT NULL,
    `gender` tinyint(1) DEFAULT NULL,
    PRIMARY KEY(`id`),
    UNIQUE KEY `UK_NAME` (`name`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

3.连接JDBC

DB 部分配置好了之后,接下来我们在 SpringBoot 的配置文件中通过 JDBC 和 MySQL连接起来

Step1:在 Maven 中引入 MySQL JDBC

Step2:配置 DB 连接属性

另外还引入了 lombok 库,便于在编写 Java 模型的时候通过 @Data 注解省略冗长的 getter 和 setter 等代码

 

 注意:默认情况下,@Data 是不会调用父类的 toString(),equals(),hashCode()方法的,需要手动添加对应的注解并设置 callSuper = true。

二.JdbcTemplate相关使用

1.简单的对象查询

2.简单的对象创建

3.简单的对象更新

4.简单的对象删除

三.Spring MyBatis 架构

四.环境预备

1. 为了便于更好的开发体验,建议在 IDEA 中添加 MyBatis 的相关插件

Step1:打开 IDEA 配置,在 Plugins 标签下面搜索

Step2:安装一款比较顺序的 MyBatis 插件(top 3 功能差不多),具体可以查看功能说明

根据 user 表和 UserDO 的结构补齐 xml 中的基础部分

2.在 application.properties 文件增加 MyBatis 相关配置

  • mapper-locations:自动扫描 SQL Mapper 文件的路径
  • log-impl:默认的日志输出,便于后续 Debug 生成的 SQL 语句(这里配置输出到控制台,便于学习用)

3.接下来到了 MyBatis 的重点:XML 风格的 SQL 语句编写

五.MyBatis - 查询对象

1.编写单对象查询语句

2.插件功能:在 Java Mapper 和 XML Mapper 之间关联校验和快速跳转

3.同时补齐其他相关的层的相关代码,通过三层架构来透出我们从 DB 中查到数据

4.启动服务,通过浏览器访问接口

六.MyBatis - 创建对象

1.编写单对象创建逻辑

在 Mapper XML 中加入 insert 节点

2.同时补齐其他相关的层的相关代码,通过三层架构来实现从 API 到 DB 的逻辑落地

3.为了测试创建对象的接口,通过浏览器便于创建 POST 请求体,这里介绍两种新的方案

方案一:在后台系统集成 Swagger 框架

集成 Swagger - Spring Starter 方法集成

集成 Swagger - 启动项

方案二:使用 Postman

安装方式

  • 通过 Chrome 插件进行安装
  • 独立安装(推荐)

安装完成之后打开 Postman 界面,通过手工填入 Post 的地址,请求体等并发送请求来测试服务

4.为了让整个创建逻辑更加符合实际业务需求,我们需要使用 MyBatis 的 useGeneratedKeys 功能

通过 Postman 测试返回的自增 ID 值

  • 插入后,我们返回了创建时传入的 UserDO 对象的 id
  • 通过返回值验证,我们可以获得插入的对象的 id 雀食是 DB 中的自增 ID
  • 在控制台中可以看到我们生成的事务,SQL 和参数情况 

七.MyBatis - 更新对象 

1.编写单对象更新的逻辑

2.编写单对象更新的逻辑

3.同时补齐其他相关的层的相关代码,通过三层架构来实现从 API 到 DB 的逻辑落地

 

4.通过接口测试

八.MyBatis - 删除对象

1.正常的业务使用 DB 的删除操作是很少的,一般会使用“软删除”,即不实际删除数据,而是通过字段标记为“已删除”,从而避免数据损失。接下来就通过改造的方法让 User 支持软删除。

2.支持软删除

3.软删除还需要针对查询和更新进行修改,避免查出或者更新已删除的对象

九.MyBatis - 综合项目实战

前面我们将讲完了 MyBatis 的单对象操作,接下来进行综合实战,来实现 MyBatis 的一些进阶批量对象操作。

1.相关功能介绍

批量查询(搜索):在实际的业务系统中,涉及到批量查询的都离不开如下功能:

  • 过滤:按照指定的查询条件(关键字,日期,状态,类型等)过滤出目标列表
  • 分页:按照指定的页面和每页对象数量截取全列表的一部分
  • 排序:按照指定的(多个)字段和排序方向展示对象列表

我们可以用如下 SQL 示例表示:

2.批量查询(搜索)模型:构建请求体和返回题(简化版)

3.批量查询(搜索)模型:请求体子节点

4.批量查询(搜索)服务

4.1 调整 UserMapper.java,新增两个查询方法

4.2 在 UserMapper.xml 增加 countAll 查询

  • 针对大小判断的条件,需要通过 XML 的CDATA 标签来避免大小于符号的转义
  • foreach 节点是 MyBatis 提供的循环输出的辅助方法,可以将集合循环输出为 SQL 语句
  • #{param}是安全传参,没有 SQL 注入等安全问题,${param}是字符串拼接,存在安全问题,能用 #{param}就不要使用 ${param},除非在某些情况下不生效

 

4.3 在 UserMapper.xml 增加 searchAll 查询

  • 相比 countAll,searchAll 需要增加对排序和分页条件的处理,分别对应的 SQL 为 limit 和 order by 子句
  • order by 子句不能使用 #{} 进行安全传参,limit 可以使用 #{} 进行安全传参
  • order by 子句中的参数需要在后台经过安全检查,不能直接使用前端的传参,否则可能存在注入风险

 

5.同时补齐其他相关的层的相关代码,通过三层架构来实现从 API 到 DB 的逻辑落地

6.批量查询(搜索)测试:通过 Postman 进行测试

 

 本文章整理自上课PPT,仅供学习使用


版权声明:本文为qq_48772498原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。