项目场景:
项目用到了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;
}