Hibernate HQL,Criteria和SQL

Hibernate HQL和Criteria

  HQL:HQL(Hibernate Query Language)是hibernate专门用于查询数据的语句,有别于SQL,HQL 更接近于面向对象的思维方式。

 1 /**
 2  * ---------HQL查询根据name进行模糊查询--------
 3
 4  */
 5 public class TestHibernate6 {
 6     public static void main(String[] args) {
 7         SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
 8         Session session = sessionFactory.openSession();
 9         session.beginTransaction();
10         //模糊查询
11         String name="iPhone";
12         //HQL查询SQL语句
13         Query query = session.createQuery("from Product p where p.name like ?");
14         query.setString(0,"%"+name+"%");
15         List<Product> productList = query.list();
16         for (Product product : productList) {
17             System.out.println(product);
18         }
19         //提交时事务
20         session.getTransaction().commit();
21         //关闭
22         session.close();
23         sessionFactory.close();
24     }
25
26 }

  Criteria:与HQL和SQL的区别是Criteria 完全是 面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹

 1 /**
 2  * ---------Criteria查询根据name进行模糊查询--------
 3  * @author fereli
 4  */
 5 public class TestHibernate7 {
 6     public static void main(String[] args) {
 7         SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
 8         Session session = sessionFactory.openSession();
 9         session.beginTransaction();
10         //模糊查询
11         String name="iPhone";
12         //Criteria的使用
13         Criteria criteria = session.createCriteria(Product.class);
14         criteria.add(Restrictions.like("name","%"+name+"%"));
15         List<Product> productList = criteria.list();
16         for (Product product : productList) {
17             System.out.println(product);
18         }
19         //提交时事务
20         session.getTransaction().commit();
21         //关闭
22         session.close();
23         sessionFactory.close();
24     }
25
26 }

  两个结果一样:

  SQL:因为标准SQL语句有可能返回各种各样的结果,比如多表查询,分组统计结果等等。 不能保证其查询结果能够装进一个Product对象中,所以返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。

 1 /**
 2  * ---------标注sql查询根据name进行模糊查询--------
 3  * @author fereli
 4  */
 5 public class TestHibernate8 {
 6     public static void main(String[] args) {
 7         SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
 8         Session session = sessionFactory.openSession();
 9         session.beginTransaction();
10         //模糊查询
11         String name="iPhone";
12         //标准sql的使用
13         String sql="select * from product_ p where p.name like ‘%"+name+"%‘";
14         Query query= session.createSQLQuery(sql);
15         List<Object[]> list = query.list();
16         for (Object[] objects : list) {
17             for (Object object : objects) {
18                 System.out.print(object+"\t");
19             }
20             System.out.println();
21         }
22         //提交时事务
23         session.getTransaction().commit();
24         //关闭
25         session.close();
26         sessionFactory.close();
27     }
28 }

  结果:

原文地址:https://www.cnblogs.com/Fereli/p/12081637.html

时间: 2024-10-16 21:48:33

Hibernate HQL,Criteria和SQL的相关文章

hibernate之HQL,Criteria与SQL

HQL是针对封装好的对象. HQL :hibernate自己用的sql语句   -------HQL不能出现表中的任何内容 ---------不经常使用开发中 基本查询:String hql = "from com.sikiedu.domain.User"; Query query = session.createQuery(hql);List<User> list = query.list();//查询所有User user = (User) query.uniqueRe

Hibernate HQL和原生SQL查询的一点区别

1.createSQLQuery 1.1默认查询的结果为BigDecimal 1.2通过addScalar("CGD_ID", StandardBasicTypes.LONG)可以将结果直接转为Long StringBuffer sb = new StringBuffer(); sb.append("select g.CGD_ID from em_circle_apply_info a join em_circle_group_def g on a.CAI_CGD_ID =

hql 转化为 sql ,满足仅仅用hibernate无法实现的sql构建

如下方法能将hql转换为sql,便于在系统总体是用hibernate查询的情况下,加入一些特殊查询条件的sql语句,满足仅仅用hibernate无法实现的sql构建. protected String hqlToSql(String hql,   org.hibernate.SessionFactory sessionFactory) throws Exception {  org.hibernate.hql.ast.QueryTranslatorImpl queryTranslator = n

Hibernate HQL查询:

Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.完整的HQL语句形势如下:Select/update/delete…… from …… where …

Atitit.Hibernate于Criteria 使用汇总and 关系查询 and 按照子对象查询 o9o

Atitit.Hibernate于Criteria 使用总结and 关联查询 and 依照子对象查询 o9o 1. Criteria,,Criterion ,, 1 <2. 基本的对象黑头配置磊个关联,三 1 3. Criteria 黑头配置关联查询了... 2 4. Ati Meata 配置关联 @CriteriaRelt 2 5. 关联createCriteria() 3 6. Criteria的使用outline 4 7. 參考:: 5 1. Criteria,,Criterion ,,

Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o

Atitit.Hibernate中Criteria 使用总结and 关联查询 and 按照子对象查询 o9o 1. Criteria,,Criterion ,, 1 <2. 主要的对象黑头配置磊个关联,三 1 3. Criteria 黑头配置关联查询了... 2 4. Ati Meata 配置关联 @CriteriaRelt 2 5. 关联createCriteria() 3 6. Criteria的使用outline 4 7. 参考:: 5 1. Criteria,,Criterion ,,

Hibernate之Criteria的完整用法

Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s)); //s是一个Student对象 list cri.list(); 实质:创建一个模版,比如我有一个表serial有一个 giftortoy字段,我设置serial.setgifttoy("2"), 则这个表中的所有的giftortoy为2的数据都会出来

Hibernate 中Criteria Query查询详解【转】

当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象.在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中.这样,程序员可以不使用SQL甚至HQL的情况下进行

hibernate的Criteria Query(转)

当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象.在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中.这样,程序员可以不使用SQL甚至HQL的情况下进行