MyBatis中两大重要的对象:SqlSessionFactory和SqlSession
1:SqlSessionFactory对象是整个数据库映射关系经过编译后的内存镜像,该对象的openSession()方法可以打开SqlSession对象,该 对象由SqlSessionFactoryBuilder加载MyBatis 的配置文件产生。
如下代码:
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
由此可见,SqlSessionFactory是根据MyBatis的配置文件 mybatis-config.xml创建的。
2:SqlSession是MyBatis的关键对象,类似于JDBC中的Connection。它是应用程序与持久存储层之间执行交互的一个单线程对象。
SqlSession的实例不能呢过被共享也是线程不安全的。
MyBatis的配置文件结构
顶层configuration配置:代表着SqlSessionFactory。
properties属性:这些属性都是可外部配置并且可以动态替换的,既可以在典型的Java属性文件中配置,亦可通过properties元素的子元素来传递。
可以在CLSAAPATH中增加一个db.properties的Java属性文件。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis
username=root
password=root
在配置文件中配置<properties.../>属性:
<properties rosource="db.properties"/>
其中的属性就可以在整个配置文件中使用来代替需要动态配置的属性值。
<dataSource type="POOLED">
<property name="driver" value=“${driver}”/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
这样就为配置提供了多种选择.
setting设置:这是MyBatis中极为重要的调整设置,它们会改变MyBatis的运行时行为.
typeAliases类型命名:为Java类型设置一个短的名字,它只和xml配置有关,存在的意义仅在于减少类完全限定名的冗余;
typeHandlers类型处理器:当MyBatis在预处理语句中设置一个参数或者从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成Java类型。
objectFactory对象工厂:MyBatis每次创建结果对象的新实例时,都会使用一个对象工厂实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认你构造方 法,要么在参数映射存在的时候通过参数构造方法来实现。也可以创建自己的对象工厂来实现。
environments配置环境:MyBatis的环境配置实际就是数据源的配置。MyBatis可以配置多种环境,这种机制使得MyBatis可以将SQL映射应用于多种数据库中。
环境示例配置如下:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">...</transactionManager>
<dataSource type="POOLED">.....</dataSource>
</envoronments>
环境ID可以任意命名,建议简介有意义,而默认环境一定要匹配定义的其中一个环境ID。
在MyBatis中有UNPOOLED,POOLED和JNDI三种数据源类型:
1:UNPOOLED 只是每次被请求时打开和关闭连接,适合对性能没有要求的简单应用程序;
2:POOLED 这种数据源的实现利用"池"的概念将JDBC连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间.
3:JNID 这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用.容器可以集中或者在外部配置数据源.
mapper映射器:告诉MyBatis去哪里找映射文件,进而找到这些SQL语句。