Java 如何动态编写条件查询?

Java 如何动态编写条件查询?,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,您好,我正在编写一个条件查询来获取员工。我使用泛型类型作为此方法的参数。用户可以动态地传递他们想要的类。对于employee类,我想动态添加一些限制,比如如果employee为true,那么我想获取该记录,否则不应该获取该记录。但是,如果用户只提供记录而没有任何限制,那么它就必须获取所有记录 public static <T> List getRowCount(Class<T> classname) { Session ses = HibernateUtil.g

您好,我正在编写一个条件查询来获取员工。我使用泛型类型作为此方法的参数。用户可以动态地传递他们想要的类。对于employee类,我想动态添加一些限制,比如如果employee为true,那么我想获取该记录,否则不应该获取该记录。但是,如果用户只提供记录而没有任何限制,那么它就必须获取所有记录

public static <T> List getRowCount(Class<T> classname) {

    Session ses = HibernateUtil.getSessionFactory().openSession();
    System.out.println("classname" + classname);
    List<SetPaginationRecords> s1 = new ArrayList<SetPaginationRecords>();
    try {
        Criteria crit1 = ses.createCriteria(classname);
        crit1.setProjection(Projections.rowCount());
        List l1 = crit1.list();
        Iterator it1 = l1.iterator();
        if (it1.hasNext()) {
            Object o = it1.next();
            totalNumberOfRecords = Integer.parseInt(o.toString());
        }
    }
}
公共静态列表getRowCount(类名称){
Session ses=HibernateUtil.getSessionFactory().openSession();
System.out.println(“classname”+classname);
列表s1=新的ArrayList();
试一试{
Criteria crit1=ses.createCriteria(类名);
crit1.setProjection(Projections.rowCount());
List l1=crit1.List();
迭代器it1=l1.Iterator();
if(it1.hasNext()){
对象o=it1.next();
totalNumberOfRecords=Integer.parseInt(o.toString());
}
}
}
这是我的呼叫方法。

 List<SetPaginationRecords> paginationrecords = PaginationClass.getRowCount(EmployeeEntity.class);
        request.setAttribute("paginationrecords", paginationrecords);
List paginationrecords=PaginationClass.getRowCount(EmployeeEntity.class);
setAttribute(“分页记录”,分页记录);

您可以尝试类似的方法(这只是一个示例,请概述它的外观):

会话会话=HibernateUtil.getSessionFactory().openSession(); 条件=session.createCriteria(Employee.class); if(userChoice.femalesOnly()){ 标准。添加(限制。情商(“性别”,性别。女性)); } List employees=criteria.List();
在这里,您首先创建一个没有限制的条件。这意味着将获取所有记录。然后检查用户数据,并根据给定的信息增加条件。最后,调用
list()
获取结果。

您可以使用isAssignableFrom来确定要处理的对象

public static <T> List getRowCount(Class<T> classname) {
   Criteria crit1 = ses.createCriteria(classname);

   if(Employee.class.isAssignableFrom(classname)){
      //Add some restriction to the criteria
   }
}
公共静态列表getRowCount(类名称){
Criteria crit1=ses.createCriteria(类名);
if(Employee.class.isAssignableFrom(classname)){
//对标准添加一些限制
}
}

您好,有人能帮我吗?怎么可能传递我示例的参数?您的示例不完整。源代码缺少重要的类型和变量。让它完整,也许我能给你一个正确的答案。至于现在,我不得不猜了很多,对不起。
public static <T> List getRowCount(Class<T> classname) {
   Criteria crit1 = ses.createCriteria(classname);

   if(Employee.class.isAssignableFrom(classname)){
      //Add some restriction to the criteria
   }
}