mybatis批量插入语句(List<T>)

来源:互联网 发布:如何查看tcp端口占用 编辑:程序博客网 时间:2024/05/03 19:29

我的接口定义:

int insertAbilityPackageConsumer(AbilityPackageConsumer abilityPackageConsumer);

我的入参实体长这样:(为了减少代码量,我只放上了属性)

public class AbilityPackageConsumer implements Serializable{/** *  */private static final long serialVersionUID = 7922942036926940889L;private Long appId;//应用idprivate Long abilityPackageId;//能力包idprivate Long abilityId;//能力idprivate Long abilityRuleId;//能力收费规则idprivate Long chargeRuleId;//收费策略idprivate Date subscribeTime;//订购时间private Long crtUid;//创建者private Date crtTime;//创建时间
private List<AbilityDetail> abilityList;}

那么mybatis的批量插入语句应该怎么写呢?

我在映射文件中是这么写的:

<insert id="insertAbilityPackageConsumer">insert into ability_package_consumer(app_id,ability_package_id,ability_id,ability_rule_id,charge_rule_id,subscribe_time,crt_uid,crt_time)select A.* from(<foreach collection="abilityList" item="ability" index="index" separator="UNION">SELECT#{appId,jdbcType=BIGINT} as app_id, #{abilityPackageId,jdbcType=BIGINT} as ability_package_id ,#{ability.abilityId,jdbcType=BIGINT} as ability_id,#{ability.abilityRuleId,jdbcType=BIGINT} as ability_rule_id,#{ability.chargeRuleId,jdbcType=BIGINT} as charge_rule_id,now() as subscribe_time,#{crtUid,jdbcType=BIGINT} as crt_uid,now() as crt_timefrom dual</foreach>) A</insert>

通过foreach的遍历完成一个多记录的联合视图,collection的属性值和实体中的一致,item自定义,然后通过.访问其属性值。

这主要是基于sql中的insert into 表名(?,?,?)      (?,?,?) union (?,?,?)这种语句的使用,表名后的?代表字段名,后面的则都是属性值。

原创粉丝点击