Mybatis
什么是Mybatis?
- Mybatis是一款优秀的持久层框架,用于简化JDBC的开发

- JDBC与Mybatis代码的对比:


入门程序
- 准备工作
- 创建SpringBoot工程、引入Mybatis相关依赖
- 准备数据库表user、实体类User
- 配置Mybatis(在application.properties中数据库连接信息)
- 编写Mybatis程序:编写Mybatis的持久层接口,定义SQL(注解/XML)
提示:Mybatis的持久层接口命名规范为 XxxMapper,也称Mapper接口
准备工作:
1.创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包、lombok。


项目工程创建完成后,自动在pom.xml文件中,导入Mybatis依赖和MySQL驱动依赖。如下所示:

2.数据准备:创建用户表user,并创建对应的实体类User。
-
用户表 user(如果已经存在,就不用创建了)
-
1 2 3 4 5 6 7 8 9 10 11 12 13create table user( id int unsigned primary key auto_increment comment 'ID,主键', username varchar(20) comment '用户名', password varchar(32) comment '密码', name varchar(10) comment '姓名', age tinyint unsigned comment '年龄' ) comment '用户表'; insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22), (2, 'xiaoqiao', '123456', '小乔', 18), (3, 'diaochan', '123456', '貂蝉', 24), (4, 'lvbu', '123456', '吕布', 28), (5, 'zhaoyun', '12345678', '赵云', 27); -
实体类:实体类的属性名与表中的字段名一一对应。 实体类放在
com.itheima.pojo包下。 -
1 2 3 4 5 6 7 8 9 10@Data @NoArgsConstructor @AllArgsConstructor public class User { private Integer id; //ID private String username; //用户名 private String password; //密码 private String name; //姓名 private Integer age; //年龄 }

3.配置Mybatis
|
|
上述的配置,可以直接复制过去,不要敲错了。 全部都是
spring.datasource.xxxx开头。具体内容根据自己的设置进行更改
4.编写Mybatis程序:编写Mybatis的持久层接口,定义SQL语句(注解)
在创建出来的springboot工程中,在引导类所在包下,在创建一个包 mapper 。在 mapper 包下创建一个接口 UserMapper ,这是一个持久层接口(Mybatis的持久层接口规范一般都叫 XxxMapper)。
UserMapper接口的内容如下:
|
|
注解说明:
@Mapper注解:表示是mybatis中的Mapper接口程序运行时,框架会自动生成接口的实现类对象(代理对象),并给交Spring的IOC容器管理
@Select注解:代表的就是select查询,用于书写select查询语句
5.单元测试
在创建出来的SpringBoot工程中,在src下的test目录下,已经自动帮我们创建好了测试类 ,并且在测试类上已经添加了注解 @SpringBootTest,代表该测试类已经与SpringBoot整合。
该测试类在运行时,会自动通过引导类加载Spring的环境(IOC容器)。我们要测试那个bean对象,就可以直接通过@Autowired注解直接将其注入进行,然后就可以测试了。
|
|
运行结果:

辅助配置
-
默认在Mybatis中配置的SQL语句是不识别的。可以做如下配置:
先点击图中所示按钮:

然后直接搜索MySQL:

此时编译器就会给这条语句高亮提示,但是会报错:

- 产生原因:idea和数据库没有建立连接,不识别信息
- 解决方式:在idea中配置MySQL数据库连接



连上之后就有SQL提示了
- 默认情况喜爱,在Mybatis中,SQL语句执行是,我们并看不到SQL语句的执行日志。加入如下配置,即可查看配置:

扩展:可以将application.properties文件替换为application.yaml(需将原本的文件注释掉)
下文中有详细叙述
文件的优先级:properties > yml > yaml
此时文件内容需要更改为:(因为文件格式不一致)
1 2 3 4 5 6 7 8 9 10# 更简洁,但是要注意: 后面一定一定要加个空格 spring: datasource: url: jdbc:mysql://localhost:3306/web01 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

JDBC VS Mybatis

数据库连接池
-
数据库连接池是个容器,负责分配、管理数据库连接(Connection)
-
它允许应用程序重复使用一个现有的数据库连接,而不是重新再建立一个
-
释放空闲时间超过最大空闲时间的连接,来避免因为没有释放资源而引起的数据库连接遗漏
-
优势:
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏

-
标准接口:DataSource
- 官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。
- 功能:获取连接 Connection getConnection() throws SQLException;
-
常见产品:

-
切换数据库连接池:



增删改查操作
删除用户 - delete
-
需求:根据id删除用户信息
-
SQL:delete from user where id = 5;
-
Mapper接口:

在执行这条SQL语句时,会将#{}替换为问号,即预编译SQL
|
|
|
|



如果想要接收返回值,就将void替换为返回值类型

注意:DML语句执行完毕的返回值,表示该DML语句执行完毕影响的次数
|
|

- Mybatis中的 # 号与 $ 号:

|
|

新增用户 - insert
- 需求:添加一个用户
- SQL:insert into user(username,password,name,age) values(‘xxx’,‘xxx’,‘xxx’,xx)

|
|
|
|

原本:

现在:此时的id为6是因为主键是自增的,就算删除也是存在过,由于4和5存在过,所以自增为6

修改用户 - update
-
需求:根据ID更新用户信息
-
SQL:update user set username = ’ ‘,password = ’ ’ , name = ’ ‘,age = xx where id = x;
-
Mapper接口:

1 2@Update("update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id}") public void update(User user);1 2 3 4 5@Test public void testUpdate() { User user = new User(1,"zhouyu","666888","周瑜",18); userMapper.update(user); }


查询用户 - select
- 需求:根据用户名和密码查询用户信息
- SQL:select * from user where username = ’ ’ and ’ ’ and password = ’ ‘;
- Mapper接口:

-
@Param注解的作用是为接口的方法形参起名字的
为什么删除和新增用户不需要起名字?

|
|
|
|

- 说明:基于官方骨架创建的Springboot项目中,接口编译时会保留方法形参名,@Param注解可以省略(#{形参名})

XML映射配置
- 在Mybatis中,既可以通过注解配置SQL语句,也可以通过XML配置文件配置SQL语句。
- 默认规则:
- XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下**(同包同名)**。
- XML映射文件的namespace属性为Mapper接口全限定名一致。
- XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。

注意:在创建UserMapper文件时,要用/创建目录,例如此处则是com/itheima/mapper
创建好目录结构后,从官网引入XML文件
Mybatis中文网:MyBatis 中文网 官网
|
|
这就是XML映射文件的基本结构
然后添加查询语句:
|
|
记得要把原来的注解给注释了(二选一),如果不注释就不知道要执行哪个语句了导致报错

- 那在Mybatis的开发中,到底使用注解开发还是使用XML开发呢 ?
使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

XML映射文件 - 辅助配置
- 配置XML映射文件的位置:


- MybatisX 是一款基于 IDEA 的快速开发Mybatis的插件,为效率而生。

注意:在使用了这个插件以后,可能会让你原先的代码被警告(不是报错)

此时将项目中同包同名的文件remove即可,不移除也可以照常运行,但是项目真正开发项目中一般不会出现这种情况
Springboot配置文件
- Springboot项目提供了多种属性配置方式(properties、yaml、yml)

- 格式:
- 数值前边必须有空格,作为分隔符
- 使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea中会自动将Tab转换为空格)
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略

- 定义对象/Map集合:

- 定义数组/List/Set集合:记得加 - ,- 后面要加空格

注意:在yml格式的配置文件中,如果配置项的值是以0开头的,值需要使用 **’ ’ ** 引起来,因为0开头在yml中表示8进制的数据
例如:输入一个0开头的Password就需要设置为:‘0123456’
所以前面的application.properties就可以改为yml文件
|
|