实体类一对多的时候怎么添加数据

实体类一对多的时候怎么添加数据,第1张

使用List集合形式的参数的批量 *** 作

如果使用List集合来进行批量 *** 作,首先要把待添加的数据与实体类对应(一个实体类通常对应数据库里的一张表, 下面的例子中Actor类就是一个实体类, 它对应了数据库中的 "t_actor"数据表).

比如"t_actor"数据表中有id,first_name,last_name三个字段, 那么对应Actor类就要有id, firstName, lastName属性, 且都得有getter, setter方法.

spring jdbc core 包中提供了一个SqlParamterSource 对象,这个对象用于SQL语句参数的设置.

使用SqlParameterSourceUtils.createBatch这个方法,把javabean(即上面说的实体类)的list 转化成array,spring会循环的进行取值;

public class JdbcActorDao implements ActorDao { private NamedParameterTemplate namedParameterJdbcTemplate public void setDataSource(DataSource dataSource) { this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource)} public int[] batchUpdate(final List<Actor>actors) { SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(actors.toArray()) int[] insertCounts = namedParameterJdbcTemplate.batchUpdate( "INSERT INTO t_actor (id,first_name,last_name) VALUES(:id,:firstName, :lastName )",batch) return insertCounts} // ... additional methods}

本题重点是利用C列和D列的数据个数,以及数据重新排列的规律,生成被除的分母,利用INT和MOD函数,返回OFFSET函数的偏移量。

在G2单元格输入以下公式

=OFFSET($B$2,INT((ROW(A1)-1)/((COUNTA(C:C)-1)*(COUNTA(D:D)-1))),)

在H2单元格输入以下公式:

=OFFSET($C$2,MOD(INT((ROW(A1)-1)/(COUNTA(D:D)-1)),(COUNTA(D:D)-1)),)

在I2单元格输入以下公式:

=OFFSET($D$2,MOD((ROW(A1)-1),(COUNTA(D:D)-1)),)

然后选择G2、H2、I2单元格并向下填充公式即可。

如果需要在原数据下方生成一对多的数据组合排列,可以直接将公式中COUNTA括号内的C:C、D:D改为$C$2:$C$4、$D$2:$D$4,且无需再减首行的1,公式变为:

=OFFSET($B$2,INT((ROW(A1)-1)/((COUNTA($C$2:$C$4)*(COUNTA($D$2:$D$4)),)

=OFFSET($C$2,MOD(INT((ROW(A1)-1)/COUNTA($D$2:$D$4),COUNTA($D$2:$D$4)),)

=OFFSET($D$2,MOD((ROW(A1)-1),COUNTA($D$2:$D$4)),)

注:在原有的数据旁生成数据排列的好处是可以批量处理更多的数据,当数据量少时在原的数据下方生成新数据上下更易对应。

由于Excel附件已多次被百度知道系统识别为违规,故暂不提供附件,详见附图:

效果图如下:

订单表和商品表一对多,一个订单有多个商品。订单表:ID、订单号、顾客姓名、联系方式、配送地址商品表:ID、订单ID、商品名称、商品价格、商品数量添加的时候先添加一条订单返回mysql_insert_id()做为关联。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11797037.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存