目录
前言
一、Mybatis是什么?
二、Mybatis的优点
三、创建第一个Mybatis项目
配置Mybatis开发环境
创建数据库
添加框架
配置连接字符串和Mybatis
使用Mybatis操作数据库
测试
前言
Spring 集成了 Mybatis 框架,方便我们更加便捷的使用,但是 Mybatis 也可以单独使用,它和 Spring 没有关系。
一、Mybatis是什么?
Mybatis 是一个持久层框架,它支持自定义SQL、存储过程以及高级映射。可以通过简单的xml 或者注解来配置和映射原始类型接口和Java POJO为数据库中的记录。
- JavaPOJO : 普通老式java对象
- 持久层框架就是把是数据保存在硬盘上
简单来说,Mybatis 是简单完成程序和数据库交互的工具,也就是一个数据库工具,让我们更简单的操作和读取数据库。
mybatis主要做了什么?
声明接口 + 实现接口。
声明接口:就是接口用来进行方法的声明。
实现接口:xml或者注释的方式,但是mybatis中的注释比较复杂一点,最开始我们先用xml实现接口的方式。
二、Mybatis的优点
- Mybatis是最简单的持久层框架,小巧且易学。
- 底部集成了JDBC,与传统的JDBC项目相比,大大减少了我们的代码量。
- 提供了xml标签,支持编写动态的SQL语句。
- 通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- Mybatis相当灵活,代买写在xml文件中,大大降低了耦合度,提高了代码复用。
- 提供了映射标签,支持对象与数据库的ORM关系字段映射。
ORM(Object Relational Mapping),即对象关系映射。在⾯向对象编程语⾔中,将关系型数据库中的数据与对象建⽴起映射关系,进⽽⾃动的完成数据与对象的互相转换:
1. 将输⼊数据(即传⼊对象)+SQL 映射成原⽣ SQL
2. 将结果集映射为返回对象,即输出对象
ORM把数据库映射为对象:
- 数据库表(table)--> 类(class)
- 记录(record,⾏数据)--> 对象(object)
- 字段(field) --> 对象的属性(attribute)
⼀般的 ORM 框架,会将数据库模型的每张表都映射为⼀个 Java 类。
三、创建第一个Mybatis项目
Mybatis其实就是一个工具,说是创建第一个Mybatis项目其实不准确,应该是应用Mybatis.
MyBatis 应用只分为两部分:
配置 MyBatis 开发环境;
使⽤ MyBatis 模式和语法操作数据库。
配置Mybatis开发环境
创建数据库
我们要使⽤ MyBatis 的⽅式来读取⽤户表中的所有⽤户,那么首先我们需要创建我们的数据库。
-- 创建数据库
drop database if exists mybatis_sql;
create database mybatis_sql DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
use mybatis_sql;
-- 创建表[⽤户表]
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 ` mybatis_sql`.`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)
;
以上语句在SQL工具上进行执行,查询表中数据结果如下即插入成功,进行下一步:
添加框架
接下来就是我们的java程序的部分的操作了,要使用Mybatis,就要给我们的项目加上Mybatis框架支持,那么有san种方式。
第一种呢就是创建一个新的项目,创建的时候选中Mybatis框架:创建一个spring项目(这里如果有问题可以看这篇文章:http://t.csdn.cn/8IJTu),在项目创建的时候加上 Mybatis 框架支持:
第二种就是升级我们的一个原有项目,也就是在我们已有的项目上添加Mybatis框架,那么简单的操作⽅式就是使⽤EditStarters插件:
插件的使用:在我们的配置文件界面直接右击,选择生成,选择我们刚才安装的插件,进行框架的添加选择。
第三种就是直接引入依赖到 pom 文件中。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>2.3.1</version>
<scope>test</scope>
</dependency>
配置连接字符串和Mybatis
配置连接字符串:在application.yml文件中写入一下代码:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_sql?characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
url改为自己用的:端口号和数据库名
Mybatis由两部分,一个是接口一个是实现,实现由两种方法:xml或者注释,注释比xml复
杂,在这里我们采用xml的方式实现,mybatis是基于spring实现的,那么spring要应用mybatis就要进行扫描我们的实现,我们要配置路径告诉spring要扫描哪里。
配置mybatis xml的文件路径,在刚才配置数据库的文件直接配置。
#配置 mybatis xml 的文件路径,在resources/mapper下创建所有表对的 xml 文件
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml
我们扫描路径为上述,那么要在对应目录下(classpath指的是resources)建一个文件夹mapper,里边的文件明明格式都为**Mapper.xml.
那么目前为止,Mybatis开发环境配置完成,接下来我们使用Mybatis模式和语法操作数据库。
使用Mybatis操作数据库
刚才开发环境的配置中,我们配置了xml文件进行实现,实现什么呢?
就是实现我们的java接口,那么接口是是干什么呢?接口是用来实现方法的声明。那么现在我们要创建实现的接口。(建议:接口统一放在mapper包下,和配置中的mapper对应)
创建mapper接口:@Mapper是Mybatis的注解
import com.example.springmybatisdemo.model.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> userAll();
}
接口要查询我们数据库的所有用户的信息,那么首先我们要有对象,那么我们现在创建一个对象(也就是类)。
创建user类,里边的属性和数据库中表的字段相对应。
import lombok.Data;
import java.util.Date;
@Data
public class User {
private Integer id;
private String username;
private String password;
private String photo;
private Date createtime;
private Date updatetime;
}
接口写完,写实现,xml的方式实现,在我们的配置文件的mapper包下新建一个xml文件。
数据持久层的实现,xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springmybatisdemo.mapper.UserMapper">
<select id="userAll" resultType="com.example.springmybatisdemo.model.User">
select * from userinfo;
</select>
</mapper>
现在我们就完成了,然后我们进行测试一下:
测试
我们要自测一下是否可以成功查询,也就是单元测试。来到我们要测试的接口页面,接口UserMapper界面:
来到这个界面:
会自动给我们生成测试的代码,一般我们不用改,给要测试的成员打上对勾就好了。
给生成的代码加上注解@SpringBootTest,表示要加载Springboot测试的环境,因为我们是在spring环境下进行的开发。接下来,将我们要测试的方法(类)注入进测试方法。
import com.example.springmybatisdemo.model.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@Slf4j
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void userAll() {
List<User> users=userMapper.userAll();
log.info(users.toString());
}
}
然后直接运行,进行测试,测试成功结果如图:
若是有错,最先检查一下自己的数据库密码名称,数据库名、表名是否对应。
这下我们 Mybatis 的第一个代码就写完了,下次再见~