- package com.snailteam.reporting.query;
- import java.util.ArrayList;
- import java.util.List;
- import javax.persistence.EntityManager;
- import javax.persistence.PersistenceContext;
- import javax.persistence.TypedQuery;
- import javax.persistence.criteria.CriteriaBuilder;
- import javax.persistence.criteria.CriteriaQuery;
- import javax.persistence.criteria.ParameterExpression;
- import javax.persistence.criteria.Path;
- import javax.persistence.criteria.Predicate;
- import javax.persistence.criteria.Root;
- import com.snailteam.reporting.domain.Product;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
- import org.springframework.transaction.annotation.Transactional;
- import com.snailteam.reporting.domain.Users;
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration( { "/META-INF/spring/applicationContext*" })
- @Transactional
- /**
- *
- * @author xiaofancn
- *
- */
- public class TestJPAQuery {
- @PersistenceContext
- EntityManager em;
- @Test
- public void testGetUsers(){
- String name="jQuery";
- //创建条件构建对象
- CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
- //针对Product实体的条件查询
- CriteriaQuery<Product> criteriaQuery = criteriaBuilder.createQuery(Product.class);
- //获取实体Product的属性集 Product.id Product.name
- Root<Product> productRoot = criteriaQuery.from(Product.class); //HQL
- //获取实体属性
- Path<String> product_name = productRoot.get("name");
- //条件构造
- criteriaQuery.where(criteriaBuilder.equal(product_name,name));//HQL
- TypedQuery<Product> queryResult = em.createQuery(criteriaQuery);
- System.out.println(queryResult.getResultList());
- }
- @Test
- public void testJpaQuery() {// from Users user where user.name like
- // '%"+name+"'
- // 创建条件查询Builder对象
- CriteriaBuilder queryBuilder = em.getCriteriaBuilder();
- // 针对Users实体的查询
- CriteriaQuery<Users> usersQuery = queryBuilder.createQuery(Users.class);
- // 获取实体Users的属性集 Users.id Users.name
- Root<Users> userRoot = usersQuery.from(Users.class);
- // 条件查询条件List对象
- List<Predicate> criteria = new ArrayList<Predicate>();
- String name = "xiaofancn";
- // 设置查询的属性 select ....
- usersQuery.select(userRoot);//
- if (name != null && !"".equals(name)) {
- // 相当于拼写HQL的Where属性 where a=1 and b=1
- ParameterExpression<String> parameters = queryBuilder.parameter(
- String.class, "name");
- criteria.add(queryBuilder.like(userRoot.<String> get("name"),
- parameters));
- usersQuery.where(criteria.get(0));// 只有一个查询 条件 like name
- }
- // 上面构建一个hql空语句,下面填充属性,如果下面没有填充属性,关于属性的查询就不构造
- TypedQuery<Users> queryResult = em.createQuery(usersQuery);
- if (name != null && !"".equals(name)) {
- // 具体的参数和值
- queryResult.setParameter("name", name + "%");
- }
- queryResult.setFirstResult(0);
- queryResult.setMaxResults(10);
- System.out.println(queryResult.getResultList());
- }
- @Test
- public void testJpaCount() {// from count(*) Users user where user.name like
- // '%"+name+"'
- CriteriaBuilder queryBuilder = em.getCriteriaBuilder();
- CriteriaQuery<Long> usersQuery = queryBuilder.createQuery(Long.class);
- Root<Users> userRoot = usersQuery.from(Users.class);
- List<Predicate> criteria = new ArrayList<Predicate>();
- String name = "1";
- usersQuery.select(queryBuilder.count(userRoot));
- if (name != null && !"".equals(name)) {
- ParameterExpression<String> parameters = queryBuilder.parameter(
- String.class, "name");
- criteria.add(queryBuilder.like(userRoot.<String> get("name"),
- parameters));
- usersQuery.where(criteria.get(0));
- }
- TypedQuery<Long> queryResult = em.createQuery(usersQuery);
- if (name != null && !"".equals(name)) {
- queryResult.setParameter("name", name + "%");
- }
- System.out.println(queryResult.getSingleResult());
- }
- @Test
- public void testJpaIn() {
- String sql = "from Resources r where r.id in :array";
- List<Long> list = new ArrayList<Long>();
- list.add(1l);
- System.out.println(em.createQuery(sql).setParameter("array", list)
- .getResultList());
- }
- }
- http://download.oracle.com/javaee/6/tutorial/doc/gjivm.html
相关推荐
- jpa2.0:这是JPA 2.0规范的简写标签,常用于搜索和分类相关文档和资源。 - 英文:强调了文档的语言版本是英文。 - 手册:通常指的是一份详尽的指导书,包含理论讲解、操作指南以及实例演示等。 - jsr317:与描述中...
### JPA 2.0 中的动态类型安全查询 #### 一、引言 随着Java Persistence API (JPA) 2.0版本的发布,Java开发者们迎来了一个新的里程碑:动态类型安全查询。这一特性不仅提高了代码的安全性和健壮性,还简化了查询...
在本文中,我们将深入探讨Spring Data JPA中的JpaRepository查询功能。Spring Data JPA是Spring框架的一个模块,它简化了与Java Persistence API (JPA)的交互,提供了强大的数据访问抽象,使得数据库操作变得更加...
### 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是一个...
Batoo JPA 2.0规范实现 不推荐使用-该项目不再维护!!! 执照 版权所有(c)2012-2013,Batu Alp Ceylan 希望根据自由软件基金会发布的GNU通用公共许可协议的条款和条件,将任何受版权保护的材料提供给希望使用,...
4. ** Criteria API**:JPA 2.0引入的新特性,允许开发者使用面向对象的方式构建动态查询,提供了更加灵活和强类型的安全查询方式。 5. **继承策略**:介绍单表继承(Single Table Inheritance)、联合继承(Joined...
- **JPA 2.0**:2009年发布,增加了许多新特性,包括对验证的支持、扩展了ORM功能以及提供了共享缓存支持。 - **JPA 2.1**:2013年发布,进一步增强了功能,如支持对象提取、条件更新/删除、自动模式生成等。 - **...
5. **Spring Expression Language (SpEL)**:Spring 2.0引入了SpEL,一种强大的表达式语言,用于在运行时查询和操作对象图,增强了Bean的属性绑定和条件判断能力。 6. **容器增强**:Spring 2.0的IoC容器新增了父...
8. **JPA 2.0增强**:这个版本包含了JPA 2.0的一些新特性,如@SecondaryTable、@AttributeOverride、@AssociationOverride等,使开发者能够更好地控制实体和表之间的映射。 9. **Hibernate Tools**:这个组件包含了...
除了上述提到的通过方法名定义查询方法外,你还可以定义需要特定参数的查询方法,如带条件的查询。在接口中定义方法,然后在实现类中编写JPQL或SQL语句来实现这些方法。 ### 创建repository实例 在Spring框架中,...
- 包括循环、条件判断等逻辑结构。 ##### 4. HTTP表单提交与验证 - **表单定义** - 描述表单的结构以及验证规则。 - **使用表单模板助手** - 为表单元素生成合适的HTML代码,并处理验证错误。 ##### 5. 处理...
JPA 2.0相对于JPA 1.0,在功能上进行了增强,比如增加了Criteria API来支持类型安全的查询,提高了映射灵活性和查询性能。JPA还支持Java持久化查询语言(JPQL)和Criteria查询语言,提供了更为丰富的数据操作能力。 ...
- Query(JPA 2.0引入)和CriteriaQuery(JPA 2.0引入):这两个API在Hibernate中也得到了支持,提供了更现代和灵活的查询方式。 **6. Session和Transaction** 在进行数据操作时,通常会涉及到事务管理。Session...
5. **Spring Expression Language (SpEL)**:Spring2.0引入了强大的表达式语言SpEL,用于在运行时查询和操作对象图。SpEL可以用在配置元数据中,进行复杂的条件判断和属性设置。 6. **JSR-250注解集成**:Spring2.0...
此外,Spring还提供了事务管理、数据访问抽象、以及与各种持久化技术(如Hibernate、JPA)的集成。 **Struts2框架(2.0版本)** Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它继承了...
4. **Criteria Builder**:JPA 2.0引入的新特性,提供了更强大的构建查询的能力,包括排序、分组、限制等。 5. **Detached Criteria**:允许在不同Session之间重用查询条件,对于复杂的查询结构非常有用。 6. **...
Criteria API是JPA2.0引入的新特性,相比HQL和QBC,它更加强大且类型安全。 接下来,我们聚焦于`测试架子`。在软件开发中,测试是非常关键的一环,测试架子(Test Harness)是指用于组织和运行测试的结构或框架。...
4. **数据访问集成**:Spring 2.0增强了对各种数据访问技术的支持,包括JDBC、ORM(对象关系映射)框架如Hibernate和JPA。它提供了一种统一的抽象层,简化了数据访问操作,并支持声明式事务管理。 5. **MVC框架**:...
3. 查询:掌握HQL和Criteria API,编写查询语句,实现条件、分页、关联查询等。 4. 缓存:理解二级缓存的工作原理,配置并优化缓存策略以提高系统性能。 5. 扩展:深入源码,了解事件监听、拦截器等机制,进行功能...
在数据访问方面,SpringBoot 2.0加强了对JPA(Java Persistence API)和Spring Data的集成,简化了数据库操作。例如,通过自动配置,可以轻松连接各种数据库,如MySQL、PostgreSQL等,并提供了数据源和事务管理器的...