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

实体类一对多的时候怎么添加数据,第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}

严格意义上讲,没有所谓“同时插入”的手段,只有“要么都插入(分先后),要么都不插入”的机制,这个机制就叫做“事务”,是数据库服务器的执行单位,是原子 *** 作。

由上,将两个insert命令包装为一个事务,如下:

declare @OK integer

begin transaction

set @OK = 0

while 1 = 1

begin

insert table1 values( ... )

set @OK = @@error

if @OK <>0

Break

insert table2 values (... )

set @OK = @@error

Break

end

if @OK = 0

commit transaction

else

rollback transaction

通过触发器也能实现你的需求,其底层原理依然是事务,触发器和引发它执行的语句被自动地包装到一个事务中。不过,强烈不建议使用该方法,用此伎俩会导致业务逻辑分散,而人的思维还是需要一定的连贯性,集中在一起显然有助于表达和理解,当需要改进或者调试错误时徒增繁琐,实在是弊大于利。


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

原文地址:https://54852.com/sjk/6928926.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存