`
keep_going
  • 浏览: 12018 次
  • 性别: 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;
    }
}

 

 

     

 

分享到:
评论

相关推荐

    数据库三层架构通用代码 访问层 数据库接口

    在"数据库三层架构通用代码 访问层 数据库接口"的场景中,通用类库源码可能包含以下内容: - 数据库连接池:如C3P0、Druid或HikariCP,用于高效管理和复用数据库连接。 - DAO(Data Access Object)接口和实现:...

    java操作存储过程

    - JDBC是Java与数据库交互的标准接口,通过`CallableStatement`对象来执行存储过程。首先,需要建立数据库连接,然后创建`CallableStatement`实例,设置SQL语句(以`{call}`开头),最后执行并处理结果。 - 示例...

    java的数据库程序

    10. Spring JDBC与JPA:Spring框架提供了Spring JDBC模块,简化了基于JDBC的数据库访问,提供模板类如JdbcTemplate和NamedParameterJdbcTemplate。此外,Spring Data JPA是Spring对JPA(Java Persistence API)的...

    这是一个可以和spring 整合的db 封装

    描述中提到的"db封装"通常指的是对数据库操作进行抽象和封装,以提供统一的接口或服务。这样的封装可以帮助开发者避免直接与SQL交互,提高代码的可维护性和可测试性,同时还能利用Spring的依赖注入和事务管理等特性...

    Spring Framework 开发参考手册,数据库系统的JDBC驱动程序

    JDBC是Java中用来访问数据库的标准接口,它提供了一组API,使得开发者能够连接到数据库、执行SQL语句并处理结果。Spring通过JDBC抽象层,进一步提高了JdbcTemplate和NamedParameterJdbcTemplate的易用性,减少了...

    Mysql数据库练习

    10. **存储过程**:MySQL支持创建存储过程,可以在数据库端封装复杂逻辑,通过`CallableStatement`调用。 综上所述,这个“Mysql数据库练习”文件很可能涵盖了上述知识点,通过实践练习,你可以深入理解和掌握Java...

    JSP数据库编程指南

    JDBC是Java标准版(Java SE)的一部分,提供了连接、查询和操作各种类型数据库的接口和类。以下是一些关键的JDBC组件: 1. **DriverManager**: 连接管理器,负责注册数据库驱动并建立到数据库的连接。 2. **...

    Springjdbc

    - **存储过程**: 可以方便地调用数据库中的存储过程,并处理其返回的结果集。 **5. 结果集处理** Spring JDBC提供了RowMapper和ResultSetExtractor接口,用于将数据库查询结果映射到Java对象。此外,还可以使用...

    使用JDBC进行数据访问【springframwork】定义.pdf

    这两个类利用了数据库元数据,简化了插入操作和调用存储过程的过程。只需要提供表名或存储过程名以及一个Map作为参数,Map的键与数据库表字段对应。它们需要JDK 5及以上的环境,并且数据库需要提供足够的元数据信息...

    Spring jdbc中数据库操作对象化模型的实例详解

    - `SqlCall`接口用于封装数据库的存储过程和函数调用。`StoredProcedure`类是其具体实现,用于执行存储过程。 3. **数据库连接**: - Spring JDBC通过`DataSource`来管理数据库连接。`DataSource`是一个接口,...

    SpringMVC+Mysql实例详解

    业务逻辑层通常包含Service接口和其实现类,它们封装了与数据库交互的具体操作。Service层可以使用@Autowired注入DAO(数据访问对象)层,执行SQL查询或更新。 DAO层则负责具体的数据操作,Spring的JdbcTemplate或...

    Spring JDBC应用实例讲解

    在本文中,我们将深入探讨Spring JDBC的应用实例,了解如何利用它来实现高效且灵活的数据访问。首先,我们需要理解Spring JDBC是如何通过JdbcTemplate和NamedParameterJdbcTemplate这两个主要工具来封装JDBC操作的。...

    Just Spring Data Access

    - **SimpleJDBCClasses**:Spring还提供了一系列简单的JDBC类,如SimpleJDBCInsert和SimpleJdbcCall,它们进一步简化了常见的数据库操作,如插入记录和存储过程调用。 - **SimpleJDBCInsertClass**:这个类提供了一...

    Spring_jdbc模板相关jar包

    `SimpleJdbcInsert`允许你设置表名和列名,然后自动构建插入语句,而`SimpleJdbcCall`则可以方便地调用数据库中的存储过程,自动处理输入参数和输出结果。 在事务管理方面,Spring JDBC提供了`...

    Spring对JDBC的支持jar包.rar

    "spring-jdbc-4.3.7.RELEASE.jar"是Spring对JDBC进行抽象和封装的模块,它提供了数据库访问的高层API,使得数据库操作变得简单且易管理。主要特性包括: 1. 数据源管理:Spring通过DataSource接口,帮助开发者配置...

    SpringStudy_JDBC.zip

    Spring通过JdbcTemplate和NamedParameterJdbcTemplate这两个工具类,对JDBC进行了高度的封装,简化了数据库操作。JdbcTemplate提供了模板方法,如execute、query、update等,使得开发者无需关注连接创建、关闭以及...

    spring+jdbc整合

    2. **JdbcTemplate**: JdbcTemplate是Spring提供的一个核心类,它封装了常见的JDBC操作,如执行SQL查询、更新、存储过程等,避免了手动处理结果集和异常。通过使用模板方法设计模式,它简化了事务管理和资源关闭,...

    Spring数据访问对象框架入门

    DAO模式是将数据访问操作封装到独立的对象中,这样业务逻辑可以与数据存储机制解耦,提高了代码的可重用性和可测试性。 **2. 异常处理** Spring DAO通过定义一套统一的异常层次结构,如`DataAccessException`,使得...

Global site tag (gtag.js) - Google Analytics