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); } } }