7 JPQL

18845 ワード

1.1 JPAの複雑なクエリ
JPQLフルネームJava Persistence Query Language
初めてEJB 2.0に導入されたEJBクエリ言語(EJB QL)に基づいて、Java持続化クエリ言語(JPQL)は、オブジェクト表現言語に向けた表現で、SQL文法と簡単なクエリ語義を結びつけるために移植可能な照会言語であり、このような言語を使って作成されたクエリーはすべての主流データベースサーバ上のSQLにコンパイルされることができる。
その特徴は元のSQL文と類似しており、完全に対象に向けて、表名と表の属性ではなく、クラス名と属性を通じてアクセスする。
7.1クエリー全体
    /**
     *     
     * jqpl:from cn.ys.domain.Customer
     * sql:SELECT * FROM cst_customer
     */
    @Test
    public void testFindAll() {
        //1.  entityManager  
        EntityManager em = JpaUtils.getEntityManager();
        //2.    
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        //3.    
        String jpql = "from Customer ";
        Query query = em.createQuery(jpql);//  Query    ,query      jqpl   

        //    ,      
        List list = query.getResultList();

        for (Object obj : list) {
            System.out.println(obj);
        }

        //4.    
        tx.commit();
        //5.    
        em.close();
    }
7.2並べ替えクエリ
    /**
     *     :         (  id  )
     * sql:SELECT * FROM cst_customer ORDER BY cust_id DESC
     * jpql:from Customer order by custId desc
     * 

* jpql * 1. query * 2. * 3. , */

@Test public void testOrders() { //1. entityManager EntityManager em = JpaUtils.getEntityManager(); //2. EntityTransaction tx = em.getTransaction(); tx.begin(); //3. String jpql = "from Customer order by custId desc"; Query query = em.createQuery(jpql);// Query ,query jqpl // , List list = query.getResultList(); for (Object obj : list) { System.out.println(obj); } //4. tx.commit(); //5. em.close(); }
7.3統計クエリ
    /**
     *   jpql  ,       
     * sql:SELECT COUNT(cust_id) FROM cst_customer
     * jpql:select count(custId) from Customer
     */
    @Test
    public void testCount() {
        //1.  entityManager  
        EntityManager em = JpaUtils.getEntityManager();
        //2.    
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        //3.    
        //i.  jpql    Query    
        String jpql = "select count(custId) from Customer";
        Query query = em.createQuery(jpql);
        //ii.     
        //iii.    ,     

        /**
         * getResultList :           list  
         * getSingleResult :         
         */
        Object result = query.getSingleResult();

        System.out.println(result);

        //4.    
        tx.commit();
        //5.    
        em.close();
    }
7.4ページ別に照会する
    /**
     *     
     * sql:select * from cst_customer limit 0,2
     * jqpl : from Customer
     */
    @Test
    public void testPaged() {
        //1.  entityManager  
        EntityManager em = JpaUtils.getEntityManager();
        //2.    
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        //3.    
        //i.  jpql    Query    
        String jpql = "from Customer";
        Query query = em.createQuery(jpql);
        //ii.      --     
        //    
        query.setFirstResult(0);
        //       
        query.setMaxResults(2);

        //iii.    ,     

        /**
         * getResultList :           list  
         * getSingleResult :         
         */
        List list = query.getResultList();

        for (Object obj : list) {
            System.out.println(obj);
        }

        //4.    
        tx.commit();
        //5.    
        em.close();
    }
7.5条件照会
    /**
     *     
     *   :       ‘    ’     
     * sql:SELECT * FROM cst_customer WHERE cust_name LIKE  ?
     * jpql : from Customer where custName like ?
     */
    @Test
    public void testCondition() {
        //1.  entityManager  
        EntityManager em = JpaUtils.getEntityManager();
        //2.    
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        //3.    
        //i.  jpql    Query    
        String jpql = "from Customer where custName like ? ";
        Query query = em.createQuery(jpql);
        //ii.      --      
        //     :        ( 1  ),     :  
        query.setParameter(1, " %");

        //iii.    ,     

        /**
         * getResultList :           list  
         * getSingleResult :         
         */
        List list = query.getResultList();

        for (Object obj : list) {
            System.out.println(obj);
        }

        //4.    
        tx.commit();
        //5.    
        em.close();
    }