`

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呢?获取不到啊。

相关推荐

    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”目录。 您还可以...

    最新myeclipse10中文版下载地址与汉化2013、注册码、破解包(汉化包2013更新)

    MyEclipse 10 使用高级桌面和Web开发技术,包括 HTML5 和 Java EE 6,支持 JPA 2.0、JSF 2.0 、Eclipselink 2.1 以及 OpenJPA 2.0. 而对 IBM WebSphere 用户来说,MyEclipse Blue 支持最新版本的 WebSphere Portal ...

    jboss-javaee6-webapp

    jboss-javaee6-webapp:各种技术,包括... 它演示了如何使用JSF 2.1,CDI 1.0,JAX-RS,EJB 3.1,JPA 2.0和Bean Validation 1.0创建兼容的Java EE 6应用程序。 它还包括一个持久性单元以及一些示例性持久性和事务代码,

    jboss-javaee6-webapp2

    此项目设置为允许您使用 JSF 2.0、CDI 1.0、EJB 3.1、JPA 2.0 和 Bean Validation 1.0 创建兼容的 Java EE 6 应用程序。 它包括一个持久性单元和一些示例持久性和事务代码,向您介绍企业 Java 中的数据库访问。 中...

    Beginning Java EE 6 with GlassFish 3, 2nd Edition

    He is the author of a Java EE 5 book in France and is also an Expert Member on Java EE 6, EJB 3.1, and JPA 2.0. He is the cofounder of the Paris Java User Group. For more, visit ...

    jee6-demos:Java EE 6平台上的演示

    JPA 2.0 EclipseLink JPA 2.5.0 ÿ JMS 3.0 ActiveMQ 5.7.0 ñ JMS 3.0 GlassFish 3.1.2 /打开MQ 5 ÿ JAX-WS 2.2 地铁jaxws-ri-2.2.8 ÿ JSF 2.1 GlassFish 3.1.2 / Mojarra 2.1 ÿ 工具 ddbb:...

    openjpa

    Apache OpenJPA是Apache软件基金会的Java持久性项目,可以... 2.x发行版是JSR-317 Java Persistence 2.0规范的生产就绪型兼容实现,该组件向后兼容JPA 1.0规范,并通过了Sun JPA 2.0 Technology Compatibility Kit。...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 面向对象的JPQL 457 11.1.2 查询API简介 457 11.2 执行查询 459 11.2.1 使用Query创建查询 459 11.2.2 设置查询参数 459 11.2.3 取得查询结果 460 11.3 JPQL语法 ...

    openjpa:Apache OpenJPA

    此存储库的内容已根据Apache License 2.0 许可 更多信息 可以在openjpa-project子目录中找到以下文件: openjpa-project / BUILDING.txt openjpa-project / CHANGES.txt openjpa-project / RELEASE-NOTES.html ...

    univers-2.0:EE JavaEE,Vaadin框架,Spring,Spring Security,Spring Boot,Maven,JPA,JBoss-WildFly

    Univers 2.0 JavaEE,Vaadin框架,Spring,Spring Security,Spring Boot,Maven,JPA,JBoss-WildFly

    jscms源代码

    集合了Spring3.1 + Struts2.3 + Hibernate4.1 + JPA2.0 + FreeMarker + MySQL 等技术。 开发环境 : eclipse-jee-Juno-Release-win32 JDK 1.6 Apache tomcat 6.0 MySQL 5.5 系统依赖的其它jar包版本可以在lib目录里...

    agoncal-book-javaee7

    开始Java EE 7 书的结构 第1节-简介 第1章-Java EE 7环境 第2节-相互关注 第2章-上下文和依赖... Chapter02:JPA 2.0简介 Chapter03:JPA映射 Chapter04:JPA实体管理器和JPQL Chapter05:JPA生命周期和侦听器 第06

    pet-catalog:JEE6版本

    宠物目录样本这是一个完整的 JEE6 示例,包含 JSF2.0、EJB3.1 和 JPA2.0。 此示例使用 Stackato 旧版构建包中的 JavaEE 框架。数据库配置因为我们已经在 manifest.yml 文件中指定了一个framework标签,所以 Stackato...

    Java/JavaEE 学习笔记

    6、CSS...................205 JavaScript...................206 一、JS概述............206 二、JS的基础语法208 三、JS常用内置对象(11种)............209 四、DHTML(动态HTML对象)......210 五、JavaScirpt高级...

    JAVAEE博客系统源码-javaee8-jaxrs-sample:使用JavaEE8和JAXRS2.1构建的RESTfulAPI演示

    EE博客系统源码javaee8-jaxrs-sample(WIP) 我已经创建来演示如何使用 Java EE 7 和 JAX-RS 2.0 构建 RESTful API。 在这个示例中,我将使用最新的 Java EE 8 重写它。我将使用 Glassfish v5 作为目标运行时,因为...

Global site tag (gtag.js) - Google Analytics