mybatis主表与明细表一对多的同时插入操作方法

对主表(采购申请表)和明细表(申请物资表)同时进行插入操作insert:

<!--对申请主表插入一条记录 -->
<insert id="save" parameterType="com.bootdo.purchase.domain.ApplyDo" useGeneratedKeys="true" keyProperty="applyId">
    INSERT INTO pur_apply
    (apply_no,apply_depart_id,apply_person_id,apply_date,apply_estiamount,apply_status)
    VALUES
    (#{applyNo},
    (SELECT dept_id FROM mat_department WHERE dept_name = #{deptName} ),
    (SELECT sta_id FROM mat_staff WHERE sta_name = #{staName} ),
    #{applyDate},#{applyEstiAmount},#{applyStatus})
    <selectKey keyProperty="applyId" resultType="Integer" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
</insert>

以上注:useGeneratedKeys="true" keyProperty="applyId"  或  <selectKey keyProperty="applyId" resultType="Integer" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey>,可获取数据表中的自增的apply_id存放在持久类ApplyDo中的属性名applyId,applyId也是明细表对应主表的外键,对应持久类ApplyItemDo中的属性名itemApplyId.

<!--对明细表插入单条记录 -->
<insert id="saveDetail" parameterType="com.bootdo.purchase.domain.ApplyItemDo" >
    INSERT INTO pur_apply_detail
    (item_apply_id,item_name,item_type,item_number,item_unit,item_estiprice,item_purpose,item_demdate,item_remake)
    VALUES
    (#{itemApplyId},#{itemName},#{itemType},#{itemNumber},#{itemUnit},#{itemEstiprice},#{itemPurpose},#{itemDemdate},#{itemRemake})
</insert>

ApplyServiceImpl.java:

@Autowired
public ApplyDao applyDao;
@Override
public int save(ApplyDo applyDo) {
    //主表插入一条记录
    int count = applyDao.save(applyDo);
    int count2 = 0;
    int applyId = applyDo.getApplyId();
    //明细表插入多条记录
    for(ApplyItemDo items : applyDo.getItemDoList() ){
        items.setItemApplyId(applyId);
        count2 = applyDao.saveDetail(items);
    }
    return count2;
}

到此这篇关于mybatis主表与明细表一对多的同时插入操作方法的文章就介绍到这了,更多相关mybatis主表与明细表一对多同时插入内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis 实现多对多中间表插入数据

    目录 多对多中间表插入数据 方法 具体实现 多对多的关联表中,如何同时插入数据的学习心得 插入步骤 多对多中间表插入数据 在做这个员工管理系统demo的时候,由于user和role是多对多关系,且user主键是自增的,所有我们没办法提前知晓这个user_id,所以插入的时候,就需要先插入user,然后再找到刚插入的id拿出来,再插入中间表user_role,这样才能将表关系对应起来,才能算一个完整的插入的过程. 所以现在的问题就是怎么知道这个user_id,再怎么拿出来,再插入中间表user_r

  • Mybatis一对多和多对一处理的深入讲解

    目录 建表 多对一处理 mapper 实体类 按照查询嵌套处理 按照结果嵌套处理 回顾Mysql多对一查询方式 一对多处理 mapper 实体类 按照查询嵌套处理 按照查询嵌套处理 结果映射 面试高频点 总结 建表 SQL: create table teacher( id int not null, name varchar(30) default null, primary key (id) ); insert into teacher (id, name) values (1, '蔡老师'

  • MybatisPlus实现对象嵌套关联查询一对多List集合查询

    目录 对象嵌套关联查询一对多List集合查询 mybatis嵌套关联查询如下 一对多查询(经典案例) 条件 数据库 代码实现 对象嵌套关联查询一对多List集合查询 mybatis嵌套关联查询如下 由于我的是一对集合查询,所以我有两个类. @Data @TableName("tb_user") public class User {     @TableId(type= IdType.INPUT)     private String id;     @TableField("

  • mybatis主表与明细表一对多的同时插入操作方法

    对主表(采购申请表)和明细表(申请物资表)同时进行插入操作insert: <!--对申请主表插入一条记录 --> <insert id="save" parameterType="com.bootdo.purchase.domain.ApplyDo" useGeneratedKeys="true" keyProperty="applyId"> INSERT INTO pur_apply (apply_n

  • Mybatis自关联查询一对多查询的实现示例

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-13-oneself-one2many,需要自取,需要配置maven环境以及mysql环境(sql语句在resource下的test.sql中),觉得有用可以点个小星星. docsify文档地址在:https://damaer.github.io/Mybatis-Learning/#/ 所谓自关联查询,是指自己既然充当一方,又充当多方.比如新闻栏目

  • springboot整合mybatis实现简单的一对多级联查询功能

    本文的目的是用springboot整合mybatis实现一个简单的一对多查询.(查询一个用户有多少件衣服) 第一步:数据库中,可以直接在navicat中建立两张我们需要用到的表 users DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `id` int(0) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_

  • mybatis如何批量添加一对多中间表

    目录 批量添加一对多中间表 mybatis中的写法 多对多条件下插入中间表(使用insert标签的属性) 说下需求 解决方案 测试 批量添加一对多中间表 建立中间表A,一个id对应多个lid: 传入两条参数 long id;//单个数值 List lid;//集合数值 dao层语句 int insertb(@Param("id")long id,@Param("lid")List lid); mybatis中的写法 insert into A(id,lid) val

  • mybatis数组和集合的长度判断及插入方式

    目录 mybatis数组和集合的长度判断及插入 1.在使用foreach的是collection属性 2.判断长度 mybatis数组与集合判断非空和长度 数组判断 集合判断 mybatis数组和集合的长度判断及插入 1.在使用foreach的是collection属性 该属性是必须指定的,但是在不同情况下,该属性的值是不一样的 主要有一下4种情况:  如果传入的是单参数且参数类型是一个List的时候,collection属性值为list . 如果传入的是单参数且参数类型是非list的Colle

  • Mybatis 中的一对一,一对多,多对多的配置原则示例代码

    什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 表:market_plan(营销计划(关联了用户)) market_plan_product(产品关联营销计划) mark

  • 详解MyBatis直接执行SQL查询及数据批量插入

    一.直接执行SQL查询: 1.mappers文件节选 <resultMap id="AcModelResultMap" type="com.izumi.InstanceModel"> <result column="instanceid" property="instanceID" jdbcType="VARCHAR" /> <result column="insta

  • mybatis高级映射一对多查询实现代码

    1.需求分析: 在开发中会遇到这样一个问题,查询订单信息,级联查询出用户信息和订单明细信息 2.sql语句实现 2.1确定主查询表:订单表 2.2确定关联查询表:用户表, 订单明细表 sql语句如下: select orders.*, t_user.address, t_user.name, t_user.brithday, orderdetail.id orderdetail_id, orderdetail.orderid, orderdetail.itemsid from orders, t

  • 实例讲解Java的MyBatis框架对MySQL中数据的关联查询

    mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映射到定义的Java Bean 中.下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的. 设计一个简单的博客系统,一个用户可以开多个博客,在博客中可以发表文章,允许发表评论,可以为文章加标签.博客系统主要有以下几张表构成: Author表:作者信息表,记录作者的信息,用户名和密码,邮箱等. Blog表   :  博客表,一个作者可以开多个博客,即Author和Blog的关系是一对多.

  • MyBatis的嵌套查询解析

    Mybatis表现关联关系比hibernate简单,没有分那么细致one-to-many.many-to-one.one-to-one.而是只有两种association(一).collection(多),表现很简洁.下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的. 以最简单的用户表订单表这个最简单的一对多做示例: 对应的JavaBean: User: public class User { private int id; private String

随机推荐