MyBatis的API

MyBatis应用目录结构如图所示:
在这里插入图片描述

SqlSessions:
使用MyBatis的主要Java接口是SqlSession,可通过该接口执行命令,获取映射器和管理事务,SqlSessions 是由 SqlSessionFactory 实例创建的, SqlSessionFactory 对象包含创建SqlSessions 实例的所有方法,而SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或手动配置 Java 代码来创建 SqlSessionFactory。
注意:当MyBatis与一些依赖注入框架(如Spring或Guice)同时使用时,SqlSessions将被依赖注入框架所创建,无需使用SqlSessionFactoryBuilder或者SqlSessionFactory。

SqlSessionFactoryBuilder:
SqlSessionFactoryBuilder 有五个 build() 方法,每一种都允许从不同的资源中创建一个 SqlSession 实例:

SqlSessionFactory build(InputStream inputStream)
SqlSessionFactory build(InputStream inputStream, String environment)
SqlSessionFactory build(InputStream inputStream, Properties properties)
SqlSessionFactory build(InputStream inputStream, String env, Properties props)
SqlSessionFactory build(Configuration config)

如果调用了参数有environment的build方法,那么MyBatis将会使用configuration对象配置environment,如果指定的environment不合法,将会得到错误提示。如果调用了不带environment参数的build方法,就使用默认的environment。如果调用了含有properties实例的方法,那么MyBatis就会加载那些properties属性配置文件,并在配置中可用。MyBatis加载属性的顺序为:
1.首先读取properties元素体重指定的属性
2.读取从properties元素的类路径resource或url指定的属性,且会覆盖已经指定的重复属性
3.读取作为方法参数传递的属性,覆盖前面的重复属性
因此,方法传递属性的优先级最高,resource或url指定的属性优先级其次,最次的是properties元素体重指定的属性

创建SqlSessionFactory第一种方法举例:从mybatis-config.xml 文件创建 SqlSessionFactory

String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

创建SqlSessionFactory第二种方法举例:

DataSource dataSource = BaseDataTest.createBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();

Environment environment = new Environment("development", transactionFactory, dataSource);

Configuration configuration = new Configuration(environment);
configuration.setLazyLoadingEnabled(true);
configuration.setEnhancementEnabled(true);
configuration.getTypeAliasRegistry().registerAlias(Blog.class);
configuration.getTypeAliasRegistry().registerAlias(Post.class);
configuration.getTypeAliasRegistry().registerAlias(Author.class);
configuration.addMapper(BoundBlogMapper.class);
configuration.addMapper(BoundAuthorMapper.class);

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(configuration);

SqlSessionFactory:
SqlSessionFactory有六个方法创建SqlSession实例,需要三个方面:事务处理、连接和执行语句,从而有下列多个方法供使用:

SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession openSession(Connection connection)
SqlSession openSession(TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType,TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType)
SqlSession openSession(ExecutorType execType, boolean autoCommit)
SqlSession openSession(ExecutorType execType, Connection connection)
Configuration getConfiguration();

SqlSession openSession()有如下四个特性:
1.会开启一个事务(也就是不自动提交)。
2.将从由当前环境配置的 DataSource 实例中获取 Connection 对象。
3.事务隔离级别将会使用驱动或数据源的默认设置。
4.预处理语句不会被复用,也不会批量处理更新。

SqlSession:
该类的实例在MyBatis中飞强大,其可执行所有语句,提交或回滚事务和获取映射器实例,其方法如下:
执行语句方法:

<T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
<T> Cursor<T> selectCursor(String statement, Object parameter)
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)

批量立即更新方法:

List < BatchResult > flushStatements ()

事务控制方法:

void commit () void commit ( boolean force ) void rollback () void rollback ( boolean force )

本地缓存:
MyBatis使用了两种缓存:本地缓存和二级缓存
当一个新session被创建,MyBatis就会创建一个与之相关联的本地缓存,任何在session执行过的查询语句本身就会保存在本地缓存中,从而相同的查询语句和相同的参数所产生的更改就不会影响数据库,本地缓存会被增删改、提交事务、关闭事务以及关闭session清空。默认情况下,本地缓存数据可在整个session周期内使用,这一缓存被用来解决循环引用错误和加快重复嵌套查询的速度,所以不可以不被禁用,可设置localCacheScope= STATEMENT表示缓存仅在语句执行时有效,如果localCacheScope被设置成SESSION,那么MyBatis所返回的引用将传递个保存在本地缓存中的相同对象,可以调用localCacheScop方法清空本地缓存,我们需确保SqlSession被关闭,可以使用如下语句:

try ( SqlSession session = sqlSessionFactory . openSession ()) { 
    session . insert (...); 
    session . update (...); 
    session . delete (...) ; 
    session . commit (); }  

可以通过SqlSession获取Configuration实例:

Configuration getConfiguration ()

可以通过SqlSession获取映射器:

<T> T getMapper(Class <T> type)

版权声明:本文为weixin_43638314原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。