hibernate-缓存-JPA-注解

缓存

1.什么是缓存???
缓存就是介于应用程序和磁盘之间的一个存储区域
这就是存储区域就是内存

2.为什么使用缓存
减少了对数据库的访问次数,能够提高查询的效率
3.使用缓存的优缺点
优点:获取数据效率比较块


缺点: 数据不能及时同步,内存消耗表较大
4.如何使用缓存(hibernate中缓存的分类)
一级缓存(session缓存):默认使用的缓存
    当从数据库中查询了数据之后,会将数据存放到一级缓存中,如果下一次需要获取相同的数据时,不会再次查询数据库,而是直接从缓存中获取数据
    
清空缓存:
        evict(对象) --清空缓存中指定的对象数据
        clear()--清空缓存中所有的对象数据
        close()--先清空缓存在关闭session
二级缓存 (sessionFactory) : 内部提供二级缓存接口
    特点: 和session对象没有关系(session是否关闭 对二级缓存无影响)
    对外只读,不能写入
    
 需要第三方:
 
    1.下载第三方的缓存插件(OSCache   EHCahed等)
    
    2.引入缓存插件到项目中  在src目录下引入ehcache.xml缓存配置文件

            
    
    3.ehcache -core -2.4.6.jar   commons - logging -
    
    
    
配置ehcache
            <?xml version="1.0" encoding="UTF-8"?>
<ehcache>
	<!--timeToIdleSeconds 当缓存闲置n秒后销毁 -->
	<!--timeToLiveSeconds 当缓存存活n秒后销毁 -->
	<!--
		缓存配置 name:缓存名称。 maxElementsInMemory:缓存最大个数。
		eternal:对象是否永久有效,一但设置了,timeout将不起作用。
		timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
		timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
		overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
		diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
		maxElementsOnDisk:硬盘最大缓存个数。 diskPersistent:是否缓存虚拟机重启期数据 Whether the
		disk store persists between restarts of the Virtual Machine. The
		default value is false.
		diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
		memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
		clearOnFlush:内存数量最大时是否清除。
	-->
	<diskStore path="java.io.tmpdir" />
	
	<!-- 默认的缓存设置 -->
	 <defaultCache maxElementsInMemory="500" eternal="false"
		timeToIdleSeconds="300" timeToLiveSeconds="1200" overflowToDisk="true" />

	<!-- 自定义缓存配置 -->
	<cache name="com.direct.entity.Empinfo" maxElementsInMemory="500" eternal="false"
		timeToIdleSeconds="2" timeToLiveSeconds="1200" overflowToDisk="true"></cache>
</ehcache> 

配置hibernate.cfg.xml
		<!-- 启用二级缓存 -->
		<property name="hibernate.cache.second_level_cache">true</property>
		
		<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
	<!-- 使用二级缓存   方法1   -->	
    <class-cache usage="read-only" class="全路径"/>
配置hbm.xml
位置在class下面
<!-- 使用二级缓存  方法2   -->
<cache usage="read-write" />

测试
	@Test
		public void T() {
			//创建configuration 对象,加载资源
			Configuration conf=new Configuration().configure();
			//创建SessionFactory 工厂对象,加载执行
			SessionFactory factory=conf.buildSessionFactory();
			Session session=factory.openSession();
			Transaction ts=session.beginTransaction();//开启事务
			//从数据库中取值
			 EmpInfo emp=(EmpInfo)session.get(EmpInfo.class, 2);
		        System.out.println(emp);
		        ts.commit();
		        System.out.println("========================");
		        EmpInfo emp2=(EmpInfo)session.get(EmpInfo.class, 2);
		        System.out.println(emp2);
		        
		        System.out.println("========================");
		        
		        
		       Session session2=factory.openSession();
		       Transaction ts2=session.beginTransaction();//开启事务
		        
		        EmpInfo emp3=( EmpInfo)session2.get( EmpInfo.class, 2);
		        System.out.println(emp3);
		        ts2.commit();
		        System.out.println("=========================");
		}
	
}

JPA

1.什么是JPA

    是由sun公司提供的一套用于java持久化操作规范

2.为什么要使用JPA

    简化现有的持久化开发流程   整合现有的ORM对象关系映射框架

3.如何使用JPA

步骤: 在src 创建目录  META-INF 用于存放JPA的配置文件 persistence.xml  用于配置数据库连接信息


创建实体管理工厂对象 (类似于hibernate 中的sessionfactory对象)

注解

@entity     ---------实体类注解
@table      ---------数据表注解  name="表名"  catalog="数据库名称"
@Id         --------配置主键
@GrenertedValue --------主键生成器
@column         --------指定主键字段
@column         -------指定一般字段

@OneToMany(fetch=FetchType.LAZY,mappedBy="deptinfo") ---懒加载

@OneToMany(fetch=FetchType.EAGER,mappedBy="deptinfo")     ---即时加载

 注意:@OneToMany(fetch=FetchType.EAGER,mappedBy="外键字段对应的实体类的属性名")
    @Joincolmumn(name = "")
    
merge---> 修改
remove ---> 删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值