|
hibernate之增删查改总结 |
|
|
使用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();
}
}
|
|
|
|
|
|
|
|
|
|
|