sql中返回的是自定義的列或者一些統計的列,直接用hibernate沒法處理;java
此時,能夠使用RowMapper,將數據中的每一行數據封裝成用戶定義的類sql
一、方法:app
創建內部類實現RowMapper接口;this
RowMapper中有一個mapRow方法,因此實現RowMapper接口必定要實現mapRow方法;spa
對自定義類的包裝就在mapRow方法中實現.hibernate
二、例子:code
public class TestDao { private JdbcTemplate jt; public void setJt(JdbcTemplate jt) { this.jt = jt; } public List<TNpc> getAll(){ String sql = "select * from t_npc"; //使用 List list = jt.query(sql, new NpcRowMapper()); return list; } /** * 定義內部類實現RowMapper接口 */ public class NpcRowMapper implements RowMapper{ //實現mapRow方法 public Object mapRow(ResultSet rs, int num) throws SQLException { //對類進行封裝 TNpc npc = new TNpc(); npc.setId(rs.getLong("id")); npc.setName(rs.getString("name")); return npc; } } }
用map映射相對rowMapper更簡單,且無需建接口orm
List<Object> args = new ArrayList<Object>(); args.add(before); args.add(today); //sql獲取須要的統計字段 String sql = "select cur_week_answer_count,cur_week_answer_score from t_answer where create_time>? and create_time<? and is_best_answer!=1"; //queryForList,而後把獲取到的數據放到map中 List<Map<String,Object>> ids = EnvUtils.getEnv().getSimpleJdbcTemplate().queryForList(sql.toString(), args.toArray()); if(ids != null && !ids.isEmpty()){ for(Map<String,Object> map : ids){ //從map中獲取數據 long answerCount = Long.parseLong(String.valueOf(map.get("cur_week_answer_count"))); long answerScore = Long.parseLong(String.valueOf(map.get("cur_week_answer_score "))); Answer answer = answerService.load(answerCount,answerScore); Question question = answer.getQuestion(); if(answer != null && question != null && answer.getId() == question.getBestAnswerId()){ qustionRaltionZhidaoService.setBestAnswerToZhidao(answer); } } }