• 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;

  • 相关阅读:
    【0144】postmaster创建System V Shared Memory(共享内存)的背后机制
    功能测试常用的测试用例大全
    dvwa-command injection 代码审计(超详细逐行审计)
    全球与中国无线演示器行业市场前瞻及未来发展趋向预测报告2022-2028年
    5款可以在学习和办公上提供帮助的软件
    无代码开发和低代码开发的本质区别
    8Manage:在采购中使用电子反向竞价需要考虑什么
    【LangChain学习之旅】—(11) 记忆:通过Memory记住用户上次的对话细节
    Unity - Rigidbody刚体
    Java高级教程
  • 原文地址:https://blog.csdn.net/jingde528/article/details/127573357