**
一、:.Mybatis框架
1.简介:
MyBatis 本是 Apache 的一个开源项目 iBatis, 2010 年这个项目由 Apache Software Foundation 迁移到了 Google Code,且改名为 MyBatis 。2013 年 11 月迁移到 GitHub。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary
Java Object,普通的 Java 对象)映射成数据库中的记录。
简单的说:MyBatis 是一个半自动 ORM 框架,其本质是对 JDBC 的封装。使用 MyBatis 重点需要程序员编写 SQL 命令,不需要写一行 JDBC 代码。
与 Hibernate 的比较
Hibernate 是一个全自动的 ORM 框架。因为 Hibernate 创建了 Java 对象和数据库表之间的完整映射,可以完全以面向对象的思想来操作数据库,程序员不需要手写 SQL 语句,而 MyBatis 中还需要手写 SQL 语句,所以是半自动化的,工作量要大于 Hibernate。
为什么半自动化的 Mybatis 比自动化的 Hibernate 受欢迎?
MyBatis 需要手写 SQL 语句,所以工作量要大于 Hibernate。但是也正是由于自定义
SQL 语句,所以其灵活性、可优化性就超过了 Hibernate。
Hibernate 封装了 SQL 语句,由开发者对对象操作,Hibernate 来生成 SQL 语句。虽然也可以通过映射配置来控制生成的 SQL 语句,但是对于要生成复杂的 SQL 语句,很难实现,或者实现后导致性能的丢失。
而 MyBatis 将手写 SQL 语句的工作丢给开发者,可以更加精确的定义 SQL,更加灵活,
也便于优化性能。完成同样功能的两条 SQL 语句的性能可能相差十几倍到几十倍,在高并发、快响应要求下的互联网系统中,对性能的影响更明显。
MyBatis 对存储过程可提供很好的支持。另外 MyBatis 的开发工作量大不意味着学习
成本大。对于新手,学习 Hibernate 时间成本比 Mybatis 大很多,Mybatis 很快就上手了。
总之,因为 MyBatis 具有封装少、映射多样化、支持存储过程、可以进行 SQL 语句优化等特点,符合互联网高并发、大数据、高性能、高响应的要求,使它取代 Hibernate 成为了 Java 互联网中首选的持久框架。而对于对性能要求不高的比如内部管理系统、ERP 等可以使用 Hibernate。
2.核心 API
SqlSessionFactoryBuilder:
SqlSessionFactoryBuilder 的作用是使用构建者模式创建 SqlSessionFactory 接口对象。
SqlSessionFactory:
SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession接口对象。
SqlSession:
如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 方法提交或者回滚事务。
Mapper映射器。由一个 Java 接口和 XML 文件(或者注解构成),需要给出对应的 SQL 和映射规则,负责发送 SQL 去执行并返回结果。
3.生命周期
SqlSessionFactoryBuilder:
该类用来创建 SqlSessionFactory 对象,当 SqlSessionFactory 对象被创建后, SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法
作用域。
SqlSessionFactory:
SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。由于 SqlSessionFactory
是 一 个 对 数 据 库 的 连 接 池 , 所 以 它 占 据 着 数 据 库 的 连 接 资 源 。 如 果 创 建 多 个 SqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况。因此 SqlSessionFactory 是一个单例,让它在应用中被共享。
SqlSession:
SqlSession 应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try…catch…finally… 语句来保证其正确关闭。所以 SqlSession 的最佳的作用域是请求或方法作用域。
Mapper:
由于 SqlSession 的关闭,它的数据库连接资源也会消失,所以它的生命周期应该小于等于 SqlSession 的生命周期。Mapper 代表的是一个请求中的业务处理,所以它应该在一个请求中,一旦处理完了相关的业务,就应该废弃它。
4.全局配置文件
全局配置文件的名称是自定义的,在 JavaProject 项目中需要放到 src 目录下。全局配置文件的作用是完成一些全局性的配置,如:对 Mybatis 框架的设置、别名设置、环境设置、指定映射配置文件等相关配置。
1.properties 标签
Mybatis 配置文件中的属性定义。properties 标签中允许内部定义属性,也可以是外部的
properties 文件定义属性。无论是内部定义还是外部定义,都可以使用${name}获取值。
settings 标签
setting 标签的配置是配置 MyBatis 框架运行时的一些行为的,例如缓存、延迟加载、结果集控制、执行器、分页设置、命名规则等一系列控制性参数,其所有的 setting 配置都放在父标签 settings 标签中。
typeAliases 标签
类型别名可为 Java 类型设置一个缩写名字。
environments 标签
MyBatis 可以配置多个环境。这可以帮助你 SQL 映射对应多种数据库等。比如说,想为开发、测试、发布产品配置不同的环境。
transactionManager 节点
事务处理器。
在 MyBatis 中有两种类型的事务管理器(也就是 type[JDBC|MANAGED]")
JDBC :这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
MANAGED :不做事务处理。
dataSource 标签
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
UNPOOLED:使用直连。
POOLED:使用池连。
JNDI :使用 JNDI 方式连接
2映射配置文件
映射配置文件主要是用来编写 sql 语句的,结果集的映射关系的指定,以及缓存的一些
配置等等,可以用工具生成。