参数传递和接收和mapper.xml

这个是实体传参,用主实体接收参数

先看实体类

  1. 主表实体类
public class HadTask extends AuditingEntity{
    private Integer taskCount;//下发总数量
    private String beginDate;//开始时间
    private String endDate;//截止时间
    private String status;
    private List<HadUserCount> hadUserCountList;}
  1. 字表实体类
public class HadUserCount extends AuditingEntity{
    private HadTask hadTask;
    private Organization organization; //组织机构ID
    private Integer userCount;}

前台传入的参数格式

name='hadUserCountList["+i+"].organization.id'
name='hadUserCountList["+i+"].userCount'

Mapper.xml里怎么写?

<insert id="addHadTask" parameterType="HadTask">
        <selectKey resultType="string" order="BEFORE" keyProperty="id">
            select sys_uuid() from dual
        </selectKey>
        begin
        insert into  had_task
            (
             id,
             begin_date,
             end_date,
             task_count,
            create_user_id
            ) values (
              #{id,jdbcType=VARCHAR},
              to_date(#{beginDate,jdbcType=VARCHAR},'yyyy-MM-dd'),
              to_date(#{endDate,jdbcType=VARCHAR},'yyyy-MM-dd'),
              #{taskCount,jdbcType=INTEGER},
              #{createUser.id,jdbcType=VARCHAR}
          );
          <foreach collection="hadUserCountList" item="item" index="index">
            insert into had_user_count
              (
               id,had_task_id,organization_id,user_count,create_user_id
              )
              values
              (
              sys_uuid(),
              #{id},
              #{hadUserCountList[${index}].organization.id,jdbcType=VARCHAR},
              #{hadUserCountList[${index}].userCount,jdbcType=INTEGER},
              #{createUser.id,jdbcType=VARCHAR}
              );

          </foreach>
        end;
    </insert>
### MyBatis `mapper.insert` 方法与 Spring Boot 中 `this.save` 方法的区别 #### 插入机制的不同实现方式 在 MyBatis 中,`mapper.insert` 是通过 XML 或者注解定义的 SQL 映射文件来执行插入操作。开发者需要手动编写 SQL 语句,并指定参数映射关系[^1]。 而在 Spring Data JPA 或 MyBatis Plus 提供的 `this.save` 方法,则更加抽象化自动化。该方法能够自动识别实体状态(新记录或已有记录),并根据情况调用相应的数据库操作逻辑[^3]。 #### 参数传递形式对比 对于 `mapper.insert` 来说,通常情况下会接收一个 POJO 对象作为参数,此对象中的字段会被映射到 SQL 语句中的占位符位置上。这意味着每次新增数据时都需要确保传入的对象结构与表结构相匹配[^2]。 而当使用 `this.save` 函数时,除了支持类似的单个实体保存外,还允许批量处理多个实体实例;更重要的是它可以直接接受领域模型类而不必关心底层具体的列名对应关系[^4]。 #### 自动化程度上的区别 采用原生 MyBatis 的 `insert` 接口意味着更高的灵活性以及更细粒度地控制查询过程,但也伴随着更多的编码工作量——例如设置主键回填策略、配置乐观锁版本号等细节都需自行完成。 相比之下,在引入了诸如 MyBatis Plus 这样的增强框架之后,`save` 操作不仅简化了许多常规 CRUD 场景下的开发流程,而且还内置了一些实用功能如自动生成创建时间更新时间戳等功能,从而减少了不必要的样板代码书写负担。 ```java // 使用 MyBatis 手写的 Insert 示例 @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") int insertUser(User user); // 使用 MyBatis Plus 的 Save 示例 @Override public boolean save(T entity); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值