目录
一、认识MyBatis
1、MyBatis是什么?
2、为什么要学习MyBatis?
二、配置MyBatis环境
1、建库与建表
2、创建新项目
3、xml文件配置
(1)配置数据库连接
(2)配置 MyBatis 中的 XML 路径
三、测试:第一个MyBatis查询
1、用户实体类User:和数据库属性对应
2、添加mapper接口
3、添加UserMapper.xml
4、自行测试
5、添加 Service
6、添加Controller
一、认识MyBatis
1、MyBatis是什么?
MyBatis是一个持久层框架,(持久:支持数据存在硬盘上),MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作,可以通过简单的 XML 或注解来完成,MyBatis 是更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库⼯具。之前的Spring是让Java代码更简单。
问题1:MyBatis和Spring的关系?
MyBatis和Spring没有任何关系!如果非要有关系,就是Spring集成了MyBatis框架。就相当于我们之前的举例:Spring是高铁,那么MyBatis就是高铁的APP订餐系统,高铁只是集成了这个订餐框架,更加方便我们的出行,没有高铁订餐系统也可以在其他平台使用,所以两者之间并没有什么关系,MyBatis可以脱离Spring使用。
2、为什么要学习MyBatis?
对于后端开发来说,程序是由以下两个重要的部分组成的:后端程序+数据库。⽽它两要建立连接,就要依靠数据库连接⼯具,我们学习的 JDBC,还有MyBatis都是,那已经有了 JDBC 了,为什么还要学习 MyBatis?这是因为 JDBC 的操作太繁琐了。
之前的JDBC代码流程:(非常繁琐)
1. 创建数据库连接池 DataSource;
2. 通过 DataSource 获取数据库连接 Connection;
3. 编写要执⾏带 ? 占位符的 SQL 语句;(√)
4. 通过 Connection 及 SQL 创建操作命令对象 Statement;
5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值;(√)
6. 使⽤ Statement 执⾏ SQL 语句;
7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量;
8. 处理结果集;(√)
9. 释放资源。
现在MyBatis,其中sql语句,传参,处理结果集这几步需要自己实现(可以写在Java代码中,也可以写在MyBatis配置文件中),可以帮助我们更⽅便、更快速的操作数据库。不过MyBatis底层还是依赖数据库连接的。问题2:MyBatis与数据库的关系?
MyBatis与数据库也没有关系!MyBatis是让数据库的连接操作更简单,但是并不是数据库。MyBatis是程序和数据库的桥梁。MyBatis提供了一个接口访问数据库,接口只是方法的定义,具体的自己要实现,主要通过xml文件实现(注解也可以实现)。
二、配置MyBatis环境
1、建库与建表
-- 创建数据库
drop database if exists myBatis_db;
create database myBatis_db DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
use myBatis_db;
-- 创建表[⽤户表]
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_db`.`userinfo` (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(1, 'root', 'root', '', '2023-7-23 17:10:48', '2023-7-23 17:10:48', 1)
;
-- 查询表
select * from userInfo;
2、创建新项目
注意
注意:可以新创建项目引入这些包,但是如果已经是一个老项目了,我没有安装SQL的包,可以通过安装插件实现。
右键:generate
3、xml文件配置
(1)配置数据库连接
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/myBatis_db?characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
(2)配置 MyBatis 中的 XML 路径
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml
#Spring打印SQL日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
同时在resource文件下建立一个新文件夹:mapper。
三、测试:第一个MyBatis查询
按照下⾯的流程来实现 MyBatis 查询所有⽤户的功能。
1、用户实体类User:和数据库属性对应
@Data
public class User {
private Integer Id;
private String username;
private String password;
private String photo;
private Date createTime;
private Date updateTime;
}
2、添加mapper接口
数据持久层的接⼝定义。
(1)是Inteferce接口;
(2)接口上方加@Mapper注解;
(3)实现接口中的方法。
@Mapper
public interface UserMapper {
//定义接口:查询数据库内容
public abstract List<User> queryAll();
}
3、添加UserMapper.xml
数据持久成的实现,mybatis 的固定 xml 格式。同时写UserMapper.xml 查询所有⽤户的具体实现 SQL。
(1)<mapper>标签:需要指定 namespace 属性,表示命名空间,值为 mapper 接⼝的全限定名,包括全包名.类名。namespace下的是UserMapper,表示实现哪个接口。
(2)模板文件,自定义sql语句,queryAll表示实现的是接口中的哪个方法。sql语句为查询就写select,写id和resultType,id是接口中的方法名,表示对接⼝的具体实现⽅法;resultType是返回结果的类型:表示返回的是一个User对象。<select>查询标签:是⽤来执⾏数据库的查询操作的。
<?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="demo1.mapper.UserMapper">
<!--表示实现的是demo1下的UserMapper接口-->
<select id="queryAll" resultType="demo1.model.User">
select * from userinfo
</select>
<!--id是方法名,resultType是返回的结果:返回的是一个User对象-->
</mapper>
4、自行测试
(1)将光标定在接口定义UserMapper的{ }里面,右键generate选择test,勾选queryAll方法。加上@SpringBootTest注解;
(2)通过@Autowired将UserMapper注入进来;
(3)查询方法上加@Test注解。
@Slf4j
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void queryAll() {
List<User> users = userMapper.queryAll();
log.info(users.toString());
}
}
点击测试方法上面的运行按钮,得到查询结果。
测试通过之后,我们就可以将其应用到具体项目中了,继续下面的步骤。
5、添加 Service
服务层实现代码如下:
@Service
public class UserService {
@Resource
private UserMapper userMapper;
public List<User> queryAll(){
return userMapper.queryAll();
}
}
6、添加Controller
@RestController
@RequestMapping("/web")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/queryAll")
public List<User> queryAll(){
return userService.queryAll();
}
}
url测试通过。
希望自己能够更加淡定从容~说不定有一条生活也会给你一个很大的惊喜呢?😁