Hibernate笔记整理2(hibernate对象状态)
hibernate的对象有三种状态:瞬时态,持久态,游离态
测试对象三种状态
public class Demo {@Test//查看三种状态特点//持久化状态的特点:持久化状态对象的任何变化都会自动同步到数据库中//save方法:其实不能理解成保存,理解成将瞬时状态转换成持久状态的方法//主键自增,执行save方法时,为了将对象转换为持久态,必须生成id值,所以需要执行insert语句生成public void fun3(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作Customer c = session.get(Customer.class, 1l);//持久化状态对象c.setCust_name("microsoft");//4提交事务,关闭资源tx.commit();session.close(); //游离,托管状态 有id 没有关联}
}
1. 瞬时状态 (Transient)
当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,因为此时customer只是通过JVM获得了一块内存空间,还并没有通过Session对象的save()方法保存进数据库,因此也就还没有纳入Hibernate的缓存管理中,也就是说customer对象现在还自由的游荡于Hibernate缓存管理之外。所以我们可以看出自由对象最大的特点就是,在数据库中不存在一条与它对应的记录
特点:
不和 Session 实例关联
在数据库中没有和瞬时对象关联的记录
2. 持久状态 (Persistent)
持久化对象就是已经被保存进数据库的实体对象,并且这个实体对象现在还处于Hibernate的缓存管理之中。这是对该实体对象的任何修改,都会在清理缓存时同步到数据库中。
特点:
和 Session 实例关联
在数据库中有和持久对象关联的记录
3. 脱管状态 (Detached)
当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它对应的记录,只是现在这个游离对象脱离了Hibernate的缓存管理,而自由对象不会在数据库中出现与它对应的数据记录。
特点:
本质上和瞬时对象相同
只是比爱瞬时对象多了一个数据库记录标识值 id.
三种状态的转换

HQL查询:
public class Demo {//基本查询@Testpublic void fun1(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//------------------------------------------------ //1书写HQL语句String sql="from cn.itheima.domain.Customer";//2根据HQL语句创建查询对象Query query = session.createQuery(sql);//3根据查询对象获得查询结果List<Customer> list = query.list();//返回list结果//query.uniqueResult(); 接收唯一的查询结果System.out.println(list);//------------------------------------------------ //4提交事务tx.commit();session.close(); //托管态}//条件查询@Test//HQL语句中,不可能出现任何数据库相关的语句public void fun2(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//------------------------------------------------ //1书写HQL语句String sql="from cn.itheima.domain.Customer where cust_id=1";//2根据HQL语句创建查询对象Query query = session.createQuery(sql);//3根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult();System.out.println(c);//------------------------------------------------ //4提交事务tx.commit();session.close(); //托管态}//条件查询@Test//问号占位符public void fun3(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//------------------------------------------------ //1书写HQL语句String sql="from cn.itheima.domain.Customer where cust_id=?";//2根据HQL语句创建查询对象Query query = session.createQuery(sql);//设置参数//query.setLong(0, 2l);query.setParameter(0, 3l);//3根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult();System.out.println(c);//------------------------------------------------ //4提交事务tx.commit();session.close(); //托管态}//条件查询@Test//命名占位符public void fun4(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//------------------------------------------------ //1书写HQL语句String sql="from cn.itheima.domain.Customer where cust_id=:cust_id";//2根据HQL语句创建查询对象Query query = session.createQuery(sql);//设置参数//query.setLong(0, 2l);query.setParameter("cust_id", 2l);//3根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult();System.out.println(c);//------------------------------------------------ //4提交事务tx.commit();session.close(); //托管态}//分页查询@Test//命名占位符public void fun5(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//------------------------------------------------ //1书写HQL语句String sql="from cn.itheima.domain.Customer";//2根据HQL语句创建查询对象Query query = session.createQuery(sql);//设置参数//query.setLong(0, 2l);query.setFirstResult(0);query.setMaxResults(2);//3根据查询对象获得查询结果List<Customer> list = query.list();//返回list结果//query.uniqueResult(); 接收唯一的查询结果System.out.println(list);//------------------------------------------------ //4提交事务tx.commit();session.close(); //托管态}}
criteria查询:
public class Demo {//基本查询@Testpublic void fun1(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);List<Customer> list = criteria.list();System.out.println(list);//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态}//条件查询@Testpublic void fun2(){// > gt// >= ge// < lt// <= le// == eq// != ne// in in// between and between// like like// is not null isNotNull// is null isNull// or or// and and//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//添加查询参数=》查询cust_id为1的Customer对象criteria.add(Restrictions.eq("cust_id", 2l));//执行查询获得结果Customer c = (Customer) criteria.uniqueResult();System.out.println(c);//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态}//分页查询@Testpublic void fun3(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//设置分页信息 lim?,?criteria.setFirstResult(1);criteria.setMaxResults(2);List<Customer> list = criteria.list();System.out.println(list);//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态}//查询总记录数@Testpublic void fun4(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);criteria.setProjection(Projections.rowCount());Long count=(Long) criteria.uniqueResult();System.out.println(count);//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态}
}
原生sql查询:
public class Demo {//基本查询@Testpublic void fun1(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//书写sql语句String sql="select * from cst_customer";//创建sql查询对象SQLQuery query = session.createSQLQuery(sql);//调用方法查询结果List<Object[]> list = query.list();//遍历数组for (Object[] objs : list) {System.out.println(Arrays.toString(objs));}//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态}//基本查询@Testpublic void fun2(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//书写sql语句String sql="select * from cst_customer";//创建sql查询对象SQLQuery query = session.createSQLQuery(sql);//指定将结果集封装到哪个对象中query.addEntity(Customer.class);//调用方法查询结果List<Customer> list = query.list();System.out.println(list);//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态}//条件查询@Testpublic void fun3(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//书写sql语句String sql="select * from cst_customer where cust_id=?";//创建sql查询对象SQLQuery query = session.createSQLQuery(sql);query.setParameter(0, 2l);//指定将结果集封装到哪个对象中query.addEntity(Customer.class);//调用方法查询结果List<Customer> list = query.list();System.out.println(list);//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态}//分页查询@Testpublic void fun4(){//1获得sessionSession session = HibernateUtils.openSession();//2控制事务Transaction tx = session.beginTransaction();//3执行操作//----------------------------------------------------------//书写sql语句String sql="select * from cst_customer limit ?,?";//创建sql查询对象SQLQuery query = session.createSQLQuery(sql);query.setParameter(0, 1);query.setParameter(1, 2);//指定将结果集封装到哪个对象中query.addEntity(Customer.class);//调用方法查询结果List<Customer> list = query.list();System.out.println(list);//----------------------------------------------------------//4提交事务tx.commit();session.close(); //托管态} }
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
