??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美亚洲激情在线,性感美女激情视频在线观看,色是在线视频http://www.aygfsteel.com/chen45257211/category/49090.htmlzh-cnSat, 23 Jul 2011 07:31:22 GMTSat, 23 Jul 2011 07:31:22 GMT60Hibernate上手指南Q{载)http://www.aygfsteel.com/chen45257211/articles/354392.html七孑七孑Fri, 15 Jul 2011 06:00:00 GMThttp://www.aygfsteel.com/chen45257211/articles/354392.htmlhttp://www.aygfsteel.com/chen45257211/comments/354392.htmlhttp://www.aygfsteel.com/chen45257211/articles/354392.html#Feedback0http://www.aygfsteel.com/chen45257211/comments/commentRss/354392.htmlhttp://www.aygfsteel.com/chen45257211/services/trackbacks/354392.html阅读全文

七孑 2011-07-15 14:00 发表评论
]]>
Hibernate API基础?Q{载)http://www.aygfsteel.com/chen45257211/articles/354383.html七孑七孑Fri, 15 Jul 2011 03:33:00 GMThttp://www.aygfsteel.com/chen45257211/articles/354383.htmlhttp://www.aygfsteel.com/chen45257211/comments/354383.htmlhttp://www.aygfsteel.com/chen45257211/articles/354383.html#Feedback0http://www.aygfsteel.com/chen45257211/comments/commentRss/354383.htmlhttp://www.aygfsteel.com/chen45257211/services/trackbacks/354383.html
体系l构? hspace=
上面的这个图?strong>Hiberante应用E序的结?/strong>Q?/div>
对上图中各项的说明如下:Q?QApplicationQ应?Q?QPersistent ObjectQ持久化对象Q?Qhibernate.propertiesQHibernate属性文?Hibernate配置文g Q?QXML MappingQHibernate映射文g Q?QDatabaseQ数据库
 
׃囑֏以看出,Hibernate是通过一pd的配|文件和数据库来实现持久化对象的持久化操作的?/div>
 
Z使用HibernateQ需要创Z数据库中的表对应的持久化对象Q然后再通过影射文g持久化对象中的属性与数据库表中的字段对应h。这h能通过持久化对象完成对数据库表中的数据的增加、修攏V查询和删除操作?/div>
 
Hibernate主要包括三个lgQ?/div>
 Q?Q连接管理组?/strong>Q它提供了高效的数据库连接管理。数据库q接是和数据库进行交互的唯一渠道Q徏立和关闭一个连接需要耗费大量的资源。所以现在的应用E序都采用连接池的方法来理与数据库的连接,避免频繁的徏立和关闭数据库连?/div>
  Q?Q事务管理组?/strong>Q通过事务Q一ơ可以执行多个SQL语句Q而且能够保证q些语句执行成功或者都不成?/div>
  Q?Q对?关系映射l徏Q对?映射技术可以实C对象模型到数据库中关pL型的映射工作。通过q一技术,Hibernate实现了对象的持久化操作?/div>
 
Hinernate的体pȝ构(q行Ӟ
׃Hibernate非常灉|Q而且提供了多U运行时的结构组成方案,q里介绍的时一?#8220;最全面”的体pȝ构,它最大程度的完成了对持久层功能的装Q也׃得在开发中要完成的工作量最,是在发中最l常使用的一U方式。这U方式把JDBC/JTA都交由Hibernated成,而不需要对q一部分q行M处?span>    
   “重量U?#8221;体系l构
     各个部分的主要功能如?nbsp;
 
SessionFactoryQ它保存了对当前数据库配|的所有映关p,它是某个数据库的映关pȝq编译之后全部保存在内存中的?它还是生成Session的工厂,它在q行实例化的q程中将会用到ConnectionProvider?span style="color: #000080; ">一个SessionFactory对应一个数据库q接Q当数据库连接改变时需要修改SessionFactory
SesionQ是q行持久化操作的基础Q所有的持久化操作都是在Session的基上进行的。它相当与JDBC中的Connection。它是Hibernate的持久化理器的核心Q提供了一pd的持久化操作Ҏ。另外,它还持有一个针Ҏ久化对象的一U缓存,在遍历持久化对象或者根据持久化标识查找对象的时候会用到?/div>
TransationQ功能上和数据库中的事务完全一P通过它实现对数据库中事务的控制。Transation对象是Session对象产生的,所以他的生命周期比Session短。一个Session的生命周期中可以有多个Transaction对象?/div>
ConnectonProviderQ主要作用是生成与数据库建立了连接的JDBC对象Q同时他q作为数据库q接的缓冲池。通过ConnectionProvider实现了应用程序和底层的DataSource和DriverManager的隔R?/div>
TransactionFactoryQ是生成Transaction对象的工厂,通过TransactionFactory实现了事务的装Q其具体的实现Ҏ与应用程序无兟?/div>
 
Hibernate对象的生命周?/span>
 
一共有三种生命周期Q?/div>
Q?strong>1Q瞬?/strong>Q表C实体对象在内存中是自由存在的Q也是?span style="color: #ff0000; ">?strong>数据库中的数据没有Q何的兌。即Q该实体从未与Q何持久化上下文联p过Q没有持久化标识Q相当与主键Q。瞬态实体的特征有:
               与数据库中的记录没有M兌Q也是没有与其相关联的数据库记?/div>
              与Session没有M关系Q也是没有通过Session对象的实例对其进行Q何持久化的操作?/div>
Q?Q持久?/strong>Q指该实体对象处于Hibernate框架所理的状态,也就是说q个实体对象是与Session对象的实例相关的?span style="color: #ff0000; ">处于持久态的实体对象的最大特征是对其所作的M变更操作都将被Hibernate持久化到数据库中?/strong>处于持久态的对象h的特征ؓQ?/span>
               每个持久态对象都于一个Session对象兌
               处于持久态的对象是于数据库中的记录相兌?/div>
               Hibernate会根据持久态对象的属性的变化而改变数据库中的相应记录
Q?Q游L?/strong>Q处于持久态的实体对象Q当他不再与Session对象兌Ӟq个对象变成了游离态。。游L对象的特征有:
                游离态对象一定是由持久态对象{换而来
                游离态实体不再于Session兌
               游离态实体对象与数据库中的数据没有直接联p,主要表现在对其进行的修改不再影响到数据库中的数据
               游离态实体对象在数据库中有相应的数据记录Q如果该记录没有被删除)
 
判断一个实体对象是否处于瞬态:
 
               该实体对象的<id>属性(如果存在Q的gؓI?/div>
               如果在映文件中?lt;id>讄了unsaved-value属性,q且实体对象的id属性的gunsaved-value属性的值相?/div>
              如果q个实体对象配置version属性,q且version属性的gؓI?/div>
               在映文件中为version属性设|了unsaved-value属性,q且version属性的gunsavedQvalue属性的值相同?/div>
               如果讄了interceptorQƈ且interceptor的isUnsavedQ)Ҏ的返回gؓtrue
满上述条g的实体对象就处于瞬态,否则为游L(前提是不处于持久态)
 
下面通过一D代码来说明状态问题:
 
public class LifeCycle
{
 public static final SessionFactory sessionFactory;
 
 static
 {
  sessionFactory = new Configuration().configure().buildSessionFactory();
 }
 
 public static void main(String[] args)
 {
  LifeCycle.lifecycle();
 }
 
 public static void lifecycle()
 {
  // 创徏游离态实体对象User
  User user = new User();
  user.setName( "abc" + String.valueOf( Math.random() ) );
  // Z避免两次q行的用户名重复Q所以增加了随机?br />  user.setPassword( "def" );
  // user仍然处于游离?/div>
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();
  // 此时user对象仍然是Transient状?br />  session.save( user );
  // 此时Quser对象已经被纳入了Hibernate的实体管理容器中Qƈ转变为Persistent状?br />  System.out.println( "User 1:" + user );
  // 此时的id已经有g?br />  get( user.getId() );
  // 但ƈ未真正的执行数据库的操作Q所以无法得到对象的?br />  tx.commit();
  // 事务被提交后Q将向数据库的用戯中插入一条记?br />  System.out.println( "Transaction 1 commit!" );
  get( user.getId() );
  // q时可以由数据库中得到刚才插入的user对象了?br />  
  Transaction tx2 = session.beginTransaction();
  user.setPassword( "mmmmmmmmmmmmm" );
  tx2.commit();
  // 虽然q个事务中ƈ没有调用Session的save()Ҏ来保存user对象
  // 但由于user对象处于Persistent状态,所以对user对象所做的M修改都将被持久化到数据库?br />  // 那么数据库中的用户密码也应该变ؓ了def?br />  System.out.println( "Transaction 2 commit!" );
  session.close();
  get( user.getId() );
  // 此时密码已经变ؓ新的g
 }
 
 public static User get( String id )
 {
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();
  
  User user = (User)session.get( User.class, id );
  // Hibernate在返回User对象之间会将其纳入到Hibernate的实体管理容器中
  // 所以,q时的user对象是Persistent状态的
  display( user );
  
  tx.commit();
  session.close();
  
  return user;
 }
 
 public static void display( Object obj )
 {
  System.out.println( obj );
 }
}
 
 
 
 
 
 
             
 
 
 
 
 
提示1QHibernate支持四种数据库连接池的组?/strong>
(1)C3P0。这是Hiberante自n提供的。其文档地址见:www.mchange.com/projects/c3p0/index.htmlQ有关Hibernte中配|c3p0的文档参考:www.hibernate.org/214.html
 (2)DBCPQ它是Apache软g基金l织的一个开源项目。由于在Hibernte3中不再提供DBCConnectionProvidercL直接使用DBCP建立数据库的q接池,在这里提供两U方法解册个问题。一U是仿照Hibernate2中的DBCPConnectionProviderc自己实C个用DBCPq实CConnetcitonProvider接口的连接池cR另一U是让应用服务器通过JNDI的方式来提供数据库的q接QHibernate通过JNDI得到数据库的q接。DBCP的详l信息见Q?a >http://jakarta.apache.org/commons/dbcp/。关于自己实现ConnectionProvider接口的方法见http://wiki.apache.org/jakarta-commons/DBCP/Hibernate
(3)ProxoolQ也是开放源代码的提供数据库q接池的lg。其官方|站为:http://proxool.sourceforge.net。有关配|的详细参数见官方网?br />
文章来源Q?a >http://www.360doc.com/content/06/1126/17/2434_273160.shtml


七孑 2011-07-15 11:33 发表评论
]]> վ֩ģ壺 ˮ| | ڰ| | ƽ̶| | | | | ǿ| ˮ| | | ֦| Ž| »| | ʡ| ɽ| | ɽ| | Ϫ| ˮ| ƽ| | ڳ| | Զ| ˫Ѽɽ| | ɽ| | Ǭ| | | | | | | |