2番目のhibernate


にある  最初のHibernate  では、Hibernateを使用する方法を説明します.SQLを使用しない場合、Javaでアイテムを操作する習慣でリポジトリにデータを挿入します.もちろん、データを保存した後、データをどのように読み出すかが重要です.HibernateではSQLを一言も書かずにJavaでアイテムを操作する習慣でデータを検索することもできます.例を直接見てみましょう. 
  • HibernateDemo.java
  • package onlyfun.caterpillar;
    
    import java.util.Iterator;
    
    import org.hibernate.Criteria;
    import org.hibernate.Session;
    import org.hibernate.criterion.Expression;
    
    public class HibernateDemo {
        public static void main(String[] args) {
            Session session = HibernateUtil.getSessionFactory().openSession(); 
    
            Criteria criteria = session.createCriteria(User.class);
            //   user    
            Iterator users = criteria.list().iterator();
            System.out.println("id \t name/age");
            while(users.hasNext()) {
                User user = (User) users.next(); 
                System.out.println(user.getId() +
                                    " \t " + user.getName() +
                                    "/" + user.getAge()); 
            }
    
            //   user        
            criteria.add(Expression.eq("name", "caterpillar"));
            users = criteria.list().iterator(); 
            System.out.println("id \t name/age");
            while(users.hasNext()) {
                User user = (User) users.next(); 
                System.out.println(user.getId() +
                    " \t " + user.getName() +
                    "/" + user.getAge()); 
            }
     
            session.close();
            
            HibernateUtil.shutdown();
        }
    }

    CriteriaはSQLをカプセル化しており、SQLをよく知らない開発者にとっては、Criteriaを使用しても各種データの検索が容易に行えます.また、Expressionを使用してクエリー条件を設定し、Criteriaに追加してクエリー結果を制限することもできます.Expression.eq()は、Expression.eq("name","caterpillar")などの条件に合ったクエリーを設定することを示します.クエリー条件が「name」の欄で「caterpillar」に設定されている資料を表します.まず、実行結果を見てみましょう. 
    Hibernate:     select        this_.id as id0_0_,        this_.name as name0_0_,        this_.age as age0_0_     from        T_USER this_id      name/age1      caterpillar/302      bush/20Hibernate:     select        this_.id as id0_0_,        this_.name as name0_0_,        this_.age as age0_0_     from        T_USER this_     where        this_.name=?id      name/age1      caterpillar/30
    Criteriaは物件案内式のクエリー方式で、SQLを知らない開発者も簡単にクエリーを行うことができますが、CriteriaのAPIはまだ完備していません.Hibernateが奨励するクエリー方式は、HQL(Hibernate Query Language)を通じて行い、直接例を見てみましょう.
  • HibernateDemo.java
  • package onlyfun.caterpillar;
    
    import java.util.Iterator;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    
    public class HibernateDemo {
        public static void main(String[] args) {
            Session session = HibernateUtil.getSessionFactory().openSession(); 
            
            //   HQL    
            Query query = session.createQuery("from User");
            Iterator users = query.list().iterator();
            System.out.println("id \t name/age");
            while(users.hasNext()) {
                User user = (User) users.next(); 
                System.out.println(user.getId() +
                        " \t " + user.getName() +
                        "/" + user.getAge()); 
            }
     
            System.out.println();
     
            //   HQL    
            query = session.createQuery("from User user where user.name like ?");
            //       
            query.setParameter(0, "caterpillar");
            users = query.list().iterator();
            System.out.println("id \t name/age");
            while(users.hasNext()) {
                User user = (User) users.next(); 
                System.out.println(user.getId() +
                                    " \t " + user.getName() +
                                    "/" + user.getAge()); 
            }
     
            session.close();
            
            HibernateUtil.shutdown();
        }
    }

    実行結果:
    Hibernate:     select        user0_.id as id0_,        user0_.name as name0_,        user0_.age as age0_     from        T_USER user0_id      name/age1      caterpillar/302      bush/20Hibernate:     select        user0_.id as id0_,        user0_.name as name0_,        user0_.age as age0_     from        T_USER user0_     where        user0_.name like ?id      name/age1      caterpillar/30
    Queryインタフェースを介して、クエリーパラメータを設定してからsetXXX()などの方法を通じて、指定したパラメータ値を入力して、毎回完全なHQLを書く必要はありません.QueryのsetParameter()メソッドの最初のパラメータは指定ですか?表示される場所は、0から2番目のパラメータがクエリー条件を設定します.