Hibernate基础

来源:互联网 发布:mysql中的分页语句 编辑:程序博客网 时间:2024/05/13 18:09
Hibernate是众多ORM工具中的佼佼者。那么什么是ORM呢?面向对象思想是软件开发的基本思想,而关系数据库又是应用系统中必不可少的。为了解决关系数据库和面向对象的区别。ORM便应运而生。ORM:Object Relational Mapping,即对象关系映射。他的作用是在关系数据库和对象之间做一个自动映射,将数据库中的数据表映射成对象(持久化类),对关系型数据已对象的形式进行操作。
   在myeclipse中新建一个项目 然后add Hibernate capabilities...会自动生成Hibernate框架。在src下会有一个hibernate.cfg.xml配置文件。里面包括整个数据库的信息。其中jdbc:mysql://localhost:3306/xsl
如果通过hibernate像数据库中写入中文显示不出来。将上面的改为jdbc:mysql://localhost:3306/xsl?useUnicode=true&characterEncoding=UTF-8其中&为&的转义字符。持久化类可以通过hibernate反向生成持久化类生成,具体过程百度。。这样一个hibernate框架的项目就自动生成了。
   此时项目中有hibernate.cfg.xml文件,持久化类,和HibernateSessionFactory类(默认是这么个名字,可以自己改)。HibernateSessionFactory中主要的是getSession()返回的是一个Session对象和closeSession()关闭Session对象释放资源。Session对象是Hibernate中数据持久化操作的核心,它负责Hibernate所有的持久化操作。在这个类中有一个ThreadLocal对象。他叫线程局部变量。ThreadLocal和Synchonized都用于解决多线程并发访问,后者是利用锁的机制,使变量、对象、代码块在某一时间只能被一个线程访问。而前者为每一个线程提供的是变量、对象、代码块的副本。使每个线程在某一时间访问的并不是同一个对象。主要用于线程间的数据隔离,而Synchonized用于线程间的数据共享。
   假设项目中有一个Produce的持久化类和一个HibernateSessionFactory类,实现简单的增删改查功能。就写一下关键一点的步骤吧。记得最后使用HibernateSessionFactory.closeSession();
添加数据:Session session=HibernateSessionFactory.getSession();
Produce produce=new Produce(xxx,xxx,xxx...);
session.getTransaction.begin();
session.save(produce);
session.commit();
查询数据:Session session=HibernateSessionFactory.getSession();
Produce produce=(Produce)session.get(Produce.class,new Integer("3"));这里用load方法也可以。
System.out.print(produce.getXXX());
删除数据:Produce produce=session.get(Produce.class.new Integer("X"));
session.delete(produce);
session.flush();
更新数据:Produce produce=session.get(Produce.class,new Integer("X));
produce.setXXX();
 ...
session.flush();
get()方法含有两个参数,第一个为持久化对象,第二个为持久化对象中的唯一性标示(我理解为数据表的主键),返回null或者一个持久化对象。
load()方法和get()方法的区别:get首先查询session缓存,没有就查询数据库,load首先查询session缓存,没有就创建一个代理,实际使用数据时在去查询二级缓存和数据库。
Transaction:事物即一组业务整体处理的行为,如果一组业务中任何一个业务有差错的话就认为该事物不成功,需要回滚来撤销之前的操作。
延迟处理:创建一个代理对象,长时间不调用会被垃圾回收,调用的时候在去数据库查询数据,非延迟加载会直接访问数据库。采用延迟加载将会优化系统的性能。可以通过load方法或者在property元素中设置lazy=“true”来实现。
Hibernate缓存:缓存是数据库数据在内存中的临时容器。是数据库与应用程序的中间件。Hiberante数据缓存分为一级缓存和二级缓存。
一级缓存属于session级缓存,他的生命周期和session是相同的。并且不同的Session之间是不能共享一级缓存的。
二级缓存由所有session对象共享。hibernate本身并没有提供二级缓存的产品化实现。所以需要引用第三方插件。二级缓存常用于数据更新频率低,系统频繁使用的非关键数据。以防止用户频繁访问数据库,过度消耗系统资源。
0 0
原创粉丝点击