一、MyBatis持久层框架
1.1 MyBatis特点
-
不屏蔽SQL,可以优化SQL语句
-
提供了强大、灵活的映射机制
-
Mapper接口
1.2 Mybatis框架下载
Mybatis源码:GitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java
Mybatis框架下载 ::Release mybatis-3.4.1 · mybatis/mybatis-3 · GitHub
1.3 Mybatis框架目录结构
.4 MyBatis核心组件
SqlSessionFactoryBuilder (构造者设计模式): 构造SqlSessionFactory对象
SqlSessionFactory (工厂设计模式): 由工厂产生SqlSession对象
SqlSesssion 会话对象:
通过SqlSession对象的API能发送SQL语句
获取Mapper映射器(正常开发中“消失”),在业务代码中不体现这个对象
Mapper映射器对象: 就是Dao层接口与XML配置文件(注解)结合,达到Dao层接口实现类对象的效果(动态代理产生)
1.5 组件详解
1.5.1 SqlSessionFactory
package org.apache.ibatis.session;
import java.sql.Connection;
public interface SqlSessionFactory {
SqlSession openSession();SqlSession openSession(boolean var1);
SqlSession openSession(Connection var1);
SqlSession openSession(TransactionIsolationLevel var1);
SqlSession openSession(ExecutorType var1);
SqlSession openSession(ExecutorType var1, boolean var2);
SqlSession openSession(ExecutorType var1, TransactionIsolationLevel var2);
SqlSession openSession(ExecutorType var1, Connection var2);
Configuration getConfiguration();
}2.6.1 创建MyBatis的核心配置文件
在类路径下(src)创建一个mybatis-config.xml(文件名称随意)
在配置文件中编写如下xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--引入xml的约束文件: 约束当前xml文档中能使用什么标签
xml:可扩展标记语言,描述信息的方式就是标签,HTML是它的子集
而且可以自定义标签, 所以可以通过约束文件来约束当前xml文档中
只能使用约束文件中(命名空间)定义的标签xml的约束文件分为两种
dtd: Mybatis使用的就是这种
schema: spring使用的就是这种
-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration> -
事务有四种特点,被称为ACID特性:
原子性(Atomicity) 当事务结束,它对所有资源状态的改变都被视为一个操作,这些操作要不同时成功,要不同时失败 一致性(Consistency) 操作完成后,所有数据必须符合业务规则,否则事务必须中止 隔离性(Isolation) 事务以相互隔离的方式执行,事务以外的实体无法知道事务过程中的中间状态 持久性(Durable) 事务提交后,数据必须以一种持久性方式存储起来
public class Configuration {
...
public Configuration() {
...
this.typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
this.typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
this.typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
this.typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
this.typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);
...
}
}