Spring MyBatis的介绍和一个基础案例可以参考
SqlSessionFactory和SqlSession
在使用MyBatis框架时,主要涉及两个核心对象:SqlSessionFactory和SqlSession。
SqlSessionFactory
SqlSessionFactory在MyBatis中的主要作用是创建SqlSession。而SqlSessionFactory对象的实例是通过SqlSessionFactoryBuilder对象来构建,SqlSessionFactoryBuilder则可以通过XML文件或者一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。
通过XML文件构建SqlSessionFactory的代码如下:
//读取配置文件
InputStream inputStream = Resources.getResourceAsStream("配置文件位置");
//根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSessionFactory对象是线程安全的,一旦被创建,在整个应用执行期间都会存在,如果我们多次的创建同一个数据库的SqlSessionFactory,那么数据库的资源将很快被耗尽,为了解决此问题,通常每一个数据库都只对应一个SqlSessionFactory。
SqlSession
SqlSession是应用层与持久层之间执行交互操作的一个单线程对象,作用是执行持久化操作。它包含了数据库中所有执行sql操作的方法,因为它底层封装了jdbc,所以可以直接用SqlSession实例来执行已经映射的sql语句。
每一个线程都应该有一个自己的SqlSession实例,并且实例是不能被共享的。
SqlSession是线程不安全的,他的使用范围最好在一次请求或者一个方法中,使用完之后应将及时关闭,通常放在finally块中关闭。代码如下:
SqlSession sqlSession = SqlSessionFactory.openSession();
try{
//从此执行持久化操作
}finally{
sqlSession.close();
}
SqlSession对象中包含的常用方法:
【mybatis-SqlSession的方法总结】 - ProSayJ - 博客园 (cnblogs.com)
MyBatis配置文件中主要元素
<properties>是一个配置属性的元素,通常用于将内部的配置外在化,意思就是通过外部的配置来动态的替换内部定义的属性。
一般用于数据库连接,在相同路径下创建一个db.properties的配置文件,编辑数据库的相关信息
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis
jdbc.username = root
jdbc.password = 123456
然后在MyBatis配置文件中就可以通过该标签配置获得数据库的属性
<properties resource="db.properties"></properties>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
<settings>元素用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。
<typeHandler>元素作用是将预处理语句中传入的参数从javaType(java类型)转换为jdbcType(jdbc类型),或者反之。
<environments>元素用于对环境进行配置。MyBatis环境配置实际上就是数据源的配置,可以通过该元素配置多种数据源,即配置多种数据库。
<!-- 配置环境,默认的环境id为mysql -->
<environments default="mysql">
<!-- 配置id为mysql的数据库环境 -->
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
其中dataSource的type属性用于指定哪一种数据源,myBatis框架提供了UNPOOLED、POOLED、JNDI三种数据源类型。
三种数据源的区别:
Mybatis中的三类数据源 UNPOOLED、POOLED 和 JNDI 的区别 - 寻梦君 - 博客园
<mappers>元素,用于指定MyBatis映射文件的位置,一般有四种方法引入映射器文件
1、使用类路径引入
<mappers>
<mapper resource="类的全路径"/>
</mappers>
2、使用本地文件路径引入
<mappers>
<mapper url="file:///本地文件的全路径" />
</mappers>
3、使用接口类引入
<mappers>
<mapper calss="接口类的类路径" />
</mappers>
4、使用包名引入
<mappers>
<package name="包名"/>
</mappers>