MyBatis 是一款优秀的持久层框架,它支持自定义SQL,存储过程以及高级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型,接口和 Java POJO((Plain Old Java Objects,普通⽼式 Java 对象)为数据库中的记录。
通俗的来说:MyBatis 它是一个优秀的 ORM(对象关系映射)持久层框架
特点:灵活
在 application-dev.yml
中 请添加如下内容:
# 开发环境的配置文件
# 第一步:配置数据库的连接
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8
username: root # 用户名(默认是root)
password: 707703 # 自己的密码
driver-class-name: com.mysql.cj.jdbc.Driver # mysql的驱动名称
# 开启 MyBatis SQL 打印
logging:
level:
com:
example:
demo: debug
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在 application.yml
中添加如下内容
# 配置当前运行的环境(配置文件)
spring:
profiles:
active: dev # 使用开发环境的配置文件
# 配置 MyBatis 的 XML 的保存路径
# 在resource底下新建一个文件夹,用来放 XML
mybatis:
mapper-locations: classpath:mybatis/**Mapper.xml
我们配置好环境之后,按照后端开发的工程思路,也就是下面的流程来实现 MyBatis 查询所有用户功能
打开 mysql 复制粘贴 如下代码:
-- 创建数据库
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';
-- 创建文章表
drop table if exists articleinfo;
create table articleinfo(
id int primary key auto_increment,
title varchar(100) not null,
content text not null,
createtime datetime default now(),
updatetime datetime default now(),
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 datetime default now(),
updatetime datetime default now(),
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);
先添加用户的实体类:
package com.example.demo.model;
import lombok.Data;
/**
* 普通的实体类
*/
@Data // 组合注解 包含了 get set 和 toString 方法
public class UserInfo {
private int id;
private String username;
private String password;
private String photo;
private String createtime;
private String updatetime;
private String state;
}
数据化持久层的接口定义:
package com.example.demo.mapper;
import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper // 加上这个注解,使得 interface 从普通的 interface 变成了
// mybatis 的一个 interface
public interface UserMapper {
// 根据用户 id 查询用户
public UserInfo getUserById(@Param("id") Integer id);
}
数据持久层的实现, mybatis 的固定 xml 格式:
UserMapper.xml 查询用户的集体实现 SQL:
服务层代码实现如下:
package com.example.demo.service;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.UserInfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UserService {
@Resource
private UserMapper userMapper;
public UserInfo getUserById(Integer id) {
return userMapper.getUserById(id);
}
}
控制层的实现代码如下:
package com.example.demo.controller;
import com.example.demo.model.UserInfo;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/getuserbyid")
public UserInfo getUserById(Integer id) {
if(id == null) return null;
return userService.getUserById(id);
}
}