学习MyBatis (二)基于接口方式访问

接上篇
mybatis基于接口方式访问可以提高代码的可维护性和代码的重用性;
* 1)解耦
* 2)无须自己写statement对象(namespace+id)
*
* 条件:
* 1)接口类全名需要与映射文件命名空间(namespace)相同
* 2)接口方法名与映射文件元素id相同
// 假如不满足如上两个条件可能会出现BindingException(绑定异常)
在这里插入图片描述

  1. new一个AuthorDao接口,放在dao包下
  2. 继续用Junit测试,TestAuthor3.java
  3. 在resource下建mapper文件夹用于存放mapper映射文件,AuthorMapper.xml ,并且在mybatis-configs.xml中添加`mapper标签引用此文件,namespace应改为对应的接口全名
    4.

AuthorMapper.xml

<mapper namespace="org.blog.dao.AuthorDao">

mybatis-config.xml

<mappers>
		<mapper resource="mapper/AuthorMapper.xml" />
</mappers>

TestAuthor3.java

package org.mybatis;

import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.blog.dao.AuthorDao;
import org.junit.Test;

public class TestAuthor3 extends TestBase {
	@Test
	public void testFindAuthor() {
		// 1.创建会话对象
		SqlSession session = sqlSessionFactory.openSession();
		// 2.基于会话对象获取某个dao接口的实现类对象
		AuthorDao dao = session.getMapper(AuthorDao.class);
		// 3.基于实现类对象,调用目标方法
		Map<String, Object> map1 = dao.findAuthor(1);
		Map<String, Object> map2 = dao.findAuthor(1);
		System.out.println(map1);
		System.out.println(map2);
		// 4.释放资源
		session.close();
	}
}

mybatis的一级缓存和二级缓存
官网例子:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache
MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。

默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环 依赖也是必须的。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行:

字面上看就是这样。这个简单语句的效果如下:

映射语句文件中的所有 select 语句将会被缓存。
映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

NOTE The cache will only apply to statements declared in the mapping file where the cache tag is located. If you are using the Java API in conjunction with the XML mapping files, then statements declared in the companion interface will not be cached by default. You will need to refer to the cache region using the @CacheNamespaceRef annotation.

所有的这些属性都可以通过缓存元素的属性来修改。比如:

这个更高级的配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会 导致冲突。

可用的收回策略有:

LRU – 最近最少使用的:移除最长时间不被使用的对象。
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

默认的是 LRU。

flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。

size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的 可用内存资源数目。默认值是 1024。

readOnly(只读)属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓 存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存 会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此默认是 false。
具体缓存详细查询过程可参见
https://blog.csdn.net/jinhaijing/article/details/84257981

后续整合ssm

** MVC设计模式:

在这里插入图片描述
MVC设计模式是一种通用的软件编程思想
(1)控制程序流转的控制器(Controller)
(2)封装数据处理数据的模型(Model)
(3)负责展示数据的视图(view)
好处:结构会变得更加的清晰,可读性强。有利于后期的扩展和维护,并且代码可以实现复用。

猜你喜欢

转载自blog.csdn.net/weixin_42182945/article/details/88318944