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
分享到:
相关推荐
5. **Java Persistence API 2.0 (JPA 2.0)**:JPA2.0带来了更强大的数据访问能力,包括新的查询语言(JPQL)和 Criteria API,以及对多对多关联和懒加载的改进。 6. **Enterprise JavaBeans 3.1 (EJB 3.1)**:EJB...
3. **Java Persistence API (JPA) 2.0**:JPA 2.0提供了更强大的ORM(对象关系映射)功能,包括支持实体图形的查询、多对多关系的处理以及延迟加载等特性。同时,Hibernate成为了JPA的首选实现。 4. **JavaServer ...
JPA2.0在JavaEE6中引入,增强了 Criteria查询,支持双向一对多和多对多关系,以及延迟加载等功能。 5. **Enterprise JavaBeans (EJB)**: - EJB3.1在JavaEE6中进行了大量的简化和优化,使得无状态会话bean和实体...
1. **模块化**:JavaEE6引入了模块化概念,允许开发者只选择项目所需的部分组件,如EJB3.1、JPA2.0、JSF2.0等,减少了应用的体积和复杂性。 2. **轻量级容器**:Web Profile是JavaEE6的一个重要概念,它是针对小型...
在Java EE 6中,JPA 2.0引入了更多的查询选项,如 Criteria API 和 Named Queries,以及实体图形和多对多关联的改进。 2. **Enterprise JavaBeans (EJB 3.1)**:EJB是Java EE的核心组件,用于构建可部署在服务器端...
JPA 2.0增强了查询语言(JPQL)的功能,支持多表联合查询、子查询以及更复杂的更新和删除操作。此外,还引入了 Criteria API,为编写类型安全的查询提供了另一种选择。 七、RESTful Web服务 JSR311引入了对RESTful ...
四、JPA2.0 Java Persistence API 2.0增强了ORM(Object-Relational Mapping)功能,支持更多的查询选项,如JPQL(Java Persistence Query Language)的增强,以及Criteria查询,使得数据访问更加灵活。 五、...
客户关系管理演示这是一个简单的展示,展示了如何使用 Angular.js 和 Java EE 6(JAX-RS 和 JPA 2.0)构建 Web 应用程序。 要部署,只需将 war 复制到 Jboss AS 7.1 的“standalone/deployments”目录。 您还可以...
5. **JPA(Java Persistence API)**:JavaEE 6中的JPA 2.0允许开发者在Java应用程序中轻松管理关系数据库的数据。`javax.persistence`包中的`EntityManager`, `Entity`, `@Entity`, `@Table`, `@Column`等是数据...
4. **JPA 2.0**(Java Persistence API 2.0):JPA 2.0在数据持久化方面提供了更丰富的功能,如多对多关系的直接映射,增强的查询语言JPQL(Java Persistence Query Language),以及 Criteria API,使得对象关系...
- **新的准则API**:JPA 2.0 引入了一个新的准则 API,它提供了一种类型安全的方式来构建动态查询,从而替代了传统的字符串拼接方式。 ##### 3. 从 JPA 1.0 迁移到 2.0 的关键变化 - **新特性支持**:了解并利用 ...
6. **Java Persistence API(JPA)2.0**:JPA 2.0提供了更丰富的查询语言(JPQL)和 Criteria API,增强了对关联管理的支持,使得数据库操作更为灵活和高效。 7. **JavaServer Faces(JSF)2.0**:JSF 2.0改进了...
JavaEE 6 API包含了诸如JAX-RS(Java API for RESTful Web Services)、JPA 2.0、JMS 1.1、JSF 2.0等关键模块的规范和实现细节,是开发者编写高效、符合标准的代码的重要工具。 在JavaEE 6中,一些重要的新特性包括...
JavaEE6中的JPA 2.0提供了更多的查询语言特性,如JPQL(Java Persistence Query Language)和命名查询,让数据库交互更加灵活。 5. CDI(Contexts and Dependency Injection):CDI是JavaEE6中引入的新特性,提供...
6. **JPA 2.0**:Java Persistence API(JPA)是JavaEE中用于对象关系映射的规范,JPA 2.0增强了查询语言(JPQL)和 Criteria API,支持双向一对多和多对多关联。 7. **JMS 2.0**:Java Message Service(JMS)允许...
5. **Java Persistence API (JPA) 2.0**:JPA2.0增加了对多对多关系的更好支持,引入了二级缓存和查询语言JPA Criteria API,使得数据库操作更加灵活高效。 6. **JavaServer Faces (JSF) 2.0**:JSF2.0引入了 ...
JavaEE 6引入了JPA 2.0,提供了更多的查询语言特性,如命名查询和 Criteria 查询,以及实体图形化操作,使得数据操作更加便捷。 4. **EJB(Enterprise JavaBeans)**:EJB是JavaEE的组件模型,用于实现业务逻辑。在...
6. **JPA 2.0**:Java Persistence API的升级,增强了ORM(对象关系映射)功能,如多态性支持、命名查询和级联操作,使得数据库操作更为灵活。 7. **Servlet 3.0**:Servlet规范的第三个版本,支持异步处理、过滤器...
4. **Java Persistence API(JPA)2.0**:JPA是ORM(对象关系映射)的标准,2.0版本增强了对多对多关联的支持,添加了查询语言JPA QL,以及实体图形化的查询API(Criteria API),使得数据库操作更为便捷。...