一、MyBatis
1、MyBatis简介
1.1、MyBatis历史
MyBatis
最初是
Apache
的一个开源项目
iBatis,
iBatis3.x
正式更名为
MyBatis
。代码于 2013年
11
月迁移到
Github
iBatis
一词来源于
“internet”
和
“abatis”
的组合,是一个基于
Java
的持久层框架。
iBatis
提供的持久层框架包括SQL Maps
和
Data Access Objects
(
DAO
)。
1.2、MyBatis特性
1
)
MyBatis
是支持定制化
SQL
、存储过程以及高级映射的优秀的持久层框架
2
)
MyBatis
避免了几乎所有的
JDBC
代码和手动设置参数以及获取结果集
3
)
MyBatis
可以使用简单的
XML
或注解用于配置和原始映射,将接口和
Java
的
POJO
(
Plain Old Java Objects,普通的
Java
对象)映射成数据库中的记录
4
)
MyBatis
是一个 半自动的
ORM
(
Object Relation Mapping
)框架
Object Relation Mapping
对象 关系数据库 映射
1.3、MyBatis下载
MyBatis
下载地址:
https://github.com/mybatis/mybatis-3
1.4、和其它持久化层技术对比
- JDBC
- SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
- 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
- 代码冗长,开发效率低
- Hibernate 和 JPA
- 操作简便,开发效率高
- 程序中的长难复杂 SQL 需要绕过框架
- 内部自动生产的 SQL,不容易做特殊优化
- 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。
- 反射操作太多,导致数据库性能下降
- MyBatis
- 轻量级,性能出色
- SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
- 开发效率稍逊于HIbernate,但是完全能够接受
2、搭建MyBatis
2.1、开发环境
IDE
:
idea 2021.1.3
构建工具:
maven 3.5.4
MySQL
版本:
MySQL 8
MyBatis
版本:
MyBatis 3.5.7
MySQL 不同版本的注意事项1 、驱动类 driver-class-nameMySQL 5 版本使用 jdbc5 驱动,驱动类使用: com.mysql.jdbc.DriverMySQL 8 版本使用 jdbc8 驱动,驱动类使用: com.mysql.cj.jdbc.Driver2 、连接地址 urlMySQL 5 版本的 url :jdbc:mysql://localhost:3306/ssmMySQL 8 版本的 url :jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC否则运行测试用例报告如下错误:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more
2.2、创建maven工程
①打包方式:
jar
②引入依赖
<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>
2.3、创建MyBatis的核心配置文件
习惯上命名为 mybatis-config.xml ,这个文件名仅仅只是建议,并非强制要求。将来整合 Spring 之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。核心配置文件主要用于配置连接数据库的环境以及 MyBatis 的全局配置信息核心配置文件存放的位置是 src/main/resources 目录下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="XXXX"/>
</dataSource>
</environment>
</environments>
<!--引入mybatis的映射文件-->
<mappers>
<package name=""/>
</mappers>
</configuration>
2.4、创建mapper接口
MyBatis 中的 mapper 接口相当于以前的 dao 。但是区别在于, mapper 仅仅是接口,我们不需要提供实现类。
public interface UserMapper {
int insertUser();
}
2.5、创建MyBatis的映射文件
相关概念:
ORM
(
O
bject
R
elationship
M
apping
)对象关系映射。
- 对象:Java的实体类对象
- 关系:关系型数据库
- 映射:二者之间的对应关系
1、映射文件的命名规则:
表所对应的实体类的类名 +Mapper.xml例如:表 t_user ,映射的实体类为 User ,所对应的映射文件为 UserMapper.xml因此一个映射文件对应一个实体类,对应一张表的操作MyBatis 映射文件用于编写 SQL ,访问以及操作表中的数据MyBatis 映射文件存放的位置是 src/main/resources/mappers 目录下2 、 MyBatis 中可以面向接口操作数据,要保证两个一致:a>mapper 接口的全类名和映射文件的命名空间( namespace )保持一致b>mapper 接口中方法的方法名和映射文件中编写 SQL 的标签的 id 属性保持一致
<?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.atguigu.mybatis.mapper.UserMapper">
<!--
mapper接口和映射文件要保证两个一致:
1、mapper接口的全类名和映射文件的namespace一致
2、mapper接口中的方法的方法名要和映射文件中的sql的id保持一致
-->
<!-- int insertUser();-->
<insert id="insertUser">
insert into t_user values (null,'admin','123456',23,'男','12345@qq.com');
</insert>
</mapper>
2.6、通过junit测试功能
@Test
public void testInsert() throws IOException {
//获取核心配置文件的输入流(读的功能/输出流(写的功能))
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象