【Mybatis】Mybatis的连接池、延迟加载以及缓存

上一篇博客(https://blog.csdn.net/cxh6863/article/details/103944108),我们讲了Mybatis的一些基础使用,
接下来我们再扩展下,了解了解连接池,延迟加载,缓存以及使用注解进行编写代码

连接池

POOLED

采用传统的javax.sql.DataSource规范中 的连接池,Mybatis中有针对规范的实现
 这种数据源的实现利用"池"的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。

UNPOOLED

采用传统的获取连接的方式,虽然也实现javax.sql.DataSource接口,但是并没有使用池的思想
这个数据源的实现只是每次被请求时打开和关闭连接

JDDI

采用服务器体统的JNDI技术实现。来获取DataSource对象,不同服务器所能拿到的DataSource是不一样的。
注意:如果不是web或者maven的war工程,是不能使用的
这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用

延迟加载

一对多,多对多:通常采用延迟加载
多对一,一对一:通常采用立即加载

一对一的延迟加载

1association
一对一的关系映射:配置封装user的内容
select属性指定的内容:查询用户的唯一标识
column属性指定的内容:用户根据id查询时,所需要的参数的值

<resultMap id="accountUserMap" type="account">
        <id property="id" column="id"></id>
        <result property="uid" column="uid"></result>
        <result property="money" column="money"></result>
        <!--配置account对象中user的映射-->
        <association property="user" cloumn="uid" javaType="user" select="com.cxh.dao.IUserDao.findById"></association>
</resultMap>

一对多的延迟加载

collection

<resultMap id="userAccountMap" type="user">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="address" column="address"></result>
        <result property="sex" column="sex"></result>
        <result property="birthday" column="birthday"></result>
        <!--配置user对象中accounts集合的映射-->
        <collection property="accounts" ofType="account" select="com.cxh.dao.IAccountDao.findAccountByUid"></collection >
</resultMap>

缓存

缓存是存在于内存中的临时数据
目的:减少和数据库的交互次数,提高执行效率
使用情况:经常查询并且不经常改变;数据的正确与否对最终结果影响不大

一级缓存

他指的是Mybatis中SQLSession对象的缓存  是个map   sqlSession消失,缓存也消失
clear,关闭,更新语句都会清空缓存

二级缓存 (存放的是数据,不是对象)

他指的是Mybatis中SQLSessionFactory对象的缓冲。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存
使用步骤

1.让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)

<settings>
		<setting name="cacheEnabled" value="true"/>
</settings>

12.让当前的映射文件支持二级缓存(在IUserDao.xml中配置)

<mapper namespace="com.cxh.dao.IUserDao">
	<cache/>
</mapper>

13.让当前的操作支持二级缓存(在select标签中配置)
useCache=“true”

<select id="findById" parameterType="INT" resultType="user" useCache="true">
	select * from user where id = #{uid}
</select>

注解

查询:@Select
插入:@Insert
更新:@Update
删除:@Delete
结果字段映射:@Results @Result

示例:

@Select("select * from user")
@Results(value={
	@Result(id=true,column="id",property="userId"),
	@Result(column="username",property="userName"),
	@Result(column="address",property="userAddress"),
	@Result(column="sex",property="userSex"),
	@Result(column="birthday",property="userBirthday")
})
List<User> findAll();
原创文章 255 获赞 116 访问量 19万+

猜你喜欢

转载自blog.csdn.net/cxh6863/article/details/103946834