JdbcTemplate的使用
来源:互联网 发布:网络与格纹是什么意思 编辑:程序博客网 时间:2024/06/06 08:51
一、介绍
Spring中关于JDBC的一个辅助类(JDBC Template),它封装了JDBC的操作,使用它来构建项目
为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层,以此建立一个JDBC存取框架。
作为 SpringJDBC 框架的核心,JDBC 模板的设计目的是为不同类型的JDBC操作提供模板方法。每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务。通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低。
二、API
JdbcTemplate主要提供以下五类方法:
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
query方法及queryForXXX方法:用于执行查询相关语句;注意:spring 3.2.2之后,jdbctemplate中的queryForInt已经被取消了!
call方法:用于执行存储过程、函数相关语句。
三、配置
在Spring核心配置里面创建数据库连接池,然后就可以创建JdbcTemplate,创建之后,就可以在实现类中注入jdbcTemplate对象,然后通过JdbcTemplate对象查询数据库的信息
<context:annotation-config /> <bean id="vbpmJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 数据源配置, 使用DBCP数据库连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${VIP_DB_VIPVBPM_MASTER_DRIVER}"/> <property name="url" value="${VIP_DB_VIPVBPM_MASTER_URL}"/> <property name="username" value="${VIP_DB_VIPVBPM_MASTER_USERNAME}"/> <property name="password" value="${VIP_DB_VIPVBPM_MASTER_PASSWORD}"/> <!-- Connection Pooling Info --> <property name="maxActive" value="${VIP_DB_VIPVBPM_MASTER_POOL_MAXWAIT}"/> <property name="maxIdle" value="${VIP_DB_VIPVBPM_MASTER_POOL_MAXIDLE}"/> <property name="maxWait" value="${VIP_DB_VIPVBPM_MASTER_POOL_MAXWAIT}" /> <property name="validationQuery" value="${VIP_DB_VIPVBPM_MASTER_VALIDATIONQUERY}" /> <property name="testWhileIdle" value="${VIP_DB_VIPVBPM_MASTER_TESTWHILEIDLE}" /> </bean>
也可以通过注入bean或JdbcDaoSupport方式来配置。
四、使用
定义接口
public interface CrudDao { /** * insert、update和delete操作 * @param sql * @param argTypes * @param args * @return */ Integer save(String sql, int[] argTypes, Object... args); /** * 返回主键 * @param sql * @param args * @return */ Integer saveAndReturnPrimaryKey(String sql, Object... args); /** * 返回表中记录总数 * @param sql * @return */ Integer queryForInt(String sql, int[] argTypes, Object... args); /** * select操作 * @param sql * @param argTypes * @param args * @return */ List<Map<String, Object>> queryForList(String sql, int[] argTypes, Object... args); /** * 根据主键删除表 * @param tableName * @param id * @param type * @return */ Integer deleteById(String tableName, Object id, int type);}
实现类
@Service("crudDaoImpl")public class CrudDaoImpl implements CrudDao { @Autowired private JdbcTemplate vbpmJdbcTemplate; @Override public Integer save(String sql, int[] argTypes, Object... args) { return vbpmJdbcTemplate.update(sql, args, argTypes); } @Override public Integer saveAndReturnPrimaryKey(final String sql, final Object... args) { KeyHolder keyHolder = new GeneratedKeyHolder(); vbpmJdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection conn) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } return ps; } }, keyHolder); return keyHolder.getKey().intValue(); } @Override public Integer queryForInt(String sql, int[] argTypes, Object... args) { return vbpmJdbcTemplate.queryForObject(sql, args, argTypes, Integer.class); } @Override public List<Map<String, Object>> queryForList(String sql, int[] argTypes, Object... args) { return vbpmJdbcTemplate.queryForList(sql, args, argTypes); } /** * 根据主键id删除数据 * @param tableName * @param id * @param type */ @Override public Integer deleteById(String tableName, Object id, int type) { String sql = "delete from " + tableName + " where id=?"; Object[] args = new Object[] { id }; int[] types = new int[] { type }; return save(sql, types, args); }}
测试类:
private Integer insertVbpmTaskConf() { String insertSql = "insert into vbpm_task_conf(proc_name,proc_def_id,task_def_key) values(?,?,?)"; Object[] insertArgs = new Object[] { "testProcessName", "123", "测试"}; return crudDaoImpl.saveAndReturnPrimaryKey(insertSql, insertArgs); }
五、说明
1、入参:sql、参数值和参数类型,不返回主键
public Integer save(String sql, int[] argTypes, Object... args){ return vbpmJdbcTemplate().update(sql,args,argTypes); }
或者
public Integer save(String sql, final Object... args){ return vbpmJdbcTemplate().update(sql,new PreparedStatementSetter() { public void setValues(PreparedStatement ps) throws SQLException { for (int i = 0; i < args.length; i++) { ps.setObject(i+1, args[i]); } } }); }
调用
String sql = "delete from vbpm_task_conf where proc_def_id=? and task_def_key=?"; Object[] args = new Object[] { "123", "测试" }; int[] types = new int[] { Types.VARCHAR, Types.VARCHAR }; return crudDaoImpl.save(sql, types, args);
2、入参:sql、参数值,返回主键
public Integer save(final String sql, final Object... args){ KeyHolder keyHolder = new GeneratedKeyHolder(); vbpmJdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection conn) throws SQLException { PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); for (int i = 0; i < args.length; i++) { ps.setObject(i + 1, args[i]); } return ps; } }, keyHolder); return keyHolder.getKey().intValue();}
阅读全文
0 0
- jdbctemplate的使用
- Spring的jdbcTemplate使用
- Spring的jdbcTemplate使用
- Spring的jdbcTemplate使用
- Spring的jdbcTemplate使用
- Spring的jdbcTemplate使用
- JdbcTemplate的使用
- Spring的jdbcTemplate使用
- jdbctemplate的使用
- JdbcTemplate的使用
- jdbcTemplate的简单使用
- JDBCTemplate的使用
- 使用spring的jdbcTemplate
- JdbcTemplate的使用
- JDBCTemplate的使用详解
- Spring的JdbcTemplate的使用
- JdbcTemplate代码的部分使用
- 使用jdbcTemplate查询的三种回调
- Java的Executor框架和线程池实现原理
- JQuery对象和DOM对象
- BZOJ2818: Gcd
- 浅拷贝与深拷贝的区别与实现
- ue4 1官网编程指南总结
- JdbcTemplate的使用
- EOJ 3239 最长的等差数列(排序+枚举)
- 京东面试题
- HashSet中是如何判断元素是否重复的
- 表单验证(失去焦点)
- Java数据库连接池实现原理
- 强连通分量-tarjan算法
- ExpandableListView三级列表实现(带选择联动效果)
- MyEclipse中Egit安装与使用