文章目录
- 一. MyBatis简介
- 二. MyBatis 使用
- 1. 数据库和数据表的创建
- 2. 创建Mybatis项目
- 2.1 添加MyBatis框架支持
- 2.2 设置MyBatis配置信息
- 3. MyBatis开发流程
- 4. MyBatis查询数据库测试
- 三. MyBatis 流程
- 1. MyBatis 查询数据库流程
- 2. MyBatis 框架交互流程图
一. MyBatis简介
MyBatis是一种开源的持久层框架,它可以与Java程序一起使用,用于简化数据库操作。MyBatis提供了一个简单且灵活的方式来将Java对象映射到关系型数据库中的数据表。
MyBatis的主要目标是通过将SQL查询与Java代码的解耦来简化数据库访问,并提供了丰富的映射功能和灵活的查询选项。使用MyBatis,您可以将数据库操作定义为XML文件或注解的形式,然后根据需要执行这些操作。
总之,MyBatis是一个轻量级且功能强大的持久层框架,适用于需要灵活控制SQL和数据库访问的Java应用程序。它提供了一种简单且可定制的方式来进行数据库操作,使开发人员能够更容易地与数据库交互。
MyBatis官网
二. MyBatis 使用
MyBatis
的使用分为两部分,分别为:
MyBatis
开发环境的配置- 使用
MyBatis
模式和语法操作数据库。
1. 数据库和数据表的创建
首先我们来创建一个数据库三张表(用户表,文章表,视频表):
将以下代码复制到MySQL5.7
中:
-- 创建数据库
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 timestamp default current_timestamp,
updatetime timestamp default current_timestamp,
`state` int default 1
) default charset 'utf8mb4';
-- 创建文章表
drop table if exists articleinfo;
create table articleinfo(
id int primary key auto_increment,
title varchar(100) not null,
content text not null,
createtime timestamp default current_timestamp,
updatetime timestamp default current_timestamp,
uid int not null,
rcount int not null default 1,
`state` int default 1
)default charset 'utf8mb4';
-- 创建视频表
drop table if exists videoinfo;
create table videoinfo(
vid int primary key,
`title` varchar(250),
`url` varchar(1000),
createtime timestamp default current_timestamp,
updatetime timestamp default current_timestamp,
uid int
)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);
-- 文章添加测试数据
insert into articleinfo(title,content,uid)
values('Java','Java正文',1);
-- 添加视频
insert into videoinfo(vid,title,url,uid) values(1,'java title','http://www.baidu.com',1);
即为创建完毕.
2. 创建Mybatis项目
添加MyBatis框架支持分为两种情况,一种情况是对自己之前的 Spring 项目进行升级,另一种情况是创建一个全新的 MyBatis
和 Spring Boo
t的项目.两者的区别是创建一个全新的 MyBatis项目时直接使用依赖(下面的演示为直接使用依赖),另一个方法是使用插件来引入依赖.(此处不做介绍)
2.1 添加MyBatis框架支持
注意此处使用2.x.x
版本的.
添加完依赖后,重新reload
:
然后删除不使用的文件:
2.2 设置MyBatis配置信息
(1)设置数据库连接的相关信息
在配置文件中添加以下配置:
```yml
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
username: root
password: '0828'
driver-class-name: com.mysql.cj.jdbc.Driver
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/12a6648ef79840d98301c99249965d88.png)
注意说明:如果使用的`mysql-connector-java`是 `5.x` 版本之前,`driver-class-name`的参数值应设置为`com.mysql.jdbc.Driver`,如果版本大于`5.x`,`driver-class-name`的参数值应设置为`com.mysql.cj.jdbc.Driver`。
(2)MyBatis xml保存路径和xml命名模式
设置`MyBatis xml`保存路径,xml 文件中保存是对数据库的具体操作SQL,配置如下:
```yml
#设置MyBatis保存路径
mybatis:
mapper-locations: classpath:mybatis/*Mapper.xml
```
(3)启动MyBatis项目:
在设置好MyBatis配置信息后,运行启动MyBatis项目,观察能否成功运行,如果项目成功运行,说明配置成功。
![在这里插入图片描述](https://img-blog.csdnimg.cn/4fa58691bfb444d984a6c900af92fc69.png)
3. MyBatis开发流程
(1)根据xml保存路径创建包
(2)添加实体类对象
在 Java 目录下创建一个实体类包用来存放各种实体类,其中就包含UserEntity
实体类。
package com.example.demo.entity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class UserEntity {
private Integer id;
private String username;
private String password;
private String photo;
private LocalDateTime createtime;
private LocalDateTime updatetime;
private Integer state;
}
(3)数据库持久层UserMapper接口定义代码
package com.example.demo.mapper;
import com.example.demo.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<UserEntity> getAll();
}
注意说明:创建好UserMapper
类后立即在类上添加@Mapper
注解,该注解源自org.apache.ibatis.annotations.Mapper
。
@Mapper注解是MyBatis框架中的一个注解,用于标识一个Java接口或抽象类作为数据访问对象(DAO)接口。
当我们在Java接口或抽象类上添加@Mapper注解时,MyBatis会根据接口定义生成对应的实现类。这样,我们就可以在应用程序中通过调用这些接口方法来执行数据库操作。
需要注意的是,使用@Mapper注解时,需要确保接口与对应的XML映射文件名一致,并且同名的XML映射文件可以被正确加载和解析。
(4)添加 mybatis 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="">
</mapper>
为了更好地理解上述内容,举个例子:UserMapper.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="getAll" resultType="com.example.demo.entity.UserEntity">
select * from userinfo
</select>
</mapper>
namespace
属性用于指定映射器接口的完全限定名,它是与此映射器文件相关联的映射器接口的唯一标识,形式为全包名.类名
。id
属性指定了语句的唯一标识符,与接口中定义的方法名称⼀样的,表示对接口的具体实现方法。resultType
属性指定了查询结果的类型。在这个例子中,查询结果的类型是com.example.mybatis.entity.UserEntity
。
综上所述,这个示例的目的是定义了一个名为getAll
的查询语句,它将查询数据库中的userinfo
表,并将结果映射为com.example.mybatis.entity.UserEntity
类型的对象。
通过这个映射文件,可以让MyBatis框架自动生成相应的SQL查询代码,方便在 Java 程序中调用和使用。
(5)添加 Service
服务层,示例具体实现代码如下:
package com.example.mybatis.service;
import com.example.mybatis.entity.UserEntity;
import com.example.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<UserEntity> getAll(){
return userMapper.getAll();
}
}
(6)添加 Controller 控制层,示例具体实现代码如下:
package com.example.demo.controller;
import com.example.demo.entity.UserEntity;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("getall")
public List<UserEntity> getAll(){
return userService.getAll();
}
}
实现代码说明:在Controller
类(控制层)中注入Service
(服务层),并在Controller
类中调用Service
类中的具体方法。
4. MyBatis查询数据库测试
(1)数据库记录信息
(2)浏览器地址栏输入
MyBatisX插件的安装:
三. MyBatis 流程
1. MyBatis 查询数据库流程
MyBatis 在进行查询数据库操作的执行流程主要为:
- 配置数据源:在MyBatis中,首先需要在配置文件中配置数据源,以便连接到数据库。通常是可以通过使用连接池或者直接配置数据库连接信息连接。
- 创建映射文件:MyBatis使用XML文件来定义数据库操作语句和映射关系。创建一个映射文件,它包含了数据库查询、插入、更新和删除等操作的语句,以及将结果映射到 Java对象的规则。
- 创建映射接口:为每个映射文件创建一个对应的 Java接口,接口中定义了与映射文件中相同的操作方法。
- 配置映射关系:在MyBatis的配置文件中,将映射文件和映射接口进行关联,指定它们的路径和命名空间。
- 注入Mapper接口:在需要使用查询功能的类中,通过依赖注入(比如@Autowired)方式注入Mapper接口的实例。
Controller 类中注入Service 类对象,Service类中注入 Mapper 接口。 - 调用Mapper接口进行查询:通过注入的Mapper接口实例调用定义的查询方法,将参数传递给方法并执行查询操作。
Controller 类(控制层)中调用 Service类(服务层),而Service类(服务层)中调用Mapper类接口(持久层)。 - 处理查询结果:根据查询的需求和Mapper接口方法的返回类型,对查询结果进行处理。可以返回单个对象、列表、映射结果等。
查询结果从Mapper持久层中返回至Service,再从Service服务层中返回至Controller,最后再从Controller控制层返回至前端。
2. MyBatis 框架交互流程图
MyBatis 在整个框架中的定位,框架交互流程图:
注意说明:MyBatis 是一个ORM框架,ORM (Object Relational Mapping),即对象关系映射。在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的互相转换。
对象关系映射主要完成两步操作,分别为将输入数据(传入对象)+ SQL 映射成原生SQL以及将结果集映射为返回对象(输出对象)。