<!-- 使用二级缓存,默认是未打开的 -->
<!-- 指定要使用的缓存的要提供的供应商,这也就打开了二级缓存 -->
<property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<!-- 指定要使用二级缓存实体类 -->
<class-cache usage="read-write" class="cn.itcast.l_second_cache.Employee"/>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="foo">
<!-- 配置数据库信息 -->
<!-- 方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- mysql连接配置 -->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate_20170423</property>
<!-- 配置连接mysql驱动 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- mysql用户名 -->
<property name="connection.username">root</property>
<!-- mysql密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 其它配置 -->
<!-- 显示生成的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语 -->
<property name="hibernate.format_sql">false</property>
<!-- create:先删除,再创建。 update:如果表不存在就创建,不一样就更新,一样就什么都不做。 create-dorp:初始化时创建表,SessionFactory执行close()时删除表。
validate:验证表结构是否一致,如果不一致,就抛异常。 -->
<property name="hbm2ddl.auto">update</property>
<!-- 设置默认事务隔离级别
隔离级别中文 隔离级别英文 对应的整数表示
读未提交 READ UNCOMMITED 1
读已提交 READ COMMITED 2
可重复读 REPEATABLE READ 4
串行化(不可并发) SERIALIZEABLE 8
-->
<property name="connection.isolation">2</property>
<!-- c3p0连接池设定 -->
<!-- 使用c3p0连接池 配置连接池提供的供应商 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!-- 在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">20</property>
<!-- 设定数据库连接时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
<!-- 每3000秒检查所有连接池中空闲连接 以秒为单位 -->
<property name="c3p0.idle_test_period">3000</property>
<!-- 使用二级缓存,默认是未打开的 -->
<!-- 指定要使用的缓存的要提供的供应商,这也就打开了二级缓存 -->
<property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<!-- 指定要使用二级缓存实体类 -->
<class-cache usage="read-write" class="cn.itcast.l_second_cache.Employee"/>
<!-- 导入映射文件 -->
<!-- <mapping resource="cn/itcast/a_helloworld/User.hbm.xml" /> -->
</session-factory>
</hibernate-configuration>
package cn.itcast.l_second_cache;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
/**
* 应用程序操作类
*
* @author 风清杨
* @version V3.0
*
*/
public class App {
private static SessionFactory sessionFactory = new Configuration()//
.configure()//
.addClass(Department.class)//
.addClass(Employee.class)//
.buildSessionFactory();
// 测试一级缓存(一级缓存[在控制台显示2条查询语句])
@Test
public void testSessionCache() throws Exception {
// ====================================第1个Session
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
// ------------------------------------
// 获取一方数据,并显示另一方信息
Employee employee = (Employee) session.get(Employee.class, 1);
// System.out.println(employee);
// ------------------------------------
tx.commit();
} catch (RuntimeException e) {
tx.rollback();
throw e;
} finally {
session.close();
}
// ====================================第二2个Session
Session session2 = sessionFactory.openSession();
Transaction tx2 = null;
try {
tx2 = session2.beginTransaction();
// ------------------------------------
// 获取一方数据,并显示另一方信息
Employee employee2 = (Employee) session2.get(Employee.class, 1);
// System.out.println(employee2);
// ------------------------------------
tx2.commit();
} catch (RuntimeException e) {
tx2.rollback();
throw e;
} finally {
session2.close();
}
}
}