目录
MyBatis
简介
MyBatis
是一个半ORM
( 对象关系映射)框架,它内部封装了JDBC
,开发时只需要关注SQL
语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement
等繁杂的过程。开发人员直接编写原生态SQL
,可以严格控制SQL
执行性能, 灵活度高MyBatis
可以使用XML
或注解来配置和映射原生信息, 将POJO
映射成数据库中的记录, 避免了几乎所有的JDBC
代码和手动设置参数以及获取结果集
MyBaits
的优点
- 基于
SQL
语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL
写在XML
里,解除SQL
与程序代码的耦合,便于统一管理;提供XML
标签, 支持编写动态SQL
语句, 并可重用 - 与
JDBC
相比,减少了50%
以上的代码量,消除了JDBC
大量冗余的代码,不需要手动开关连接 - 能够与
Spring
很好的集成 - 提供映射标签, 支持对象与数据库的
ORM
字段关系映射; 提供对象关系映射标签, 支持对象关系组件维护
MyBatis
与 Hibernate
有哪些不同
MyBatis
和Hibernate
不同,MyBatis
是一个半自动的ORM
框架,因为MyBatis
需要程序员自己编写SQL
语句,而Hibernate
是一个全自动的ORM
框架MyBatis
无法做到数据库无关性,不同的数据库需要不同的SQL
语句,数据库移植性较差;可编写原生态SQL
,可以严格控制SQL
执行性能,灵活度高Hibernate
对象/关系映射能力强, 数据库无关性好,数据库移植性很好
MyBatis
四大核心对象
SqlSessionFactoryBuilder
这个类是用来创建 SqlSessionFactory
的,它可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory
,就不再需要它了。因此 SqlSessionFactoryBuilder
实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder
来创建多个 SqlSessionFactory
实例,但是最好还是不要让其一直存在,以保证所有的 XML
解析资源可以被释放给更重要的事情
SqlSessionFactory
SqlSessionFactory
一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。使用 SqlSessionFactory
的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory
被视为一种代码坏味道(bad smell
)。因此 SqlSessionFactory
的最佳作用域是应用作用域。有很多方法可以做到,常见的就是使用单例模式来创建
SqlSessionFactory
接口源码
public interface SqlSessionFactory {
SqlSession openSession();
SqlSession openSession(boolean autoCommit);
SqlSession openSession(Connection connection);
SqlSession openSession(TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType);
SqlSession openSession(ExecutorType execType, boolean autoCommit);
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType, Connection connection);
Configuration getConfiguration();
}
SqlSession
每个线程都应该有它自己的 SqlSession
实例。SqlSession
的实例是线程不安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 每次收到 HTTP
请求,就打开一个 SqlSession
,当返回一个响应时,就关闭它。 这个关闭操作是很重要的,你应该把这个关闭操作放到 finally
块中以确保每次都能执行关闭
public interface SqlSession extends Closeable {
<T> T selectOne(String statement);