SpringBoot2.X + JDBCTemPlate批量插入数据代码总结

JDBCTemPlate从接触JAVA开始就会用到这个工具,它是原生JDBC的更高一级别的工具性质的操作类,对原生JDBC进行了很多细节上的封装,只提供了入口API,使用者只需要选对API然后传对应的参数即可;将原有的比较繁琐的细节实现屏蔽了,对于使用的角度来说,表现得更加的友好;这次在这里对JDBCTemPlate的实现细节与API底层不做阐述,这是记录它对于批量数据插入的使用方法,方便后期回顾的时候能够快速上手;话不多少,直接上代码:

1. 项目工程是Maven整合SpringBoot2.x进行开发的,所以默认整合了JDBCTemplate, 直接注入导包即可:

 

2. 在方法中首先要定义好SQL语句,注意本项目工程用的是MySQL以及自增主键,所以ID这个字段并没有传,另外需要注意的是,SQL语句的字段是你数据库表中的字段,不是你实体类中的属性字段,这点要分清楚,虽然算不上什么大问题,但是很耗费时间去弄;

3. 接下来就是调用jdbcTemPlate的API进行操作了,非常需要说明的是,本文中说明的是用到它来进行批量数据插入,所以我只说明了我的使用方法;注意我红框框起来的地方,这是设置参数的类型,对应的是数据库的类型,如果实在是觉得难搞,那就选择ps.Object类型吧;还有需要注意的是,SQL中所传的参数不能为null, 如果有,那就需要给字段设定默认值就像我这么干,或者将就是动态的拼接SQL语句,至于如何动态拼接,这里不多赘述,使用StringBuild或者用if语句都可以,看你怎么玩;

4. 这个getBatchSize方法,是batchUpdateAPI中自带的获取一次批量多少数据的方法,不支持定义,它根据方法参数列表中的大小来进行批量,打个比方,你一次传入的list的长度是1000,那就一次性存一千条记录;

5. 贴源码

String sql = "insert into t_strategy_store_product(strategy_id, store_id, product_id, bar_id, is_shelf, is_empty, sort, strategy_classes_id, is_deleted, created_time, product_label) "
                                            + "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                ps.setInt(1, ssProducts.get(i).getStrategyId());
                ps.setInt(2, ssProducts.get(i).getStoreId());  
                ps.setInt(3, ssProducts.get(i).getProductId());
                if(ssProducts.get(i).getBarId() == null) {
                    ps.setInt(4, 0);
                }else {
                    ps.setInt(4, ssProducts.get(i).getBarId());
                }
                ps.setBoolean(5, ssProducts.get(i).getIsShelf());
                ps.setBoolean(6, ssProducts.get(i).getIsEmpty()); 
                ps.setInt(7, ssProducts.get(i).getSort());
                ps.setInt(8, ssProducts.get(i).getStrategyClassesId());
                ps.setBoolean(9, ssProducts.get(i).getIsDeleted());
                ps.setObject(10, ssProducts.get(i).getCreatedTime());
                if(ssProducts.get(i).getProductLabel() == null) {
                    ps.setString(11, "");
                }else {
                    ps.setString(11, ssProducts.get(i).getProductLabel());
                }
            }
            
            @Override
            public int getBatchSize() {
                return ssProducts.size();
            }
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值