`
张玉龙
  • 浏览: 737307 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

为JdbcTemplate扩展获得插入数据的主键功能[转]

 
阅读更多

package com.lianai88.common.access;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ParameterDisposer;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

/**
 * 数据存取适配器
 * @author David Day
 */
public class JdbcTemplateAdapter extends JdbcTemplate {
	
	public JdbcTemplateAdapter() {
		super();
	}
	
	public JdbcTemplateAdapter(DataSource ds) {
		super(ds);
	}
	
	/**
	 * 增加并且获取主键
	 * @param sql sql语句
	 * @param params 参数列表
	 * @return 主键
	 */
	public Object insertAndGetKey(final String sql, final Object... params) {
		logger.debug("Executing SQL update and returning generated keys");
		
		final KeyHolder key = new GeneratedKeyHolder();

		update(new PreparedStatementCreator() {

			public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
				PreparedStatement ps = con.prepareStatement(sql, 
						PreparedStatement.RETURN_GENERATED_KEYS);
				PreparedStatementSetter pss = new ArgPreparedStatementSetter(params);
				try {
					if (pss != null) {
						pss.setValues(ps);
					}
				} finally {
					if (pss instanceof ParameterDisposer) {
						((ParameterDisposer) pss).cleanupParameters();
					}
				}
				return ps;
			}
			
		}, key);
		
		return key.getKey();
	}

}
分享到:
评论

相关推荐

    将postgres 表结构和数据转换到sqllite数据库中的工具类源码

    2. **获取表结构**:通过SQL查询获取PostgreSQL中的表结构,包括字段名、数据类型、主键信息等。 3. **创建SQLite表**:根据获取的PostgreSQL表结构,在SQLite中创建相应的表。这可能涉及到数据类型的映射,因为两...

    spring 中的jdbc

    2. `SimpleJdbcInsert`:这是一个专门用于插入数据的工具类,可以自动生成INSERT语句,并自动处理主键生成策略。 3. `SimpleJdbcCall`:用于调用存储过程和函数,支持输入、输出和InOut参数。 4. `...

    汤阳光_Spring2.5课程文档(三)

    - 示例代码中展示了如何定义一个`addUser()`方法,使用JdbcTemplate的`execute()`方法插入用户数据。这里使用了`ConnectionCallback`回调接口,在连接回调中编写SQL语句,并使用`PreparedStatement`设置参数,以...

    spring详解3

    幻读是指一个事务读取了一段时间的数据后,其他事务插入了新数据,导致原事务再次读取时看到“幻影”。 **2.3 Spring事务管理支持** - **编程式事务管理**:通过在代码中显式调用事务管理API,开发者可以精确控制...

    Spring中文帮助文档

    11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall...

    Spring Jdbc的jar包

    Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一种抽象层,使得开发者可以更轻松地处理数据库操作。Spring JDBC的主要目标是简化数据访问,减少直接使用JDBC时的繁琐工作,如手动管理...

    Spring.3.x企业应用开发实战(完整版).part2

    11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate ...

    Spring3.x企业应用开发实战(完整版) part1

    11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate ...

    springboot集成phoenix+hbase

    在IT行业中,Spring Boot是一个非常流行的Java开发...通过上述步骤,你可以创建一个基础的示例应用,然后根据实际需求扩展功能。这个集成使得开发人员能用熟悉的SQL语法操作HBase,降低了学习曲线,提高了开发效率。

    可二次开发的java项目,简单的增删改查

    这样的项目通常包含了一个数据库模型,一些DAO(数据访问对象)层的代码,以及可能的业务逻辑和服务层,为其他开发者提供了扩展和定制的基础。 描述部分提到这是一个针对MySQL的demo,意味着该项目主要展示了如何在...

    手写ORM框架笔记.txt

    - **目的**:将实体类的信息(字段、表名等)转换为易于操作的数据结构。 - **实现**:通过某种方式(如注解或XML配置)获取实体类的相关信息,并将其封装成`EntityOperation`对象。这样,在进行数据库操作时可以...

    springmvc+mysql增删改查【时间段条件查询】

    它通过解耦应用程序的各个组件,如业务逻辑、数据访问和用户界面,提高了代码的可测试性和可扩展性。 ### 2. 整合Spring MVC与MySQL 要将Spring MVC与MySQL结合,我们需要以下步骤: - **配置数据库连接**:在`...

    Spring API

    11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall...

Global site tag (gtag.js) - Google Analytics