Java spring MVC使用html选项筛选结果

Java spring MVC使用html选项筛选结果,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,想象一个显示学生列表的简单应用程序 我想弄清楚这个概念。我的示例中的代码有望解释这一点 您有一个控制器findStudents() 您有一个显示学生列表的网页。网页顶部是筛选选项列表。考虑一个带有选择选项的表单,例如国家、注册日期、状态、课程等,以及一个提交按钮。该网页向控制器发送http ajax请求,并将filterOptions参数作为数组传入。然后,控制器应返回一个json数组形式的筛选学生列表 这是我到目前为止的想法。在本例中,我希望在注册日期进行筛选(可能还有其他日期,但为了简单起见

想象一个显示学生列表的简单应用程序

我想弄清楚这个概念。我的示例中的代码有望解释这一点

您有一个控制器
findStudents()

您有一个显示学生列表的网页。网页顶部是筛选选项列表。考虑一个带有选择选项的表单,例如国家、注册日期、状态、课程等,以及一个提交按钮。该网页向控制器发送http ajax请求,并将filterOptions参数作为数组传入。然后,控制器应返回一个json数组形式的筛选学生列表

这是我到目前为止的想法。在本例中,我希望在注册日期进行筛选(可能还有其他日期,但为了简单起见,我选择了一个-并非所有筛选选项都可以同时选择)

下面的代码示例是否正确?我感觉到一股代码的味道

有些事情我不确定

  • 过滤器选项是否存储为一个实体?e、 g.ArrayList of 筛选结果的国家/地区。。e、 g.让我看看英国的学生, 爱尔兰、法国等
  • 我需要使用服务吗
  • 学生应该如何看待
控制器

@RequestMapping(value = "/find-students", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> PostFormDataByMap(@RequestBody Map<String, Object> filterOptions) {

    List<BeatRate> students = studentsJpaRepository.findAllWithFilters(filterOptions);

    return obj;
}
@RequestMapping(value=“/find students”,method=RequestMethod.POST)
public@ResponseBody映射PostFormDataByMap(@RequestBody映射过滤器选项){
List students=StudentsParepository.findAllWithFilters(filterOptions);
返回obj;
}
接口

@Repository
public interface StudentsJpaRepository  {
    public List<Student> findAll();
    public List<Student> findAllWithFilters();
}
@存储库
公共界面学生Parepository{
公共列表findAll();
公共列表findAllWithFilters();
}
dao-StudentsParepositoryImpl

public List<Student> findWithFilter(HashMap filterOptions<String, String>) {
    String sql =
            "SELECT " +
                    "id",
                    "first-name, " +
                    "address, " +
                    "course," +
                    "age," +
                    "date_enroled"  
                    "FROM " +
                    "BeatRate ";

    if(filterOptions.get("date_enroled")){
        sql = sql+" WHERE date_enroled = "+filterOptions.get("date_enroled");
    }

    Query query = entityManager.createNativeQuery(sql, Student.class).setMaxResults(10);
    return query.getResultList();
}
公共列表findWithFilter(HashMap filterOptions){
字符串sql=
“选择”+
“身份证”,
“名字,”+
地址+
“当然”+
“年龄,”+
“登记日期”
“来自”+
“殴打”;
if(filterOptions.get(“date\u enroled”)){
sql=sql+“其中date_enroled=“+filterOptions.get”(“date_enroled”);
}
queryquery=entityManager.createNativeQuery(sql,Student.class).setMaxResults(10);
返回query.getResultList();
}

仅供参考,您的findWithFilter方法可能容易受到SQL注入的攻击,如果您不修复它,可能会对应用程序造成严重的安全问题。不应使用字符串加法连接用户控制下的参数(日期)。您应该使用参数化查询(例如
+“WHERE date\u enroled=?”
,然后使用
query.setParameter(…)应用变量参数
@Service接口及其实现是您应该调用存储库的地方。这是Spring应用程序的正确设计。关于存储库,存储库接口应该从JPARepository扩展,如果您想要自定义功能,则应覆盖这些方法。