利用NamedParameterJdbcTemplate类封装接口访问数据库存储过程
描述:在近期的项目中遇到了一个问题,调用存储过程时,本来想使用mybatis访问,但由于mybatis的复杂的XML文件
?
?配置及使用注解对以后更换访问方式的不方便性考虑,且在使用时只需要存入数据库对应的字段Map集合,就可以
?
? ? ? ? ?轻松的实现数据库的增、删、改、查。于是想到了SPring提供的访问Jdbc的模板,
?
? ? ? ? ?NamedParameterJdbcTemplate(?程安全的,可以同时被多个DAO调用,可通过Spring管理)类就可以轻松
?
?的实现数据库的字段与传入的参数进行绑定,并返回对应的Map类型的List集合(系统菜单和数据字典),通过遍
?
? ? ? ? ?历就可以轻松的实现对数据库的访问,具体的接口类和实现过程如下所示(事务管理暂未贴出):?
?
?
文件配置:(ApplicationContxet.xml关键部分)
?
? ? ? ? ?<bean id="dataSource"
? ? ? ? ? ? ? ? ?destroy-method="close">
? ? ? ? <property name="driverClass" value="${jdbc.driverClass}"/>
? ? ? ? <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
? ? ? ? <property name="user" value="${jdbc.user}"/>
? ? ? ? <property name="password" value="${jdbc.password}"/>
? ? ? ??<property name="maxIdleTime" value="${jdbc.maxIdleTime}"/>
? ? ? ? <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
<property name="minPoolSize" value="${jdbc.minPoolSize}"/>
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
? ? ? ??<property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"/>
? ? ? ? <property name="checkoutTimeout" value="${jdbc.checkoutTimeout}"/>
? ? ? ??<property name="acquireIncrement" value="${jdbc.acquireIncrement}"/>
? ? </bean>
<bean id="jdbcTemplate" ref="dataSource"/>
</bean>
<bean id="jdbcDao" ref="jdbcTemplate"/>
</bean>
?
DAO接口:
?
? ? ? ??public interface IJdbcDao {
? ? ?public Map<String, Object> queryForMap(String procName,?Map<String,Object>?mapParams);
?
? ? ?public List<Map<String, Object>> queryForList(String procName,?
Map<String, Object> mapParams);
? ? ?public Object queryForObject(String procName, Map<String, Object> mapParams, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Class<Object> sClass);
?
? ? ?public int update(String procName, Map<String, Object> mapParams);
?
? ? ?public int delete(String procName, Map<String, Object> mapParams);
?
? ? ?public int insert(String procName, Map<String, Object> mapParams);
? ? ? ? }
?
?
实现:
?
public class JdbcDaoImpl implements IJdbcDao {
?
private NamedParameterJdbcTemplate jdbcTemplate;
?
? ? ? ? ? ? ? ? public JdbcDaoImpl() {}
?
public void setJdbcTemplate(NamedParameterJdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;
}
?
public Map<String, Object> queryForMap(String procName, Map<String, Object> mapParams){
String strSql = this.getSqlStr(procName, mapParams);
return this.jdbcTemplate.queryForMap(strSql, mapParams);
}
?
?public List<Map<String, Object>> queryForList(String procName,
Map<String, Object> mapParams){
String strSql = this.getSqlStr(procName, mapParams);
List<Map<String, Object>> list = this.jdbcTemplate.queryForList(strSql, mapParams);return list;
}
?
?public Object queryForObject(String procName, Map<String, Object> mapParams, Class<Object> sClass) {
String strSql = this.getSqlStr(procName, mapParams);
Object obj = this.jdbcTemplate.queryForObject(strSql, mapParams, sClass);
return obj;
}
?
public int update(String procName, Map<String, Object> mapParams) {
String strSql = this.getSqlStr(procName, mapParams);
return this.jdbcTemplate.update(strSql, mapParams);
}
?
public int delete(String procName, Map<String, Object> mapParams) {
String strSql = this.getSqlStr(procName, mapParams);
return this.jdbcTemplate.update(strSql, mapParams);
}
?
public int insert(String procName, Map<String, Object> mapParams) {
String strSql = this.getSqlStr(procName, mapParams);
return this.jdbcTemplate.update(strSql, mapParams);
}
?
public String getSqlStr(String procName, Map<String, Object> mapParams) {
String sResult = "";
if(mapParams == null || mapParams.size() == 0) {
sResult = "CALL " + procName + "()";
} else {
StringBuffer buffer = new StringBuffer();
buffer.append("CALL ");buffer.append(procName);
buffer.append("(");
Map<String, Object> map = new LinkedHashMap<String, Object>(mapParams);for(Map.Entry<String, Object> en : map.entrySet()) {
String sKey = en.getKey();buffer.append(":" + sKey + ",");
}
buffer.delete(buffer.length() - 1, buffer.length());
buffer.append(")");
sResult = buffer.toString();buffer.setLength(0);
}
return sResult;
}
}
?
? ? ?
?