zoukankan      html  css  js  c++  java
  • Spring中新建记录后返回自增主键的处理方法

    接手一个旧系统改造的过程,要插入后立即返回自增值,不能重构guid类型主键,Spring提供了很优美的机制。

    Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值的方法 :KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder,该类返回新增记录时的自增长主键值

    代码:

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.Date;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.PreparedStatementCreator;
    import org.springframework.jdbc.support.GeneratedKeyHolder;
    import org.springframework.jdbc.support.KeyHolder;
    import javax.sql.DataSource;
    
    public class Main {
    
        public static void main(String[] args) {
    
            ApplicationContext context = new ClassPathXmlApplicationContext("TemporaryVenue-test.xml");
            DataSource dataSource = (DataSource)context.getBean("dataSource");
            JdbcTemplate  jdbcTemplate = new JdbcTemplate(dataSource);     
        
            String insert_sql = "insert into SYS_USERTV(username,password) values(?,?)";         
            
            //调用,获取插入后的自增值,其中"id"是自增字段名称
            System.out.println("方法调用获取当前自增int主键值" + insert(insert_sql,jdbcTemplate,"id"));
        
        }
    
        /**
         * 插入后返回自增主键值
         * @param jdbcTemplate
         * @return
         */
        private static Number insert(final String sql, 
                JdbcTemplate jdbcTemplate,
                final String keyName) {
           KeyHolder keyHolder = new GeneratedKeyHolder(); 
            int lines=jdbcTemplate.update(new PreparedStatementCreator() {
                
                @Override
                public PreparedStatement createPreparedStatement(Connection connection)
                        throws SQLException {
                    PreparedStatement ps = PreStatement(sql, connection,keyName);
                    return ps;
                }
            }, keyHolder);
                
                return keyHolder.getKey();
        }
        
        /**
         * 装载参数
         * @param sql
         * @param connection
         * @param keyName:自增字段名称
         * @return
         * @throws SQLException
         */
        private static PreparedStatement PreStatement(final String sql,
                Connection connection,String keyName) throws SQLException {
            PreparedStatement ps = connection.prepareStatement(sql,
                    new String[] { keyName });
            ps.setString(1, new Date().toString());
            ps.setString(2, "aa");
            return ps;
        }
    
    }
  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/starcrm/p/6408919.html
Copyright © 2011-2022 走看看