spring中的RowMapper

一.简介

sql中返回的是自定义的列或者一些统计的列,直接用hibernate没法处理;java

此时,能够使用RowMapper将数据中的每一行数据封装成用户定义的类sql


二.RowMapper

一、方法: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映射

用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);
}
}
}
相关文章
相关标签/搜索