hibernate二级缓存 。高并发
sessesionFactory配置
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<!-- 是否开启二级缓存 -->
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<!-- 是否启用查询缓存 -->
<prop key="hibernate.cache.use_query_cache">true</prop>
<!-- 配置二级缓存提供商 -->
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<!-- 配置 ehcache.xml的路径-->
<prop key="hibernate.net.sf.ehcache.configurationResourceName">classpath:ehcache.xml</prop>
</props>
</property>
ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<!-- DISKStury路径必须配置,不然报错 -->
<diskStore path="D:\source\ehcache"/>
<!-- 数据过期策略 如果开启查询缓存就必须开启 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="600"
timeToLiveSeconds="600"
overflowToDisk="true"
/>
<!-- 具体到某个类的数据过期策略 -->
<cache name="com.gxuwz.labasswork.model.entity.SysUser"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="true"
/>
</ehcache>
在hbm.xml文件中加入<cache usage="read-write" region="com.gxuwz.labasswork.model.entity.SysUser" />
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.gxuwz.labasswork.model.entity.SysUser" table="sys_user" catalog="lab_ass_work">
<cache usage="read-write" region="com.gxuwz.labasswork.model.entity.SysUser" />
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="userName" type="java.lang.String">
<column name="user_name" length="30" not-null="true" unique="true" />
</property>
<property name="userPwd" type="java.lang.String">
<column name="user_pwd" length="30" />
</property>
<property name="userType" type="java.lang.String">
<column name="user_type" length="10" />
</property>
<property name="stuNo" type="java.lang.String">
<column name="stu_no" length="30" unique="true" />
</property>
<property name="stuName" type="java.lang.String">
<column name="stu_name" length="30" />
</property>
<property name="major" type="java.lang.String">
<column name="major" length="30" />
</property>
<property name="institute" type="java.lang.String">
<column name="institute" length="30" />
</property>
<property name="classes" type="java.lang.String">
<column name="classes" length="30" />
</property>
<property name="grade" type="java.lang.String">
<column name="grade" length="4" />
</property>
<property name="phone" type="java.lang.String">
<column name="phone" length="11" />
</property>
</class>
</hibernate-mapping>
二级缓存当使用load()、get();查询时程序只发送一条sql语句
查询缓存
在使用query.list()之前,必须要开启query.setCacheable(true);