`

JavaEE6的JPA2.0查询

    博客分类:
  • J2EE
 
阅读更多
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
分享到:
评论
1 楼 qianli 2012-02-07  
为什么entityManager.getCriteriaBuilder()为null呢?获取不到啊。

相关推荐

    JavaEE6规范中文版(CHM)

    5. **Java Persistence API 2.0 (JPA 2.0)**:JPA2.0带来了更强大的数据访问能力,包括新的查询语言(JPQL)和 Criteria API,以及对多对多关联和懒加载的改进。 6. **Enterprise JavaBeans 3.1 (EJB 3.1)**:EJB...

    JavaEE6 API.rar

    3. **Java Persistence API (JPA) 2.0**:JPA 2.0提供了更强大的ORM(对象关系映射)功能,包括支持实体图形的查询、多对多关系的处理以及延迟加载等特性。同时,Hibernate成为了JPA的首选实现。 4. **JavaServer ...

    javaee6 jar

    JPA2.0在JavaEE6中引入,增强了 Criteria查询,支持双向一对多和多对多关系,以及延迟加载等功能。 5. **Enterprise JavaBeans (EJB)**: - EJB3.1在JavaEE6中进行了大量的简化和优化,使得无状态会话bean和实体...

    JavaEE6和SVN插件

    1. **模块化**:JavaEE6引入了模块化概念,允许开发者只选择项目所需的部分组件,如EJB3.1、JPA2.0、JSF2.0等,减少了应用的体积和复杂性。 2. **轻量级容器**:Web Profile是JavaEE6的一个重要概念,它是针对小型...

    javaEE6jar包

    在Java EE 6中,JPA 2.0引入了更多的查询选项,如 Criteria API 和 Named Queries,以及实体图形和多对多关联的改进。 2. **Enterprise JavaBeans (EJB 3.1)**:EJB是Java EE的核心组件,用于构建可部署在服务器端...

    JavaEE6规范中文版

    JPA 2.0增强了查询语言(JPQL)的功能,支持多表联合查询、子查询以及更复杂的更新和删除操作。此外,还引入了 Criteria API,为编写类型安全的查询提供了另一种选择。 七、RESTful Web服务 JSR311引入了对RESTful ...

    JavaEE6—doc.zip

    四、JPA2.0 Java Persistence API 2.0增强了ORM(Object-Relational Mapping)功能,支持更多的查询选项,如JPQL(Java Persistence Query Language)的增强,以及Criteria查询,使得数据访问更加灵活。 五、...

    crm-demo:关于如何使用 Angular.js 和 Java EE 6(JAX-RS 和 JPA 2.0)编写 Web 应用程序的简单演示

    客户关系管理演示这是一个简单的展示,展示了如何使用 Angular.js 和 Java EE 6(JAX-RS 和 JPA 2.0)构建 Web 应用程序。 要部署,只需将 war 复制到 Jboss AS 7.1 的“standalone/deployments”目录。 您还可以...

    JavaEE_6_中文API帮助文档

    5. **JPA(Java Persistence API)**:JavaEE 6中的JPA 2.0允许开发者在Java应用程序中轻松管理关系数据库的数据。`javax.persistence`包中的`EntityManager`, `Entity`, `@Entity`, `@Table`, `@Column`等是数据...

    javaee6 sun公司官方培训书(含例子)

    4. **JPA 2.0**(Java Persistence API 2.0):JPA 2.0在数据持久化方面提供了更丰富的功能,如多对多关系的直接映射,增强的查询语言JPQL(Java Persistence Query Language),以及 Criteria API,使得对象关系...

    Pro JPA 2 Mastering the Java Persistence API 2009.pdf

    - **新的准则API**:JPA 2.0 引入了一个新的准则 API,它提供了一种类型安全的方式来构建动态查询,从而替代了传统的字符串拼接方式。 ##### 3. 从 JPA 1.0 迁移到 2.0 的关键变化 - **新特性支持**:了解并利用 ...

    javaEE6帮助文档

    6. **Java Persistence API(JPA)2.0**:JPA 2.0提供了更丰富的查询语言(JPQL)和 Criteria API,增强了对关联管理的支持,使得数据库操作更为灵活和高效。 7. **JavaServer Faces(JSF)2.0**:JSF 2.0改进了...

    JavaEE.6.Tutorial(Basic Concepts+完整版)+JavaEE.6.API(chm)

    JavaEE 6 API包含了诸如JAX-RS(Java API for RESTful Web Services)、JPA 2.0、JMS 1.1、JSF 2.0等关键模块的规范和实现细节,是开发者编写高效、符合标准的代码的重要工具。 在JavaEE 6中,一些重要的新特性包括...

    JavaEE6 API 英文版+中文版

    JavaEE6中的JPA 2.0提供了更多的查询语言特性,如JPQL(Java Persistence Query Language)和命名查询,让数据库交互更加灵活。 5. CDI(Contexts and Dependency Injection):CDI是JavaEE6中引入的新特性,提供...

    JavaEE_6_API帮助文档.zip

    6. **JPA 2.0**:Java Persistence API(JPA)是JavaEE中用于对象关系映射的规范,JPA 2.0增强了查询语言(JPQL)和 Criteria API,支持双向一对多和多对多关联。 7. **JMS 2.0**:Java Message Service(JMS)允许...

    JavaEE6官方API

    5. **Java Persistence API (JPA) 2.0**:JPA2.0增加了对多对多关系的更好支持,引入了二级缓存和查询语言JPA Criteria API,使得数据库操作更加灵活高效。 6. **JavaServer Faces (JSF) 2.0**:JSF2.0引入了 ...

    Javaee第6章源代码

    JavaEE 6引入了JPA 2.0,提供了更多的查询语言特性,如命名查询和 Criteria 查询,以及实体图形化操作,使得数据操作更加便捷。 4. **EJB(Enterprise JavaBeans)**:EJB是JavaEE的组件模型,用于实现业务逻辑。在...

    JavaEE6 Doc

    6. **JPA 2.0**:Java Persistence API的升级,增强了ORM(对象关系映射)功能,如多态性支持、命名查询和级联操作,使得数据库操作更为灵活。 7. **Servlet 3.0**:Servlet规范的第三个版本,支持异步处理、过滤器...

    j2ee6-javaEE6文档 手册 CHM

    4. **Java Persistence API(JPA)2.0**:JPA是ORM(对象关系映射)的标准,2.0版本增强了对多对多关联的支持,添加了查询语言JPA QL,以及实体图形化的查询API(Criteria API),使得数据库操作更为便捷。...

Global site tag (gtag.js) - Google Analytics