`
keep_going
  • 浏览: 11658 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用NamedParameterJdbcTemplate类封装接口访问数据库存储过程

 
阅读更多
描述:在近期的项目中遇到了一个问题,调用存储过程时,本来想使用mybatis访问,但由于mybatis的复杂的XML文件配置及使用注解对以后更换访问方式的不方便性考虑,且在使用时只需要存入数据库对应的字段Map集合,就可以轻松的实现数据库的增、删、改、查。于是想到了SPring提供的访问Jdbc的模板,NamedParameterJdbcTemplate( 程安全的,可以同时被多个DAO调用,可通过Spring管理)类就可以轻松的实现数据库的字段与传入的参数进行绑定,并返回对应的Map类型的List集合(系统菜单和数据字典),通过遍历就可以轻松的实现对数据库的访问,具体的接口类和实现过程如下所示(事务管理暂未贴出): 

文件配置:(ApplicationContxet.xml关键部分)

 

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 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" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
        <constructor-arg index="0" ref="dataSource"/>
    </bean>
    <bean id="jdbcDao" class="com.szkingdom.dao.jdbc.impl.JdbcDaoImpl">
        <property name="jdbcTemplate" 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;
    }
}

 

 

     

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics