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