JPA2.0 条件查询

 

Java代码    收藏代码
  1. package com.snailteam.reporting.query;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import javax.persistence.EntityManager;  
  7. import javax.persistence.PersistenceContext;  
  8. import javax.persistence.TypedQuery;  
  9. import javax.persistence.criteria.CriteriaBuilder;  
  10. import javax.persistence.criteria.CriteriaQuery;  
  11. import javax.persistence.criteria.ParameterExpression;  
  12. import javax.persistence.criteria.Path;  
  13. import javax.persistence.criteria.Predicate;  
  14. import javax.persistence.criteria.Root;  
  15.   
  16. import com.snailteam.reporting.domain.Product;  
  17. import org.junit.Test;  
  18. import org.junit.runner.RunWith;  
  19. import org.springframework.test.context.ContextConfiguration;  
  20. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  21. import org.springframework.transaction.annotation.Transactional;  
  22.   
  23. import com.snailteam.reporting.domain.Users;  
  24.   
  25. @RunWith(SpringJUnit4ClassRunner.class)  
  26. @ContextConfiguration( { "/META-INF/spring/applicationContext*" })  
  27. @Transactional  
  28. /** 
  29.  *  
  30.  * @author xiaofancn 
  31.  *  
  32.  */  
  33. public class TestJPAQuery {  
  34.     @PersistenceContext  
  35.     EntityManager em;  
  36.   
  37.     @Test  
  38.     public void testGetUsers(){  
  39.         String name="jQuery";  
  40.           
  41.          //创建条件构建对象    
  42.         CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();    
  43.         //针对Product实体的条件查询    
  44.         CriteriaQuery<Product>  criteriaQuery = criteriaBuilder.createQuery(Product.class);    
  45.         //获取实体Product的属性集 Product.id Product.name    
  46.         Root<Product> productRoot = criteriaQuery.from(Product.class); //HQL  
  47.         //获取实体属性  
  48.         Path<String> product_name = productRoot.get("name");  
  49.         //条件构造  
  50.         criteriaQuery.where(criteriaBuilder.equal(product_name,name));//HQL  
  51.           
  52.         TypedQuery<Product> queryResult = em.createQuery(criteriaQuery);  
  53.           
  54.         System.out.println(queryResult.getResultList());  
  55.     }  
  56.     @Test  
  57.     public void testJpaQuery() {// from Users user where user.name like  
  58.                                 // '%"+name+"'  
  59.         // 创建条件查询Builder对象  
  60.         CriteriaBuilder queryBuilder = em.getCriteriaBuilder();  
  61.         // 针对Users实体的查询  
  62.         CriteriaQuery<Users> usersQuery = queryBuilder.createQuery(Users.class);  
  63.         // 获取实体Users的属性集 Users.id Users.name  
  64.         Root<Users> userRoot = usersQuery.from(Users.class);  
  65.         // 条件查询条件List对象  
  66.         List<Predicate> criteria = new ArrayList<Predicate>();  
  67.   
  68.         String name = "xiaofancn";  
  69.         // 设置查询的属性 select ....  
  70.         usersQuery.select(userRoot);//  
  71.         if (name != null && !"".equals(name)) {  
  72.             // 相当于拼写HQL的Where属性 where a=1 and b=1  
  73.             ParameterExpression<String> parameters = queryBuilder.parameter(  
  74.                     String.class"name");  
  75.             criteria.add(queryBuilder.like(userRoot.<String> get("name"),  
  76.                     parameters));  
  77.             usersQuery.where(criteria.get(0));// 只有一个查询 条件 like name  
  78.         }  
  79.   
  80.         // 上面构建一个hql空语句,下面填充属性,如果下面没有填充属性,关于属性的查询就不构造  
  81.   
  82.         TypedQuery<Users> queryResult = em.createQuery(usersQuery);  
  83.         if (name != null && !"".equals(name)) {  
  84.             // 具体的参数和值  
  85.             queryResult.setParameter("name", name + "%");  
  86.         }  
  87.         queryResult.setFirstResult(0);  
  88.         queryResult.setMaxResults(10);  
  89.         System.out.println(queryResult.getResultList());  
  90.   
  91.     }  
  92.   
  93.     @Test  
  94.     public void testJpaCount() {// from count(*) Users user where user.name like  
  95.                                 // '%"+name+"'  
  96.         CriteriaBuilder queryBuilder = em.getCriteriaBuilder();  
  97.         CriteriaQuery<Long> usersQuery = queryBuilder.createQuery(Long.class);  
  98.         Root<Users> userRoot = usersQuery.from(Users.class);  
  99.         List<Predicate> criteria = new ArrayList<Predicate>();  
  100.         String name = "1";  
  101.   
  102.         usersQuery.select(queryBuilder.count(userRoot));  
  103.         if (name != null && !"".equals(name)) {  
  104.             ParameterExpression<String> parameters = queryBuilder.parameter(  
  105.                     String.class"name");  
  106.             criteria.add(queryBuilder.like(userRoot.<String> get("name"),  
  107.                     parameters));  
  108.             usersQuery.where(criteria.get(0));  
  109.         }  
  110.         TypedQuery<Long> queryResult = em.createQuery(usersQuery);  
  111.         if (name != null && !"".equals(name)) {  
  112.             queryResult.setParameter("name", name + "%");  
  113.         }  
  114.         System.out.println(queryResult.getSingleResult());  
  115.   
  116.     }  
  117.   
  118.     @Test  
  119.     public void testJpaIn() {  
  120.         String sql = "from Resources r where r.id in :array";  
  121.         List<Long> list = new ArrayList<Long>();  
  122.         list.add(1l);  
  123.         System.out.println(em.createQuery(sql).setParameter("array", list)  
  124.                 .getResultList());  
  125.   
  126.     }  
  127.       
  128.   
  129. }  
Java代码    收藏代码
  1. http://download.oracle.com/javaee/6/tutorial/doc/gjivm.html  

你可能感兴趣的:(查询,jpa)