关于Spring中的NamedParameterJdbcTemplate类访问数据库的用法

这两天做的项目使用到了此类,于是对其用法稍微进行了一下总结

常用API传入参数类型介绍
1.Map<String,?> paramMap
    就是一个hash表,好处是可以根据参数名传参,paramMap.put("sqlparamName",value)
2.RowMapper rowMapper
    接口,通常需要该类型的参数时,先定义一个实体类(根据查询信息定义),然后在自定义一个类实现该接口,重写里面的方法,详情参考常用API介绍第一个
    注意:
    调用new BeanPropertyRowMapper(Class<T>)可以自动生成指定实体类的RowMapper类
3.SqlParameterSource
    其作用和Map一样,就是为sql中的条件参数赋值,
    BeanPropertySqlParameterSource,MapSqlParameterSource提供了对SqlParameterSource的实现,
    允许使用javabean或者Map来实现对命名参数传递。

    //BeanPropertySqlParameterSource传参方式
    SqlParameterSource sps = new BeanPropertySqlParameterSource(javaBean);

    //MapSqlParameterSource传参方式
    SqlParameterSource sps = new MapSqlParameterSource();
    //保证参数名和key相同
    sps.addValue("key",value);



常用API介绍
1.
 1.1:按条件查询(需要传入paramMap时)
 <T> List<T> query(String sql, Map<String,?> paramMap, RowMapper<T> rowMapper)
 该方法用于查询并返回一个list集合,paraMap为一个参数表 rowMapper为一个实现了RowMapper接口的实现类(内部主要逻辑为实现mapRow(ResultSet rs, int rowNum)方法,该方法主要就是为了将rs每一列赋值给实体类T)
 1.2:直接查询所有(不需要传入paramMap时)
 List<T> list = namedParameterJdbcTemplate.getJdbcOperations().query(String sql,new BeanPropertyRowMapper(Class<T> T));

 demo:
//实体类
public class ExerciseDTO {
    private String id;//活动id
    private String img_url;//活动名称
    
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getImg_url() {
        return img_url;
    }
    public void setImg_url(String img_url) {
        this.img_url = img_url;
    }
    
}


dao层调用该方法
 public List<ExerciseDTO> getExerciseImg(String citycode, String id){
        Map<String, String> namedParams = new HashMap<String, String>();
        StringBuilder sqlBuilder = new StringBuilder("SELECT ID, IMG_URL FROM AF_EXERCISE WHERE  CITYNAME = :CITYNAME AND ID = :ID");
        namedParams.put("ID", id);
        namedParams.put("CITYNAME", citycode);
        LOGGER.debug(sqlBuilder.toString());
        List<ExerciseDTO> exerciseDTOList =  namedParameterJdbcTemplate.query(sqlBuilder.toString(), namedParams, new ExerciseDTORowMapper());
}



 public class ExerciseDTORowMapper implements RowMapper{
    @Override
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        ExerciseDTO exerciseDTO = new ExerciseDTO();
        exerciseDTO.setId(StringUtils.defaultString(rs.getString("ID")));
        exerciseDTO.setImg_url(StringUtils.defaultString(rs.getString("IMG_URL")));
        return exerciseDTO;
    }
    
}


2.int update(String sql, Map<String,?> paramMap)
  int update(String sql, SqlParameterSource paramSource)
  上述两方法适用于插入,更新,删除操作,返回更新的条目数    
 
  int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder)
  int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder, String[] keyColumnNames)        
  上述两方法适用于插入,更新,删除操作,返回更新条目的主键值

3.<T> T queryForObject(String sql, Map<String,?> paramMap, Class<T> requiredType)
  <T> T queryForObject(String sql, Map<String,?> paramMap, RowMapper<T> rowMapper)
  <T> T queryForObject(String sql, SqlParameterSource paramSource, Class<T> requiredType)
  <T> T queryForObject(String sql, SqlParameterSource paramSource, RowMapper<T> rowMapper)
 
  //上述方法用于查询单一对象,当是一个实体类时,最后一个参数建议使用rowMapper,当是一个字段时,建议使用requierdType

4.Map<String,Object> queryForMap(String sql, Map<String,?> paramMap)
  Map<String,Object> queryForMap(String sql, SqlParameterSource paramSource)
 
  //上述方法返回的是map类型,key为字段名,当多表查询时,返回一条记录建议用此方法

5.List<Map<String,Object>>     queryForList(String sql, SqlParameterSource paramSource)
  List<Map<String,Object>>     queryForList(String sql, Map<String,?> paramMap)
     
  //上述方法返回的是list类型,key为字段名,当多表查询时,返回多条记录建议用此方法


建议参考文章:

                           http://blog.csdn.net/seemyname/article/details/47149059

                           http://zmx.iteye.com/blog/373736








猜你喜欢

转载自blog.csdn.net/weixin_40655220/article/details/79034610