这两天做的项目使用到了此类,于是对其用法稍微进行了一下总结
常用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