ハイベルナントCriteria条件クエリ

10369 ワード

原文の住所:http://blog.csdn.net/lanshengsheng2012/article/details/8982922
データベース管理システムを操作するには、SQL文を使用し、ほとんどのデータベースが標準のSQL文をサポートしていますが、データベースに特定されているSQL文もあります.SQL文に合わせてデータベース検索を行う場合、データベースに特定されているSQL文を使用します.プログラム自体は特定のデータベースに依存する問題があります.
Hibernateを使用する場合、SQLの使用と作成については理解していなくても、SQL文クエリを行うためにAPIを使用して、org.hibernate.riteriaがSQLをカプセル化して、Javaオブジェクトの観点から各種のクエリ条件を組み合わせることができます.Hibernateによって自動的にSQL文を生成します.
最も基本的な調査では、ある物件に対応する資料表のすべての内容を調べたいなら、次のように調べられます.
Criteria criteria = session.createCriteria(User.class);
            List users = criteria.list();

            for(Iterator it = users.iterator(); it.hasNext(); ) {
                User user = (User) it.next();
                System.out.println(user.getId() +
                                         " \t " + user.getName() +
                                      "/" + user.getAge());    
            } 

            </pre>
Criteriaが された 、 の も えられない 、 は の のすべての です. のプログラムセグメントを すれば、 ファイルにHibernateのショーを します.sql は、マスターコントロールの で のSQL の を ることができます.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_
Criteria クエリ
org.hibernate.riteriaは、 には きの です.クエリー を するには、org.hibernate.criterion.Resticationsを して、org.hiberg.citernate.criteriaの を します. する org.hiberg.chiberg.criterion.riterion.riteria.rationの は、 を しています.この は、これらの の に する. えば、「クエリ」は20より きく、40より さい である.
               Criteria criteria = session.createCriteria(User.class);
                criteria.add(Restrictions.gt("age", new Integer(20)));
                criteria.add(Restrictions.lt("age", new Integer(40)));
                List users = criteria.list();

                for(Iterator it = users.iterator(); it.hasNext(); ) {
                    User user = (User) it.next();
                    System.out.println(user.getId() +
                                              " \t " + user.getName() +
                                             "/" + user.getAge());    
                }   
                
Resticationsのgt() はより きな を し、ltはより さい を し、 のプログラムを し、 したSQL を し、whereとandサブカルを ってSQLの クエリを する.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_where this_.メッセージ>and this_.メッセージ
add() を して を する 、 め した はandを して み わせられ、もしorの で を み わせるなら、Restication.or() を してもよく、 えば、ageなどを み わせて(eq)20または(or)ageが (isNull)である :
               Criteria criteria = session.createCriteria(User.class);
                criteria.add(Restrictions.or(
                                   Restrictions.eq("age", new Integer(20)),
                                   Restrictions.isNull("age")
                               ));
                List users = criteria.list();
                
したSQL を して、whereとor を ってSQLの を べます.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_where(this_.age=?or this_.age is null)
また、SQLの のlike の を うためにRestritions.like()の を ってもいいです. えば、「name」の は「just」の の です.
               Criteria criteria = session.createCriteria(User.class);
                criteria.add(Restrictions.like("name", "just%"));
                List users = criteria.list();
                
によって したSQL は の りです.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_where this_.name like
Restrictionsのいくつかの な クエリ は、 の の りです.


Restictions.eq

Restictions.allEq
Mapを って、key/valueを って のなどを します.
Restictions.gt
より きい
Restictions.ge
>=
Restictions.lt
≪p≫
Restictions.le
っていたより さいです
Restictions.between
SQL のBET WEEN
Restictions.like
SQLに するLIKE
Restictions.in
SQLに するin
Restictions.and
and
Restictions.or
or
Criteriaステップクエリ
Criteriaを ってクエリーを う は、SQLにおけるwhere の を み わせるだけでなく、 べ え、 、グループなどのクエリー を み わせることができます.
べ え
Criteriaを してクエリーを い、org.hibernation.ortern.Orderを して を べ えることができます. えば、Oder.asc()を して、「age」による から への べ えを します.
               Criteria criteria = session.createCriteria(User.class);
                criteria.addOrder(Order.asc("age"));
                List users = criteria.list();
                
Order を するときは、addOrder()の であって、add()の ではなく、SQL を するときは、order byとasc(desc)を して べ え を います.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_order by this_.age asc
ペン を する
Criteriaのset MaxResults() は したペン を することができます.set First Result()に わせて の の の を すれば、 なページ けができます.
               Criteria criteria = session.createCriteria(User.class);
                criteria.setFirstResult(51);
                criteria.setMaxResults(50);
                List users = criteria.list();
                
されたデータベースによって、Hibernateは にデータベースに する ペン クエリのサブフレーズを します. えば、MySQLでは、limitを って のSQL を します.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_limit

の はorg.hibernation.org.Projectionのavg()、rowCount()、count()、max()、min()、count Distinct()などの を って、Criteriaのset Projection() を み わせて を えることができます.
               Criteria criteria = session.createCriteria(User.class);
                criteria.setProjection(Projections.avg("age"));
                List users = criteria.list();
                
の は、HibernateによってSQLが に されるavg によって に される.
Hibernate:select avg(this_.age)asy 0_from_USER this_
グループ
また、ProjectionのグループoupProperty()に して、 をグループ しても い. えば、「age」でグループ しても い.つまり、 に「age」が20、20、25、30があれば、 に20、25、30を する.
               Criteria criteria = session.createCriteria(User.class);
                criteria.setProjection(Projections.groupProperty("age"));
                List users = criteria.list();
                
の は、Hibernateによって にSQLを するgroup byサブルーチンによってグループ される.
Hbernate:select this_.アゲas y 0_from_USER this_group by this_.メッセージ
とグループ を に したいなら、org.hibernation.ritern.Projection Listを しても いです. えば、 のようなプログラムは に がいますか?
               ProjectionList projectionList = Projections.projectionList();
                projectionList.add(Projections.groupProperty("age"));
                projectionList.add(Projections.rowCount());

                Criteria criteria = session.createCriteria(User.class);
                criteria.setProjection(projectionList);
                List users = criteria.list();               
                
されたSQL を すると、グループ byを して にグループ し、 グループに してcount のカウントを います.
Hbernate:select this_.age asy 0_count(*)as y 1_from_USER this_group by this_.メッセージ
の に づいて する.
を するには ずRestrictionsを する はありません. が い は、Restictionsを するのも です. の がある は、この に づいて の として、 と たようなものがあるかどうかを してください.
               User user = new User();
                user.setAge(new Integer(30));

                Criteria criteria = session.createCriteria(User.class);
                criteria.add(Example.create(user));

                List users = criteria.list();               
                
org.hibernate.criterion.Exampleのcreateを じてExampleの を できます.ExampleはCriteriaインターフェースを っていますので、add()を ってCriteria に できます.Hibernateは に をフィルタします. のアイテムに された によって、where に されたかどうかを します.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_where(this_.age=?)
SQLの を します
SQL を く を っているなら、HibernateがSQLを する のお を したいです.Resticationのsql Restication() を って、SQL のお を してクエリーを してもいいです. えば、nameがcaterで まる を べてもいいです.
               Criteria criteria = session.createCriteria(User.class);
                criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
                List users = criteria.list();               
                
aliasはUserカテゴリに する に き えられます.cater%に き えられます.すなわち、 のパラメータが する です.sql Restication()メソッドの のパラメータが されているのは、where の です.だから、SQLの には、whereを く はありません.SQL を して、 されたSQLの をもとにSQLの を べます.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_where this_.name LIKE(?)
の がある 、 えばbetween のクエリは、 のようにすることができます.
               Criteria criteria = session.createCriteria(User.class);
                Integer[] ages = {new Integer(20), new Integer(40)};
                Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};
                criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));
                List users = criteria.list();               
                
によって したSQL は の りです.
Hbernate:select this_.id as id 0_0_、this_.name as name 0_0_、this_.age as age 0_0_from_USER this_where this_.age BETWEEN(?)AND(?)
Detch edCriteriaを う
CriteriaとSessionは、ライフサイクルがSessionの に い、Criteriaを したときに すると、その に に を し、 の を え、Sessionの に い、Criteriaも に する.
Criteriaオブジェクトを り し するために、Hibernate 3にorg.hibernate.riterion.Detch dedededededededeCriteriaを しました.まずDetch Criteriaのインスタンスを し、 のクエリ を して、Sessionと してSessionを するCriteriaアイテムを します.
               //    DetchedCriteria  
                DetachedCriteria detchedCriteria = DetachedCriteria.forClass(User.class);
                //       
                detchedCriteria.add(Restrictions.ge("age",new Integer(25)));

                Session session = sessionFactory.openSession();
                //   Session     Criteria  
                Criteria criteria = detchedCriteria.getExecutableCriteria(session);

                List users = criteria.list();               
                

HbernateのCriteria APIは、あなたに を させる で、データベースシステムを する を み わせることができます.Hbernateは にあなたの っているデータベースに って、SQL を に します.アプリケーションはデータベースにアクセスする 、 のSQLを いたので、 のデータベースに しないようにします.Criteriaを って データベースの を してみることもできます.
 
の :http://blog.csdn.net/lanshengsheng2012/article/details/8982922