描述:在近期的项目中遇到了一个问题,调用存储过程时,本来想使用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; } }
相关推荐
实用数据库访问类,封装常见的数据库访问类助手
用QT 封装的操作Sql server,MySql,SQLite,ODBC数据库的接口类,我在QT5.8下使用没问题,非常好用!
封装的SQL数据库访问类为ASP.NET封装的SQL数据库访问类 using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Collections;
封装java访问数据库的操作 提供java连接池技术 web层简单应用。 里面有api,jar包,Demo简单例子。 多看下封装的类,希望对您的开发有帮助。
一个QT QSqlQuery访问数据库的封装类,里面封装了数据库相关类,使用单例及互斥锁保证数据库访问安全,及其使用案例,源码。
windows 关于qt的数据库操作封装类 以及用例: SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的功能特点有: 1. ACID事务 2. 零配置 – 无需安装和管理配置 3....
在网站开发时比较合理的做法就是我们的常用的一些程序做成函数或封闭成类,这样可以重复利用,可以节约开发成本了,下面来给各位介绍常使用的类. 优点: 1.方便快捷, 数据库操作只需调用接口; ...
c#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)
偶得一个绝佳C#数据库封装类,与大家分享一下! 本人的分数太少所以要价高些,但绝对实用 这个类包含 access sql oracle的访问 有源代码你可以修改满足自己项目的需要
C++使用ADO操作访问数据库的封装类 对连接数据库,获得记录集,执行命令进行了封装讲解, 在本人博客中有配套博文详细介绍: http://blog.csdn.net/MingoJiang
封装了常用的mysql,sqlserver,sqllite,access数据库的连接,数据访问等方法,原作者链接:http://www.qtcn.org/bbs/read-htm-tid-62347.html
mysql 封装类,不错 Mysql封装类 php 数据库 操作类 db 数据库
android数据库操作封装,android数据库操作封装,android数据库操作封装android数据库操作封装
ADO数据库读写封装类2.0,已经封装大部分数据库操作
VC封装ADO访问数据库的代码实例。可以直接运行,支持MFC技术。
封装接口: 1.生成数据库文件 2.打开数据库 3.关闭数据库 4.执行Sql语句 5.增删改查的实现及重载接口 6.事务操作:taransction和commit QT版本:QT5.14.2
用户封装到MySql数据库案例,主要是如何连接MySql数据库及将数据封装到数据库,及增删改查,采用MVC模式+三层结构
C#中oracle连接数据库的封装类,有简短的说明
封装好的JDBC数据库访问包,可以直接使用。对在JAVA中使用数据库非常方便。
vc6.0下已经写好的ADO封装类文件ADOConn.h ADOConn.cpp