5. Hibernate的简易CURD操作

HibernateUtils类:负责封装SessionFactory的创建、session 创建和销毁

 

package com.bjsxt.hibernate;

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

 

public class HibernateUtils {

 

       private static SessionFactory factory;

      

       static {

              try {

                     Configuration cfg = new Configuration().configure();

                     factory = cfg.buildSessionFactory();

              }catch(Exception e) {

                     e.printStackTrace();

              }

       }

      

       public static SessionFactory getSessionFactory() {

              return factory;

       }

      

       public static Session getSession() {

              return factory.openSession();

       }

      

       public static void closeSession(Session session) {

              if (session != null) {

                     if (session.isOpen()) {

                            session.close();

                     }

              }

       }

}

 

简易的CURD操作示例:

 

package com.bjsxt.hibernate;

 

import java.util.Date;

import org.hibernate.Session;

import org.hibernate.Transaction;

import junit.framework.TestCase;

 

public class SessionTest extends TestCase {

      

       //hibernatetransientpersistentdetached状态演示

       public void testSave1() {

              Session session = null;

              Transaction tx = null;

              User user = null;

              try {

                     session = HibernateUtils.getSession();

                     tx = session.beginTransaction();

                    

                     //Transient状态

                     user = new User();

                     user.setName("李四");

                     user.setPassword("123");

                     user.setCreateTime(new Date());

                     user.setExpireTime(new Date());

                    

                     //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步

                     session.save(user);

                    

                     user.setName("王五");//hibernate采用拍照技术,保持对象在session和数据库中的一致性

                     tx.commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     tx.rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

             

              //detached状态

              user.setName("张三");

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    //persistent状态

                     session.update(user);

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }           

       }

      

       //get方法不支持lazy

       public void testReadByGetMethod1() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     //马上发出查询sql,加载User对象

                     User user = (User)session.get(User.class, "402880d01b9bf210011b9bf2a2ff0001");

                     System.out.println("user.name=" + user.getName());

                    

                     //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步

                     user.setName("龙哥");

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }

      

       //采用get加载数据,如果没有匹配的数据,返回null

       public void testReadByGetMethod2() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     //采用get加载数据,如果数据库中不存在相应的数据,返回null

                     User user = (User)session.get(User.class, "asdfsafsdfdsf");

 

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }

      

       //load方法采用lazy加载,返回的是cglib代理对象,只有真正使用对象(session未关闭)时,才能发sql语句

       public void testReadByLoadMethod1() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     //不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)

                     //延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)

                     //hibernate延迟加载实现原理是代理方式

                     User user = (User)session.load(User.class, "402880d01b9bf210011b9bf2a2ff0001");

                     System.out.println("user.name=" + user.getName());

                    

                     //persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步

                     user.setName("发哥");

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }

      

       //采用load方法加载数据,如果没有匹配的数据,会抛出ObjectNotFoundException异常

       public void testReadByLoadMethod2() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     //采用load加载数据,如果数据库中没有相应的数据

                     //那么抛出ObjectNotFoundException

                     User user = (User)session.load(User.class, "55555555");

                    

                     System.out.println(user.getName());

                    

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

                     throw new java.lang.RuntimeException();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }

      

       //判断对象在数据库中是否有与之匹配的数据,主要是判断对象的ID属性和对应表中的ID字段是否有对应

       public void testUpdate1() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

                     //手动构造的detached状态的对象

                     User user = new User();

                     user.setId("402880d01b9be8dc011b9be9b23d0001");

                     user.setName("德华");

                    

                     session.update(user);

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }    

      

       //delete方法功能演示

       public void testDelete1() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                    

//                   //手动构造的detached状态的对象

//                   User user = new User();

//                   user.setId("402880d01b9be8dc011b9be9b23d0001");

//                   user.setName("德华");

//                   session.delete(user);

                    

                     User user = (User)session.load(User.class, "402880d01b9be8dc011b9be9b23d0001");

                     session.delete(user);

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

             

              //transient状态

       }

 

       //query接口初步

       public void testQuery() {

              Session session = null;

              try {

                     session = HibernateUtils.getSession();

                     session.beginTransaction();

                     Query query = session.createQuery("from User");

                     query.setFirstResult(2);

                     query.setMaxResults(2);

                     List userList = query.list();

                     for (Iterator iter=userList.iterator(); iter.hasNext();) {

                            User user = (User)iter.next();

                            System.out.println(user.getId());

                            System.out.println(user.getName());

                     }

                     session.getTransaction().commit();

              }catch(Exception e) {

                     e.printStackTrace();

                     session.getTransaction().rollback();

              }finally {

                     HibernateUtils.closeSession(session);

              }

       }           

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值