配色: 字号:
hibernate之增删查改总结
2015-08-03 | 阅:  转:  |  分享 
  
使用Hibernate实现数据的增删查改操作:

////////////////////////////////////////////////////////

1、加载(即根据主键将一条数据查询出来)



importorg.hibernate.;//导入包

importorg.hibernate.cfg.;



publicclassHibernateTest{

privateSessionsession=null;

publicHibernateTest(){//构造函数

Configurationconfig=newConfiguration().configure()//第一步:得到配置对象

SessionFactorysf=config.buildSessionFactory();//第二步:得到会话工厂

session=sf.openSession();//第三步:打开会话

}





publicvoidclose(){

session.close();

}



publicstaticvoidmain(String[]args){

HibernateTesttest=newHibernateTest();

this.close();

}



//加载,即根据主键查询数据的方法

publicCustomerget(Stringid){

//实质上在Hibernate中就只需下面这一句话

Customercust=(Customer)session.get(Customer.class,id);

returncust;

}

//测试加载的方法

publicvoidtestLoad(){

Customercust=this.get("209");

System.out.println(cust.getCustomerId()+":"+cust.getPassword());

}

}

从上可得,使用Hibernate加载数据只需一行代码,不再需要繁琐的从ResultSet中取数据封装到实体的代码

注意:load方法与get方法的用法一样,但是如果在load方法调用得到cust对象后,其他任何地方要使用cust对象,则不能在使用cust对象之前出现session.close()方法,否则会报nosession的异常。而这种情况get方法就不会发生.

////////////////////////////////////////////////////////////



2、保存

注意:Hibernate中执行增删改操作一定要在事务环境中完成

publicvoidtestSave(){



Transactiontran=null;

try{

tran=session.beginTransaction();//第四步,开始一个事务

//第五步,持久化操作

Customercust=newCustomer();

cust.setCustomerId("211");cust.setFirstName("zhang");

cust.setMiddleInitial("d");cust.setLastName("san");

cust.setPassword("111");cust.setCity("changsha");

cust.setEmail("zhang@126.com");cust.setPhone("23432344");

cust.setState("H");cust.setStreet("五一大道");

cust.setZip("41001");

session.save(cust);//保存对象

tran.commit();//提交事务

}catch(Exceptionex){

if(tran!=null){

tran.rollback();

}

ex.printStackTrace();

}finally{

session.close();

}

}

//////////////////////////////////////////////////////////

3、更新

publicCustomerget(Stringid){

......//上面第一点中的get代码

}

publicvoidtestUpdate(){

Transactiontran=null;

try{

tran=session.beginTransaction();//增删改之前一定要开启事务

Customercust=this.get("211");//先加载,再修改

cust.setFirstName("wang");

session.update(cust);//执行修改的代码

tran.commit();

}catch(Exceptionex){

if(ex!=null){

tran.rollback();

}

ex.printStackTrace();

}finally{

session.close();

}

}

注意:因为Hibernate是使用面向对象的语义,所以在更新、删除时,要操作的应该是对象,而不是主键或其他的字段。因此要先加载数据,得到对象之后,再更新或删除对象

////////////////////////////////////////////////////

4、删除

publicCustomerget(Stringid){

......//上面第一点中的get代码

}

publicvoidtestDelete(){

Transactiontran=null;

try{

tran=session.beginTransaction();

Customercust=this.get("211");//先加载,再删除

session.delete(cust);//执行删除的对象

tran.commit();

}catch(Exceptionex){

if(ex!=null){

tran.rollback();

}

ex.printStackTrace();

}finally{

session.close();

}

}

献花(0)
+1
(本文系无聊小书生首藏)