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());
    }
}

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

相关推荐
摇滚侠1 分钟前
面试实战 问题三十四 对称加密 和 非对称加密 spring 拦截器 spring 过滤器
java·spring·面试
xqqxqxxq2 分钟前
Java 集合框架之线性表(List)实现技术笔记
java·笔记·python
L0CK10 分钟前
RESTful风格解析
java
程序员小假19 分钟前
我们来说说 ThreadLocal 的原理,使用场景及内存泄漏问题
java·后端
何中应22 分钟前
LinkedHashMap使用
java·后端·缓存
tryxr29 分钟前
Java 多线程标志位的使用
java·开发语言·volatile·内存可见性·标志位
talenteddriver35 分钟前
java: Java8以后hashmap扩容后根据高位确定元素新位置
java·算法·哈希算法
云泽80837 分钟前
STL容器性能探秘:stack、queue、deque的实现与CPU缓存命中率优化
java·c++·缓存
yyy(十一月限定版)43 分钟前
c语言——栈和队列
java·开发语言·数据结构
本地运行没问题1 小时前
基于Java注解、反射与动态代理:打造简易ORM框架
java