• QBC CriteriaQuery用法


    Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象。在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Criteria实例中。这样,程序员可以不使用SQL甚至HQL的情况下进行数据查询。
    以下以两个实体类User、Department为例:

    User:
     

    1. import javax.validation.constraints.DecimalMax;
    2. import javax.validation.constraints.DecimalMin;
    3. import javax.validation.constraints.Email;
    4. import javax.validation.constraints.Max;
    5. import javax.validation.constraints.Min;
    6. import javax.validation.constraints.NotEmpty;
    7. import javax.validation.constraints.NotNull;
    8. import javax.validation.constraints.Past;
    9. import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    10. @JsonIgnoreProperties({"dpt"})
    11. public class User {
    12. private int id;
    13. @NotEmpty
    14. private String name;
    15. @Min(value =1)
    16. @Max(value =200)
    17. private int age;
    18. @NotEmpty
    19. private String pwd;
    20. @Past
    21. private Date birthday;
    22. @NotNull
    23. private Department dpt;
    24. @DecimalMin(value = "1")
    25. @DecimalMax(value = "3")
    26. private Double height;
    27. @Email
    28. private String email;
    29. setter............. getter...........
    30. }

    Department:
     

    1. import java.util.HashSet;
    2. import java.util.Set;
    3. public class Department {
    4. private int id;
    5. private String name;
    6. private Set users = new HashSet();
    7. setter...... getter........
    8. }
    1. 带条件式用法:
      1. public List<User> selectUserold(int gt, int lt, int dep_id) {
      2. //1、创建builder
      3. CriteriaBuilder builder=getSession().getCriteriaBuilder();
      4. //2、拿到criteriaQuery
      5. CriteriaQuery<User> criteriaQuery=builder.createQuery(User.class);
      6. //3、获取到根对像,构建查询条件
      7. Root<User> root=criteriaQuery.from(User.class);
      8. Predicate predicate1= (Predicate) builder.gt(root.get("id"), gt);
      9. Predicate predicate2= (Predicate) builder.lt(root.get("id"), lt);
      10. Predicate predicate3= (Predicate) builder.equal(root.get("dpt"),dep_id);
      11. Predicate predicate=builder.and(predicate1,predicate2,predicate3);
      12. /* 设置要获取数据的字段 */
      13. criteriaQuery.select(root.get("name"));
      14. /* 设置条件 */
      15. criteriaQuery.where(predicate);
      16. //4、获取query对象
      17. Query<User> query=getSession().createQuery(criteriaQuery);
      18. //5、执行查询
      19. List<User> users=query.list();
      20. return users;
      21. }

    2. 获取指定字段数据:
       
    1. /* CriteriaQuery根据条件查询多个字段的值 */
    2. public List<User> selectUser(int gt, int lt, int dep_id) {
    3. //1、创建builder
    4. CriteriaBuilder builder = getSession().getCriteriaBuilder();
    5. //2、拿到criteriaQuery
    6. CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
    7. //3、获取到根对像,构建查询条件
    8. Root<User> root = criteria.from(User.class);
    9. Predicate predicate1= (Predicate) builder.gt(root.get("id"), gt);
    10. Predicate predicate2= (Predicate) builder.lt(root.get("id"), lt);
    11. Predicate predicate3= (Predicate) builder.equal(root.get("dpt"),dep_id);
    12. Predicate predicate=builder.and(predicate1,predicate2,predicate3);
    13. /* 设置条件 */
    14. criteria.where(predicate);
    15. /* 设置要获取值的字段 */
    16. Path<Integer> qId = root.get("id");
    17. Path<String> qname = root.get("name");
    18. criteria.multiselect(qId,qname);
    19. /* 获取到的结果 */
    20. List<Tuple> tuples = getSession().createQuery(criteria).getResultList();
    21. for (Tuple tuple : tuples)
    22. {
    23. int id = tuple.get(qId);
    24. String name = tuple.get(qname);
    25. System.out.println(id+":"+name);
    26. }
    27. return null;
    28. }

    需导入的包:

    1. import javax.persistence.Tuple;
    2. import javax.persistence.criteria.CriteriaBuilder;
    3. import javax.persistence.criteria.CriteriaQuery;
    4. import javax.persistence.criteria.Join;
    5. import javax.persistence.criteria.JoinType;
    6. import javax.persistence.criteria.Path;
    7. import javax.persistence.criteria.Predicate;
    8. import javax.persistence.criteria.Root;

  • 相关阅读:
    HTML页面的全屏显示及退出全屏案例
    10_libpcap以及libnet
    Linux-文档编辑命令
    在线html编辑器 富文本转为html代码
    【Linux】Linux操作系统
    Java编码
    (SpringBoot)第八章:SpringMVC程序开发
    SQL Server - 提高服务器安全性13招
    网络知识:内网、外网、宽带、带宽、流量、网速之间的联系?
    PHP中文转拼音实现
  • 原文地址:https://blog.csdn.net/jingde528/article/details/127573357