描述:在近期的项目中遇到了一个问题,调用存储过程时,本来想使用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)接口和实现:...
- JDBC是Java与数据库交互的标准接口,通过`CallableStatement`对象来执行存储过程。首先,需要建立数据库连接,然后创建`CallableStatement`实例,设置SQL语句(以`{call}`开头),最后执行并处理结果。 - 示例...
10. Spring JDBC与JPA:Spring框架提供了Spring JDBC模块,简化了基于JDBC的数据库访问,提供模板类如JdbcTemplate和NamedParameterJdbcTemplate。此外,Spring Data JPA是Spring对JPA(Java Persistence API)的...
描述中提到的"db封装"通常指的是对数据库操作进行抽象和封装,以提供统一的接口或服务。这样的封装可以帮助开发者避免直接与SQL交互,提高代码的可维护性和可测试性,同时还能利用Spring的依赖注入和事务管理等特性...
JDBC是Java中用来访问数据库的标准接口,它提供了一组API,使得开发者能够连接到数据库、执行SQL语句并处理结果。Spring通过JDBC抽象层,进一步提高了JdbcTemplate和NamedParameterJdbcTemplate的易用性,减少了...
10. **存储过程**:MySQL支持创建存储过程,可以在数据库端封装复杂逻辑,通过`CallableStatement`调用。 综上所述,这个“Mysql数据库练习”文件很可能涵盖了上述知识点,通过实践练习,你可以深入理解和掌握Java...
JDBC是Java标准版(Java SE)的一部分,提供了连接、查询和操作各种类型数据库的接口和类。以下是一些关键的JDBC组件: 1. **DriverManager**: 连接管理器,负责注册数据库驱动并建立到数据库的连接。 2. **...
- **存储过程**: 可以方便地调用数据库中的存储过程,并处理其返回的结果集。 **5. 结果集处理** Spring JDBC提供了RowMapper和ResultSetExtractor接口,用于将数据库查询结果映射到Java对象。此外,还可以使用...
这两个类利用了数据库元数据,简化了插入操作和调用存储过程的过程。只需要提供表名或存储过程名以及一个Map作为参数,Map的键与数据库表字段对应。它们需要JDK 5及以上的环境,并且数据库需要提供足够的元数据信息...
- `SqlCall`接口用于封装数据库的存储过程和函数调用。`StoredProcedure`类是其具体实现,用于执行存储过程。 3. **数据库连接**: - Spring JDBC通过`DataSource`来管理数据库连接。`DataSource`是一个接口,...
业务逻辑层通常包含Service接口和其实现类,它们封装了与数据库交互的具体操作。Service层可以使用@Autowired注入DAO(数据访问对象)层,执行SQL查询或更新。 DAO层则负责具体的数据操作,Spring的JdbcTemplate或...
在本文中,我们将深入探讨Spring JDBC的应用实例,了解如何利用它来实现高效且灵活的数据访问。首先,我们需要理解Spring JDBC是如何通过JdbcTemplate和NamedParameterJdbcTemplate这两个主要工具来封装JDBC操作的。...
- **SimpleJDBCClasses**:Spring还提供了一系列简单的JDBC类,如SimpleJDBCInsert和SimpleJdbcCall,它们进一步简化了常见的数据库操作,如插入记录和存储过程调用。 - **SimpleJDBCInsertClass**:这个类提供了一...
`SimpleJdbcInsert`允许你设置表名和列名,然后自动构建插入语句,而`SimpleJdbcCall`则可以方便地调用数据库中的存储过程,自动处理输入参数和输出结果。 在事务管理方面,Spring JDBC提供了`...
"spring-jdbc-4.3.7.RELEASE.jar"是Spring对JDBC进行抽象和封装的模块,它提供了数据库访问的高层API,使得数据库操作变得简单且易管理。主要特性包括: 1. 数据源管理:Spring通过DataSource接口,帮助开发者配置...
Spring通过JdbcTemplate和NamedParameterJdbcTemplate这两个工具类,对JDBC进行了高度的封装,简化了数据库操作。JdbcTemplate提供了模板方法,如execute、query、update等,使得开发者无需关注连接创建、关闭以及...
2. **JdbcTemplate**: JdbcTemplate是Spring提供的一个核心类,它封装了常见的JDBC操作,如执行SQL查询、更新、存储过程等,避免了手动处理结果集和异常。通过使用模板方法设计模式,它简化了事务管理和资源关闭,...
DAO模式是将数据访问操作封装到独立的对象中,这样业务逻辑可以与数据存储机制解耦,提高了代码的可重用性和可测试性。 **2. 异常处理** Spring DAO通过定义一套统一的异常层次结构,如`DataAccessException`,使得...