读书人

利用NamedParameterJdbcTemplate种封装

发布时间: 2012-12-26 14:39:28 作者: rapoo

利用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;

}

}

?

? ? ?

?

读书人网 >其他数据库

热点推荐