1、调用存储过程不一样
2、后者能够用具名参数
sql="{ call \"sp_account_member_fetch\"(?)}"; -- jdbctemplate的调用方式
sql=" select * from \"sp_account_member_fetch\"(:id)";--namedjdbctemplate的使用方式
参数设置不一样:
1、
比如说,这个是jdbctemplate的调用存储过程方式:
public PagerResult<Member> getPager(
int pageindex,
int pagesize,
Integer cnd_id_eq,
Integer cnd_region_id_eq,
String cnd_name_like,
String cnd_email_like,
String cnd_mobile_eq,
Timestamp cnd_regist_time_min,
Timestamp cnd_regist_time_max,
String cnd_wxopenid_eq,
String cnd_unionid_eq,
String sort_column,
Boolean sort_by_asc
){
int theParamIndex=0;
PagerResult<Member> pagerResult=new PagerResult<>();
pagerResult=jdbcTemplate.execute(new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection con) throws SQLException {
String sql="";
sql="{ call \"sp_account_member_getPager\"(?,?,?,?,?,?,?,?,?,?,?,?,?)}";
CallableStatement st=con.prepareCall(sql);
int paraIndex=1;
st.setInt(paraIndex,pageindex);
paraIndex++;
st.setInt(paraIndex,pagesize);
paraIndex++;
st.setInt(paraIndex,cnd_id_eq);
paraIndex++;
st.setInt(paraIndex,cnd_region_id_eq);
paraIndex++;
st.setString(paraIndex,cnd_name_like);
paraIndex++;
st.setString(paraIndex,cnd_email_like);
paraIndex++;
st.setString(paraIndex,cnd_mobile_eq);
paraIndex++;
st.setTimestamp(paraIndex,cnd_regist_time_min);
paraIndex++;
st.setTimestamp(paraIndex,cnd_regist_time_max);
paraIndex++;
st.setString(paraIndex,cnd_wxopenid_eq);
paraIndex++;
st.setString(paraIndex,cnd_unionid_eq);
paraIndex++;
st.setString(paraIndex,sort_column);
paraIndex++;
st.setBoolean(paraIndex,sort_by_asc);
return st;
}
},new CallableStatementCallback<PagerResult<Member>>(){
@Override
public PagerResult<Member> doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
PagerResult<Member> pager=new PagerResult<>();
List<Member> list=new ArrayList<>();
cs.execute();
ResultSet rs=(ResultSet)cs.getResultSet();
if (rs.next()){
String json_str=rs.getString(1);
if(ValidateUtils.isEmpty(json_str)){
return pager;
}
pager=JSONObject.parseObject(json_str,PagerResult.class);
}
if (rs.next()){
String json_str=rs.getString(1);
if(ValidateUtils.isEmpty(json_str)){
}
else{
list=JSONObject.parseArray(json_str,Member.class);
}
pager.setData(new ArrayList<>());
for(Member item:list){
pager.getData().add(item);
}
}
rs.close();
cs.getConnection().setAutoCommit(true);
return pager;
}
});
return pagerResult;
}
而具名jdbctemplate则可以这样调用:
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public PagerResult<Member> getPager(
int pageindex,
int pagesize,
Integer cnd_id_eq,
Integer cnd_region_id_eq,
String cnd_name_like,
String cnd_email_like,
String cnd_mobile_eq,
Timestamp cnd_regist_time_min,
Timestamp cnd_regist_time_max,
String cnd_wxopenid_eq,
String cnd_unionid_eq,
String sort_column,
Boolean sort_by_asc
){
int theParamIndex=0;
PagerResult<Member> pagerResult=new PagerResult<>();
String sql="";
sql="{ call \"sp_account_member_getPager\"(?,?,?,?,?,?,?,?,?,?,?,?,?)}";
sql="select * from \"sp_account_member_getPager\"(:pageindex,\n" +
" :pagesize,\n" +
" :cnd_id_eq,\n" +
" :cnd_region_id_eq,\n" +
" :cnd_name_like,\n" +
" :cnd_email_like,\n" +
" :cnd_mobile_eq,\n" +
" :cnd_regist_time_min,\n" +
" :cnd_regist_time_max,\n" +
" :cnd_wxopenid_eq,\n" +
" :cnd_unionid_eq,\n" +
" :sort_column,\n" +
" :sort_by_asc)";
MapSqlParameterSource parameterSource=new MapSqlParameterSource();
parameterSource.addValue("pageindex",pageindex);
parameterSource.addValue("pagesize",pagesize);
parameterSource.addValue("cnd_id_eq",cnd_id_eq);
parameterSource.addValue("cnd_region_id_eq",cnd_region_id_eq);
parameterSource.addValue("cnd_name_like",cnd_name_like);
parameterSource.addValue("cnd_email_like",cnd_email_like);
parameterSource.addValue("cnd_mobile_eq",cnd_mobile_eq);
parameterSource.addValue("cnd_regist_time_min",cnd_regist_time_min);
parameterSource.addValue("cnd_regist_time_max",cnd_regist_time_max);
parameterSource.addValue("cnd_wxopenid_eq",cnd_wxopenid_eq);
parameterSource.addValue("cnd_unionid_eq",cnd_unionid_eq);
parameterSource.addValue("sort_column",sort_column);
parameterSource.addValue("sort_by_asc",sort_by_asc);
pagerResult=namedParameterJdbcTemplate.execute(sql, parameterSource, new PreparedStatementCallback<PagerResult<Member>>() {
@Override
public PagerResult<Member> doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {
PagerResult<Member> pager=new PagerResult<>();
List<Member> list=new ArrayList<>();
ps.execute();
ResultSet rs=(ResultSet)ps.getResultSet();
if (rs.next()){
String json_str=rs.getString(1);
if(ValidateUtils.isEmpty(json_str)){
return pager;
}
pager=JSONObject.parseObject(json_str,PagerResult.class);
}
if (rs.next()){
String json_str=rs.getString(1);
if(ValidateUtils.isEmpty(json_str)){
}
else{
list=JSONObject.parseArray(json_str,Member.class);
}
pager.setData(new ArrayList<>());
for(Member item:list){
pager.getData().add(item);
}
}
rs.close();
ps.getConnection().setAutoCommit(true);
return pager;
}
});
return pagerResult;
}
本文详细对比了JdbcTemplate和NamedParameterJdbcTemplate在调用存储过程时的不同,包括参数设置方式和调用语法的区别,展示了具名参数在复杂查询中的优势。
1361

被折叠的 条评论
为什么被折叠?



