Hibernate初学小笔记1《2017-09-06》

来源:互联网 发布:35vb化学成分 编辑:程序博客网 时间:2024/06/07 12:34

一、
实体类对象在Hibernate中有3种状态,分别是瞬时,持久和脱管

瞬时:指的是没有和hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,这个对象也就消失了

持久:指得是一个对象和hibernate发生联系,有对应的session,并且在数据库中有对应的一条记录

脱管:指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的session已经关闭了

严格来说,应该是在commit之后才算持久状态,单纯save之后,数据库中是无法查询到记录的

文章来源于

http://how2j.cn/k/hibernate/hibernate-status/53.html

二、
**Object** o = (**Object**)s.get(**Object.class**,id);
o.setName("AQMi");
s.update(o);

根据hql创建一个Query对象(Query是基于0的,PreparedStatement是基于1的),通过Query对象的list()方法即返回查询的结果。

PS:使用hql的时候,不需要在前面加 select *

public class TestHibernate {    public static void main(String[] args) {        SessionFactory sf = new Configuration().configure().buildSessionFactory();        Session s = sf.openSession();        s.beginTransaction();        **String q = "AQM";        Query query = s.createQuery("FROM Product p WHERE p.name like ?");        query.setString(0,"%"+q+"%");        List<Product> list = query.list();        for (Product p:list) {            System.out.println(p.getId()+","+p.getName());        }**//前后都不用变,只需要修改这些        s.getTransaction().commit();        s.close();        sf.close();    }}

文章来源于

http://how2j.cn/k/hibernate/hibernate-hql/37.html#nowhere

三、
使用Criteria,根据name进行模糊查询
1. 通过session的createCriteria创建一个Criteria 对象

  1. Criteria.add 增加约束。 在本例中增加一个对name的模糊查询(like)

  2. 调用list()方法返回查询结果的集合

Criteria c= s.createCriteria(Product.class);        c.add(Restrictions.like("name", "%"+name+"%"));        List<Product> ps = c.list();        for (Product p : ps) {            System.out.println(p.getName());        }

文章来源于

http://how2j.cn/k/hibernate/hibernate-sql/38.html

四、
Hibernate依然保留了对标准SQL语句的支持,在一些场合,比如多表联合查询,并且有分组统计函数的情况下,标准SQL语句依然是效率较高的一种选择。

        String sql = "select * from product_ p where p.name like '%"+name+"%'";        Query q= s.createSQLQuery(sql);        List<Object[]> list= q.list();        for (Object[] os : list) {            for (Object filed: os) {                System.out.print(filed+"\t");            }            System.out.println();        }

文章来源于

http://how2j.cn/k/hibernate/hibernate-sql/39.html