Hibernate对数据库的操作总结

Hibernate对数据库的操作比较灵活,本文就其对数据库的增、删、改、查的几种方式进行了总结:

public class Test {
 
 /**
  * 添加---仅有一种方式
  *     将刚创建的瞬态改变成持久化状态,session关闭之后又变为游离状态
  */
 public static void add(){
  GoodsInfo goodsInfo=new GoodsInfo();
  goodsInfo.setG_amount(22);
  goodsInfo.setG_categoryId("糕点");
  goodsInfo.setG_name("法拉利糕点");
  goodsInfo.setG_price(12.5f);
  int res=DBUtils.add(goodsInfo);
  if (res>1) {
   System.out.println("添加成功!");
  }
 }
 
 /**
  * 查询的第一中方式:使用hql语句
  */
 @SuppressWarnings("unchecked")
 public static void queryByHql(){
  String hql=" from GoodsInfo ";
   Session session=SessionFactoryTools.getSession();
   Query  query   =  session.createQuery(hql);
   List<GoodsInfo>  list = query.list();
   for(GoodsInfo goodsInfo : list){
   System.out.println("使用hql语句:"+goodsInfo.getG_name());
   }
 }
  /**
  * 查询的第二种方式:使用持久化对象
  * @param args
  */
 public static void queryByPersistent(){
  Session session=SessionFactoryTools.getSession();
  Transaction  tx=session.beginTransaction();
        GoodsInfo goods=(GoodsInfo)session.get(GoodsInfo.class, 22);
        //此处的tx.commit()有用吗?
        tx.commit();
        System.out.println("商品名称:"+goods.getG_name());
  
 }
 
 /**
  *删除操作第一种方法--从持久化对象中执行删除操作
  */
 public static void deleteByPersistent(){
  Session session= SessionFactoryTools.getSession();
  Transaction tx=session.beginTransaction();
  try {
  /*得到持久化对象*/
  GoodsInfo goodsInfo= (GoodsInfo)session.get(GoodsInfo.class, 41);
  /*对持久化对象执行删除操作*/
  session.delete(goodsInfo);
  tx.commit();
  }
  catch (Exception e) {
    e.printStackTrace();
    tx.rollback();
  }
 }
 
 /**
  *删除操作第二种方法--创建对象,给对象设置id
  */
 public static void deleteByObj(){
  Session session= SessionFactoryTools.getSession();
  Transaction tx=session.beginTransaction();
  try {
  //GoodsInfo goodsInfo= (GoodsInfo)session.get(GoodsInfo.class, 22);//获取持久化对象
  GoodsInfo goodsInfo=new GoodsInfo();//创建类,为类设置id
  goodsInfo.setId(22);
  session.delete(goodsInfo);
  tx.commit();
  }
  catch (Exception e) {
    e.printStackTrace();
    tx.rollback();
  }finally{
   session.close();
  }
 }
 /**
  * 修改的操作 方法之一--从持久化类中进行更改
  * 优点:不需要修改的字段不需要重新赋值时
  * 缺点:增加了一次查询操作
  */
 public static void updateByPersistent(){
  Session session=SessionFactoryTools.getSession();
  Transaction tx=session.beginTransaction();
  try {
  GoodsInfo goodsInfo=(GoodsInfo)session.get(GoodsInfo.class, 43);
  //goodsInfo.setId(1);//id的值无法更改
  goodsInfo.setG_amount(111);
  goodsInfo.setG_categoryId("00111");
  //如果其他的字段不更改,就不需要重新设置他们的值
  //session.update(goodsInfo);//此句可以省略
  tx.commit();
  }
  catch (Exception e) {
   e.printStackTrace();
   tx.rollback();
  }finally{
   session.close();
  }
 }
 
 /**
  * 更改的方式二:创建一个对象,设置id,执行session.update()
  * 优点:不需要进行查询操作
  * 缺点:即使仅需要更新一个字段,其他字段的值也都必须进行set设值,否则他们的值都变为空
  */
 public  static void updateByObject(){
  GoodsInfo goodsInfo=new GoodsInfo();
  goodsInfo.setId(42);
  goodsInfo.setG_name("够格");
  DBUtils.update(goodsInfo);
  
 }
 /**
  * 尝试对更改方法一的封装
  */
 public static void  updateTry(){
  Session session=SessionFactoryTools.getSession();
  GoodsInfo goodsInfo=(GoodsInfo)session.get(GoodsInfo.class, 43);
  GoodsInfo gInfo=new GoodsInfo();
  gInfo.setG_amount(2222);
  gInfo.setG_categoryId("222");
  gInfo.setG_name("222");
  session.save(gInfo);
  DBUtils.update2(goodsInfo, 43, goodsInfo);
 }
 
 /**
  * @param args
  */
     public static void main(String[] args) {
         //add();
         //deleteByObj();
       //deleteByPersistent();
       //updateByPersistent();
      //updateByObject();
      updateTry();
 }

}

 

 

posted on 2012-09-07 22:08  金慧海  阅读(208)  评论(0)    收藏  举报

导航