Hibernate 的三種查詢方式:HQL、Criteria、Sql

第一種方式:HQLHibernate Query LangugeHibernate 查詢語言)查詢sql

是一種面向對象的查詢語言,其中沒有表和字段的概念,只有類、對象和屬性的概念,HQL 是應用較爲普遍的方式session

語法:[select/update/delete……] from Entity [where……] [group by……] [having……] [order by……]app

 

(1).沒使用Spring框架的寫法:框架

使用HQL須要四步ui

獲得Session、編寫HQL語句、建立Query對象(Query接口是HQL 查詢接口。它提供了各類的查詢功能)、執行查詢,獲得結果spa

    sessionFactory =hibernate

        new Configuration().configure().buildSessionFactory();orm

    session = sessionFactory.openSession();對象

    String hql = 「from Street」; 接口

    Query query = session.createQuery(hql);

    List<Street> list = query.list();

 

(2).使用Spring框架的寫法:

String queryString = "select form entity ....";

List list=getHibernateTemplate().find(queryString);

 

 

第二種方式:Criteria 查詢

Criteria 查詢採用面向對象方式封裝查詢條件,又稱爲對象查詢;

就是對SQL 語句進行封裝,採用對象的方式來組合各類查詢條件

Hibernate 自動產生SQL 查詢語句

 

(1).沒使用Spring框架的寫法;

CriteriaHibernate Session進行建立

SessionFactory sessionFactory = new Configuration().configure()

              .buildSessionFactory();

      Session session = sessionFactory.openSession();

      Criteria criteria = session.createCriteria(User.class);

      List result = criteria.list();

      Iterator it = result.iterator();

 

 (2)使用Spring框架的寫法:

import org.hibernate.criterion.DetachedCriteria;

 

DetachedCriteria criteria=DetachedCriteria.forClass(ObjectEntity.class);

criteria.add(Restrictions.eq("propertyName", propertyValue));

List result=getHibernateTemplate().findByCriteria(criteria);

 

 

第三種方式:使用SQL語句查詢(如下都是使用了Spring框架的寫法)

1).這是把執行結果放到了一個類裏:(這個類一般使用VO實體,VO實體通常就只用來接收查詢結果)

List list = getHibernateTemplate().executeFind(new HibernateCallback() {

          public Object doInHibernate(Session session) throws HibernateException, SQLException {

                            StringBuffer hqlBuffer = new StringBuffer("");

                            hqlBuffer.append("select column_Name  from ...");//裏面是SQL語句

                                              

                         SQLQuery sqlQuery = session.createSQLQuery(hqlBuffer.toString());

                 sqlQuery.addScalar("propertyName",Hibernate.STRING);//propertyName        ObjectVO實體的一個屬性

                            sqlQuery.setResultTransformer(Transformers.aliasToBean(ObjectVO.class));    

                      List list = sqlQuery.list();

                      return list;//此處list集合中存放的是ObjectVO對象

                            }

                 });

 

2).返回結果放到list中的:

           final String queryString = "";//sql語句

           List resultList=getHibernateTemplate().executeFind(new HibernateCallback() {

                 public List doInHibernate(Session session) throws HibernateException, SQLException {

                      SQLQuery sqlQuery = session.createSQLQuery(queryString);

                      List list=sqlQuery.executeUpdate();

                      return list;

                 }

           });

 

 

3).無返回結果:

               final String queryString = "";//SQL語句

           getHibernateTemplate().executeFind(new HibernateCallback() {

                 public Object doInHibernate(Session session) throws HibernateException, SQLException {

                      SQLQuery sqlQuery = session.createSQLQuery(queryString);

                      sqlQuery.executeUpdate();

                      return null;

                 }

           });

相關文章
相關標籤/搜索