千锋教育-做有情怀、有良心、有品质的职业教育机构
1. 一级缓存
指的是mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入sqlSession中,再次查询的时候,先去sqlSession中查询,有的话直接拿出,当sqlSession消失时,mybatis的一级缓存也就消失了,当调用sqlSession的修改、添加、删除、commit()、close()等方法时,会清空一级缓存。
2. 二级缓存
指的是mybatis中的sqlSessionFactory对象的缓存,由同一个sqlSessionFactory对象创建的sqlSession共享其缓存,但是其中缓存的是数据而不是对象。当命中二级缓存时,通过存储的数据构造成对象返回。查询数据的时候,查询的流程是二级缓存 > 一级缓存 > 数据库。
3. 二级缓存执行时机
如果开启了二级缓存,sqlSession进行close()后,才会把sqlSession一级缓存中的数据添加到二级缓存中,为了将缓存数据取出执行反序列化,还需要将要缓存的pojo实现Serializable接口,因为二级缓存数据存储介质多种多样,不一定只存在内存中,也可能存在硬盘中。
4. mybatis执行步骤
mybatis框架主要是围绕sqlSessionFactory进行的,具体的步骤:
定义一个configuration对象,其中包含数据源、事务、mapper文件资源以及影响数据库行为属性设置settings。
通过配置对象,则可以创建一个sqlSessionFactoryBuilder对象。
通过sqlSessionFactoryBuilder获得sqlSessionFactory实例。
通过sqlSessionFactory实例创建sqlSession实例,通过sqlSession对数据库进行操作。
5. 代码实例
5.1 mybatis-config.xml文件内容
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd"> 
 
<configuration> 
 <!-- 加载类路径下的属性文件 --> 
 <properties resource="db.properties"/> 
 
 <!-- 设置类型别名 --> 
 <typeAliases> 
 <typeAlias type="cn.itcast.javaee.mybatis.app04.Student" alias="student"/> 
 </typeAliases> 
 
 <!-- 设置一个默认的连接环境信息 --> 
 <environments default="mysql_developer"> 
 
 <!-- 连接环境信息,取一个任意唯一的名字 --> 
 <environment id="mysql_developer"> 
 <!-- mybatis使用jdbc事务管理方式 --> 
 <transactionManager type="jdbc"/> 
 <!-- mybatis使用连接池方式来获取连接 --> 
 <dataSource type="pooled"> 
 <!-- 配置与数据库交互的4个必要属性 --> 
 <property name="driver" value="${mysql.driver}"/> 
 <property name="url" value="${mysql.url}"/> 
 <property name="username" value="${mysql.username}"/> 
 <property name="password" value="${mysql.password}"/> 
 </dataSource> 
 </environment> 
 
 <!-- 连接环境信息,取一个任意唯一的名字 --> 
 <environment id="oracle_developer"> 
 <!-- mybatis使用jdbc事务管理方式 --> 
 <transactionManager type="jdbc"/> 
 <!-- mybatis使用连接池方式来获取连接 --> 
 <dataSource type="pooled"> 
 <!-- 配置与数据库交互的4个必要属性 --> 
 <property name="driver" value="${oracle.driver}"/> 
 <property name="url" value="${oracle.url}"/> 
 <property name="username" value="${oracle.username}"/> 
 <property name="password" value="${oracle.password}"/> 
 </dataSource> 
 </environment> 
 </environments> 
 
 <!-- 加载映射文件--> 
 <mappers> 
 <mapper resource="cn/itcast/javaee/mybatis/app14/StudentMapper.xml"/> 
 </mappers> 
 
</configuration>
5.2 MyBatisTest类
public class MyBatisTest {
public static void main(String[] args) {
 try {
 //读取mybatis-config.xml文件
 InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
 //初始化mybatis,创建SqlSessionFactory类的实例
 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
 //创建session实例
 SqlSession session = sqlSessionFactory.openSession();
 /*
 * 接下来在这里做很多事情,到目前为止,目的已经达到得到了SqlSession对象.通过调用SqlSession里面的方法,
 * 可以测试MyBatis和Dao层接口方法之间的正确性,当然也可以做别的很多事情,在这里就不列举了
 */
 //插入数据
 User user = new User();
 user.setC_password("123");
 user.setC_username("123");
 user.setC_salt("123");
 //第一个参数为方法的完全限定名:位置信息+映射文件当中的id
 session.insert("com.cn.dao.UserMapping.insertUserInformation", user);
 //提交事务
 session.commit();
 //关闭session
 session.close();
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
}
更多关于“Java培训”的问题,欢迎咨询千锋教育在线名师。千锋已有十余年的培训经验,课程大纲更科学更专业,有针对零基础的就业班,有针对想提升技术的好程序员班,高品质课程助力你实现java程序员梦想。
 
                 
                相关推荐