`
lt200819
  • 浏览: 188287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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  
分享到:
评论

相关推荐

    jpa2.0 英文手册

    - jpa2.0:这是JPA 2.0规范的简写标签,常用于搜索和分类相关文档和资源。 - 英文:强调了文档的语言版本是英文。 - 手册:通常指的是一份详尽的指导书,包含理论讲解、操作指南以及实例演示等。 - jsr317:与描述中...

    JPA_2.0_中的动态类型安全查询

    ### JPA 2.0 中的动态类型安全查询 #### 一、引言 随着Java Persistence API (JPA) 2.0版本的发布,Java开发者们迎来了一个新的里程碑:动态类型安全查询。这一特性不仅提高了代码的安全性和健壮性,还简化了查询...

    2.0jpa查询学习笔记1

    在本文中,我们将深入探讨Spring Data JPA中的JpaRepository查询功能。Spring Data JPA是Spring框架的一个模块,它简化了与Java Persistence API (JPA)的交互,提供了强大的数据访问抽象,使得数据库操作变得更加...

    Java Persistence API 2.0 FINAL文档

    ### Java Persistence API 2.0 (JPA 2.0) Final Release文档解析 #### 标题:Java Persistence API 2.0 FINAL文档 #### 描述解析:Java Persistence API(JPA)2.0规范概述 Java Persistence API (JPA) 2.0是一个...

    BatooJPA:Batoo JPA-最快的JPA实施! 比领先的JPA实施快15倍以上

    Batoo JPA 2.0规范实现 不推荐使用-该项目不再维护!!! 执照 版权所有(c)2012-2013,Batu Alp Ceylan 希望根据自由软件基金会发布的GNU通用公共许可协议的条款和条件,将任何受版权保护的材料提供给希望使用,...

    Apress.Pro.JPA.2.2nd.Edition.Oct.2013

    4. ** Criteria API**:JPA 2.0引入的新特性,允许开发者使用面向对象的方式构建动态查询,提供了更加灵活和强类型的安全查询方式。 5. **继承策略**:介绍单表继承(Single Table Inheritance)、联合继承(Joined...

    JPA教程详解,这是个word文档,需要的可以拿走

    - **JPA 2.0**:2009年发布,增加了许多新特性,包括对验证的支持、扩展了ORM功能以及提供了共享缓存支持。 - **JPA 2.1**:2013年发布,进一步增强了功能,如支持对象提取、条件更新/删除、自动模式生成等。 - **...

    Spring2.0宝典源代码

    5. **Spring Expression Language (SpEL)**:Spring 2.0引入了SpEL,一种强大的表达式语言,用于在运行时查询和操作对象图,增强了Bean的属性绑定和条件判断能力。 6. **容器增强**:Spring 2.0的IoC容器新增了父...

    hibernate 4.1.6的lib文件

    8. **JPA 2.0增强**:这个版本包含了JPA 2.0的一些新特性,如@SecondaryTable、@AttributeOverride、@AssociationOverride等,使开发者能够更好地控制实体和表之间的映射。 9. **Hibernate Tools**:这个组件包含了...

    Spring Data JPA - 开发文档.pdf

    除了上述提到的通过方法名定义查询方法外,你还可以定义需要特定参数的查询方法,如带条件的查询。在接口中定义方法,然后在实现类中编写JPQL或SQL语句来实现这些方法。 ### 创建repository实例 在Spring框架中,...

    play2.0 for java developers.pdf

    - 包括循环、条件判断等逻辑结构。 ##### 4. HTTP表单提交与验证 - **表单定义** - 描述表单的结构以及验证规则。 - **使用表单模板助手** - 为表单元素生成合适的HTML代码,并处理验证错误。 ##### 5. 处理...

    JEE6编程模型

    JPA 2.0相对于JPA 1.0,在功能上进行了增强,比如增加了Criteria API来支持类型安全的查询,提高了映射灵活性和查询性能。JPA还支持Java持久化查询语言(JPQL)和Criteria查询语言,提供了更为丰富的数据操作能力。 ...

    Hibernate曾删改查接口实现

    - Query(JPA 2.0引入)和CriteriaQuery(JPA 2.0引入):这两个API在Hibernate中也得到了支持,提供了更现代和灵活的查询方式。 **6. Session和Transaction** 在进行数据操作时,通常会涉及到事务管理。Session...

    Spring2.0中文开发手册

    5. **Spring Expression Language (SpEL)**:Spring2.0引入了强大的表达式语言SpEL,用于在运行时查询和操作对象图。SpEL可以用在配置元数据中,进行复杂的条件判断和属性设置。 6. **JSR-250注解集成**:Spring2.0...

    spring2.0+struts2.0+ibatis2.3完整整和

    此外,Spring还提供了事务管理、数据访问抽象、以及与各种持久化技术(如Hibernate、JPA)的集成。 **Struts2框架(2.0版本)** Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它继承了...

    小码哥Hibernate封装的查询方法的皮毛介绍共4页.p

    4. **Criteria Builder**:JPA 2.0引入的新特性,提供了更强大的构建查询的能力,包括排序、分组、限制等。 5. **Detached Criteria**:允许在不同Session之间重用查询条件,对于复杂的查询结构非常有用。 6. **...

    Hibernate的查询 测试的架子

    Criteria API是JPA2.0引入的新特性,相比HQL和QBC,它更加强大且类型安全。 接下来,我们聚焦于`测试架子`。在软件开发中,测试是非常关键的一环,测试架子(Test Harness)是指用于组织和运行测试的结构或框架。...

    spring2.0参考手册.pdf

    4. **数据访问集成**:Spring 2.0增强了对各种数据访问技术的支持,包括JDBC、ORM(对象关系映射)框架如Hibernate和JPA。它提供了一种统一的抽象层,简化了数据访问操作,并支持声明式事务管理。 5. **MVC框架**:...

    hibernate-distribution-3.6.2.Final-dist

    3. 查询:掌握HQL和Criteria API,编写查询语句,实现条件、分页、关联查询等。 4. 缓存:理解二级缓存的工作原理,配置并优化缓存策略以提高系统性能。 5. 扩展:深入源码,了解事件监听、拦截器等机制,进行功能...

    springboot reference guide 2.0中文文档

    在数据访问方面,SpringBoot 2.0加强了对JPA(Java Persistence API)和Spring Data的集成,简化了数据库操作。例如,通过自动配置,可以轻松连接各种数据库,如MySQL、PostgreSQL等,并提供了数据源和事务管理器的...

Global site tag (gtag.js) - Google Analytics