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);
}
}
}
相關文章
相關標籤/搜索