springBoot项目jpa多表联查+动态sql,根据条件查询数据

项目场景:

项目用到了jpa多表联查加上动态查询


问题描述:

由于之前没接触过jpa项目,所以使用的的是原生sql语句开发,这个这个多表联查查询出来的数据是以数组的形式显示出来的,前边并没有属性,前端传不过去。
这个是之前代码。

 @Query(value = "SELECT b.student_class as student_class," +
            "a.activiteName as activiteName," +
            "a.templateId as templateId," +
            "a.student_answer as student_answer," +
            "a.state as state," +
            "a.student_id as student_id ," +
            "b.student_name as student_name," +
            "c.question as question," +
            "a.start_time as start_time," +
            "a.updata_time as updata_time," +
            "a.is_delete as is_delete FROM test1 a left JOIN test2 b on a.student_id = b.studentID left JOIN test3 c on c.id = a.templateId WHERE  a.is_delete = 0 " +
            " and if(:student_class = '' or :student_class is null ,1=1,student_class like %:student_class%)" +
            "and if(:activiteName = '' or :activiteName is null ,1=1,activiteName like %:activiteName%)" +
            "and if(:templateId =    '' or :templateId is null ,1=1,templateId =:templateId)" +
            "and if(:student_answer = '' or :student_answer is null ,1=1,student_answer like %:student_answer%)" +
            "and if(:state = '' or :state is null ,1=1,state like %:state%)" +
            "and if(:student_id = '' or :student_id is null ,1=1,student_id =:student_id)" +
            "and if(:student_name = '' or :student_name is null ,1=1,student_name like %:student_name%)" +
            "and if(:question = '' or :question is null ,1=1,question like %:question%)"
            , nativeQuery = true)
    List<Object> testSelectStudentAnswerUnite(String student_class, String activiteName, Integer templateId, String student_answer, String state, String student_id, String student_name, String question);

        }

解决方案:

在select实现层在吧数据一个个附上值
代码如下

 @Override
    public List<UniteModel> SelectStudentUnite(UniteModel uniteModel) {
    
    
        List<UniteModel> studentAnswerUnite = new ArrayList<>();
        //把数据以数组的形式查询出来
        List<Object> testStudentAnswerUnite =
                studentAnswerDao.selectStudentAnswerUnite(uniteModel.getStudent_class(),
                        uniteModel.getActiviteName(),
                        uniteModel.getTemplateId(),
                        uniteModel.getStudent_answer(),
                        uniteModel.getState(),
                        uniteModel.getStudent_id(),
                        uniteModel.getStudent_name(),
                        uniteModel.getQuestion());

        Object obj = null;
        //给查询出来的数组数据赋值
        for (Object o : testStudentAnswerUnite){
    
    
            Object[] objects = (Object[]) o;
            UniteModel model = new UniteModel();
            model.setStudent_class((String) objects[0]);
            model.setActiviteName((String) objects[1]);
            model.setTemplateId((Integer) objects[2]);
            model.setStudent_answer((String) objects[3]);
            model.setState((String) objects[4]);
            model.setStudent_id((String) objects[5]);
            model.setStudent_name((String) objects[6]);
            model.setQuestion((String) objects[7]);
            model.setStart_time((Date) objects[8]);
            model.setUpdata_time((Date) objects[9]);
            studentAnswerUnite.add(model);
        }
        return studentAnswerUnite;
    }




Guess you like

Origin blog.csdn.net/weixin_44459831/article/details/120682293