使用JdbcTemplate完成复杂查询
一.Repository
package com.cy.repository;
import com.cy.entity.Homework;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.sql.Types;
import java.util.List;
import java.util.Map;
@Repository
public class DTODao {
@Resource
private JdbcTemplate jdbcTemplate;
public List<Map<String, Object>> queryHomeworkUserDTOListMap(Homework homework) {
String sql = "SELECT u.id,u.username,uh.h_id,uh.complete_time from `user` u LEFT JOIN user_homework uh on (u.id=uh.u_id and uh.h_id= ? )where u.type='student'";
Object[] args = {homework.getId()};
int[] argTypes = {Types.VARCHAR};
return this.jdbcTemplate.queryForList(sql, args, argTypes);
}
}
sql是方法使用的sql语句 ?号表示要传入的参数
args声明要传入的参数,按?号排列顺序一一对应。
argtypes声明传入参数的类型,一一对应。
通过调用jdbcTemplate的queryforlist方法完成查询
public List<Map<String, Object>> queryForList(String sql, Object[] args, int[] argTypes) throws DataAccessException {
return this.query(sql, args, argTypes, this.getColumnMapRowMapper());
}
二.Service
public ArrayList<HomeworkUserDTO> gethomeworkdetail(Homework homework) {
ArrayList<HomeworkUserDTO> ah = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
List<Map<String, Object>> listmap = dd.queryHomeworkUserDTOListMap(homework);
for (int i = 0; i < listmap.size(); i++) {
HomeworkUserDTO hud = new HomeworkUserDTO();
String id = (String) listmap.get(i).get("id");
String username = (String) listmap.get(i).get("username");
String hid = (String) listmap.get(i).get("hid");
try {
if (listmap.get(i).get("complete_time")!=null){
Date completeTime = new Date(sdf.parse( listmap.get(i).get("complete_time").toString()).getTime());
hud.setCompleteTime(completeTime);
}else {
Date completeTime=null;
hud.setCompleteTime(completeTime);
}
} catch (ParseException e) {
e.printStackTrace();
}
hud.setId(id);
hud.setUsername(username);
hud.setHid(hid);
if (hud.getCompleteTime() == null) {
hud.setStatus("未完成");
} else {
hud.setStatus("完成");
}
ah.add(hud);
}
return ah;
}
通过调用repository中的方法得到一个包含查询结构的由map组成的list。
三.Controller
@RequestMapping("showdetails/{id}")
public ArrayList<HomeworkUserDTO> showdetails(@PathVariable("id") String hid) {
return hs.gethomeworkdetail(hs.findAllById(hid).get(0));
}
在contoller层调用service方法得到值。通过地址传值的方法得到相应的参数。