spring中的RowMapper

半城伤御伤魂 提交于 2019-12-09 17:54:56

一.简介

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

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


二.RowMapper

1、方法:

建立内部类实现RowMapper接口;

RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法;

对自定义类的包装就在mapRow方法中实现.

2、例子:

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更简单,且无需建接口

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!