7 JPQL
1.1 JPAの複雑なクエリ
JPQLフルネームJava Persistence Query Language
初めてEJB 2.0に導入されたEJBクエリ言語(EJB QL)に基づいて、Java持続化クエリ言語(JPQL)は、オブジェクト表現言語に向けた表現で、SQL文法と簡単なクエリ語義を結びつけるために移植可能な照会言語であり、このような言語を使って作成されたクエリーはすべての主流データベースサーバ上のSQLにコンパイルされることができる。
その特徴は元のSQL文と類似しており、完全に対象に向けて、表名と表の属性ではなく、クラス名と属性を通じてアクセスする。
7.1クエリー全体
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();
}