10. Mybatis 项目的创建

目录

[1. Mybatis 概念](#1. Mybatis 概念)

[2. 第一个 Mybits 查询](#2. 第一个 Mybits 查询)

[2.1 创建数据库和表](#2.1 创建数据库和表)

[2.2 添加 Mybatis 框架支持](#2.2 添加 Mybatis 框架支持)

[2.3 添加配置文件](#2.3 添加配置文件)

[2.4 配置 MyBatis 中的 XML 路径](#2.4 配置 MyBatis 中的 XML 路径)

[2.5 添加业务代码](#2.5 添加业务代码)


在学习 Mybatis 之前,我们需要知道Mybatis 和 Spring 没有任何的关系。如果一定要强调二者之间的关系的话,那就是 Spring 集成了 Mybatis 框架,使开发更加简单。

也就是说 Mybatis 可以脱离 Spring 使用。

1. Mybatis 概念

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

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

对于后端开发来说,程序是由以下两个重要的部分组成的:

  1. 后端程序
  2. 数据库

而这两个重要的组成部分要依靠数据库连接工具,我们先来回忆一下 JDBC 的操作流程:

  1. 创建数据库连接池 DataSource
  2. 通过 DataSource 获取数据库连接 Connection
  3. 编写要执行带 ? 占位符的 SQL 语句
  4. 通过 Connection 及 SQL 创建操作命令对象 Statement
  5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值
  6. 使用 Statement 执行 SQL 语句
  7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量
  8. 处理结果集
  9. 释放资源

那么,Mybatis 就是用来简化上述操作的,具体通过以下两部分来完成:

  • 配置 MyBatis 开发环境;
  • 使用 MyBatis 模式和语法操作数据库。

2. 第一个 Mybits 查询

我们先来看一下 Mybits 在整个框架的定位:

2.1 创建数据库和表

接下来我们要实现的功能是:使用 MyBatis 的方式来读取用户表中的所有用户,我们使用个人博 客的数据库和数据包,具体 SQL 如下:

sql 复制代码
-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
use mycnblog;
-- 创建表[⽤户表]
drop table if exists userinfo;
create table userinfo(
 id int primary key auto_increment,
 username varchar(100) not null,
 password varchar(32) not null,
 photo varchar(500) default '',
 createtime datetime default now(),
 updatetime datetime default now(),
 `state` int default 1
) default charset 'utf8mb4';
-- 添加⼀个⽤户信息
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1)
;

2.2 添加 Mybatis 框架支持

接下来通过安装插件的方式:

插件的使用方法:

同样可以选择需要的依赖:

还可以安装如下图所示的插件,方便数据库相关的信息提示:

2.3 添加配置文件

java 复制代码
spring:
  datasource:
   url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
   username: root
   password: root
   driver-class-name: com.mysql.cj.jdbc.Driver

2.4 配置 MyBatis 中的 XML 路径

java 复制代码
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

2.5 添加业务代码

用户的实体类:

java 复制代码
@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String photo;
    private Date createtime;
    private Date updatetime;
}

添加 mapper 接口:

java 复制代码
@Mapper
public interface UserMapper {
    public List<User> queryAll();
}

新建 mapper 文件夹:

添加 UserMapper.xml 文件:

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.example.demo.mapper.UserMapper">

</mapper>

UserMapper.xml 查询所有用户的具体实现 SQL:

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.example.demo.mapper.UserMapper">
    <select id="queryAll" resultType="com.example.demo.model.User">
        select * from userinfo
    </select>

</mapper>

id 表示的就是实现接口里的哪个方法。 resulttype 表示的是返回结果的对象的类型,而不是返回结果的类型(queryAll 返回结果的类型是 List)。

接下来进行自测(单元测试):

接下来在生成的测试方法中加上注解:

编写完整的测试代码如下:

java 复制代码
@Slf4j
@SpringBootTest
class UserMapperTest {

    @Autowired
    private UserMapper userMapper;
    @Test
    void queryAll() {
        List<User> users = userMapper.queryAll();
        log.info(users.toString());
    }
}

可以看到,运行后成功的将数据显示:

相关推荐
zjjsctcdl几秒前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
会算数的⑨2 分钟前
Spring AI Alibaba 学习(四):ToolCalling —— 从LLM到Agent的华丽蜕变
java·开发语言·人工智能·后端·学习·saa·ai agent
一直都在5725 分钟前
Java线程池
java·开发语言
亚马逊云开发者13 分钟前
article
java·开发语言
云烟成雨TD16 分钟前
Spring AI 1.x 系列【11】基于 PromptTemplate 构建一站式 AI 写作助手
java·人工智能·spring
蓝黑202019 分钟前
SQL的update语句更新顺序的坑
数据库·sql·mysql
小旭952721 分钟前
Spring 纯注解配置与 SpringBoot 入门详解
java·开发语言·spring boot·后端·spring
ADRU22 分钟前
SSE 到底是什么?它和 HTTP 有什么关系?Java/Spring 怎么实现流式输出(可直接上手)
java·spring·http
de_wizard23 分钟前
Spring Boot 整合 Keycloak
java·spring boot·后端
Re_zero26 分钟前
throws 还是 try-catch?Code Review 里被我打回最多的异常处理
java·代码规范