Java-多表插入业务

此文章是自己在多表业务时遇到的一些问题解答,希望有思路可以帮助到你!

数据库关联情况:

        问卷表---关联---问题表---关联---答案表

业务模拟需求:

        问卷可以包含N个问题,问题可以包含N个答案,完成新增以及修改(此文章只展示新增)

业务实现:

创建实体类(重要!)

 问卷DTO

@ApiModel("问卷参数DTO")
public class QuestionnaireDTO {

    @ApiModelProperty(value = "问卷Id", name = "questionnaireId")
    private String questionnaireId;

    @ApiModelProperty(value = "问卷编号", name = "questionnaireNo")
    private String questionnaireNo;

    @ApiModelProperty(value = "问卷类型", name = "questionnaireType")
    private Integer questionnaireType;

    @ApiModelProperty(value = "问卷名称", name = "questionnaireName")
    private String questionnaireName;

    @ApiModelProperty(value = "问卷备注", name = "questionnaireRemark")
    private String questionnaireRemark;

    @ApiModelProperty(value = "是否发布", name = "isRelease")
    Integer isRelease;

    @ApiModelProperty(value = "是否有效", name = "isValid")
    Integer isValid;

    @ApiModelProperty(value = "当前页码", name = "currentPage")
    Integer currentPage;

    @ApiModelProperty(value = "最大页数", name = "pageSize")
    Integer pageSize;

    @ApiModelProperty(value = "问题List", name = "questionList")
    private List<QuestionDTO> questionList;
}

在DTO中要包含问题List,因为业务要求可以拥有多个问题

问题DTO

@ApiModel("问题参数DTO")
public class QuestionDTO {

    @ApiModelProperty(value = "问题Id", name = "questionId")
    private String questionId;

    @ApiModelProperty(value = "问题顺序", name = "questionOrder")
    private Integer questionOrder;

    @ApiModelProperty(value = "问题类型", name = "questionType")
    private Integer questionType;

    @ApiModelProperty(value = "问题内容", name = "questionContent")
    private String questionContent;

    @ApiModelProperty(value = "是否必填", name = "isRequired")
    private Integer isRequired;

    @ApiModelProperty(value = "uuid", name = "uuid")
    private String uuid;

    @ApiModelProperty(value = "答案List", name = "answerList")
    private List<AnswerDTO> answerList;

}

在DTO中要包含答案List,因为业务要求可以拥有多个答案

答案DTO

@ApiModel("答案参数DTO")
public class AnswerDTO {

    @ApiModelProperty(value = "答案Id", name = "answerId")
    private String answerId;

    @ApiModelProperty(value = "答案内容", name = "answerContent")
    private String answerContent;

    @ApiModelProperty(value = "答案分数", name = "answerGrade")
    private Integer answerGrade;

}

由此实体类可以看出其中的包含关系已经符合业务需求 


代码实现(业务层)

@Override
    public ResultBean addQuestionnaire(QuestionnaireDTO questionnaireDTO) {
        ResultBean resultBean = new ResultBean();
        // 校验问卷
        if (StringUtils.isNullOrEmpty(paramDTO.getQuestionnaireName())){
            throw new ServiceBizException("问卷名称不可为空");
        }
        if (StringUtils.isNullOrEmpty(paramDTO.getQuestionnaireType())){
            throw new ServiceBizException("问卷类型不可为空");
        }
        try {
            // 添加问卷
            ProductQuestionnairePO questionnairePO = new ProductQuestionnairePO();
            // 将相同属性的值转换到questionnairePO实体类中
            BeanUtils.copyProperties(paramDTO,questionnairePO);
            questionnairePO.setIsRelease(Integer.parseInt(CommonConstants.DICT_IS_NO));
            // 问卷表插入操作(Mybtis-plus)
            questionnairePO.insert();
            // 获取到新增的问卷id
            String questionnaireId = questionnairePO.getQuestionnaireId();
            // 添加问题
            if (!StringUtils.isNullOrEmpty(paramDTO.getQuestionList())) {
                // 新增的问题可能是多个,所以使用for循环
                for (QuestionDTO questionDTO : paramDTO.getQuestionList()) {
                    // 判断必填项
                    if (StringUtils.isNullOrEmpty(questionDTO.getQuestionContent())){
                        throw new ServiceBizException("问题内容不能为空");
                    }
                    ProductQuestionPO questionPO = new ProductQuestionPO();
                    // 将相同属性的值copy到PO实体类中
                    BeanUtils.copyProperties(questionDTO, questionPO);
                    questionPO.setQuestionnaireId(questionnaireId);
                    questionPO.setUuid(String.valueOf(UUID.randomUUID()));
                    // 问题表插入操作(Mybtis-plus)
                    questionPO.insert();
                    // 获取到新增的问题id
                    String questionId = questionPO.getQuestionId();
                    // 添加对应答案
                    if (!StringUtils.isNullOrEmpty(questionDTO.getAnswerList())){
                        for (AnswerDTO answerDTO : questionDTO.getAnswerList()) {
                            if (StringUtils.isNullOrEmpty(answerDTO.getAnswerContent())){
                                throw new ServiceBizException("答案内容不能为空");
                            }
                            ProductAnswerPO answerPO = new ProductAnswerPO();
                            // 将相同属性的值copy到PO实体类中
                            BeanUtils.copyProperties(answerDTO,answerPO);
                            answerPO.setQuestionnaireId(questionnaireId);
                            answerPO.setQuestionId(questionId);
                            // 问题表插入操作(Mybtis-plus)
                            answerPO.insert();
                        }
                    }
                }
            }
        } catch (BeansException e) {
            throw new RuntimeException(e);
        }
        return resultBean;
    }

使用copyProperties方法是因为只有PO实体类继承了Mybtis-plus

文章主要提供业务解决思路,具体过程有多种,实体类设计嵌套是核心!

for循环插入耗时比较长,性能堪忧,下一篇文章为优化此代码,提高插入效率

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
网上这本书的电子版不好这,这是用money换来的——和大家分享! 由于书太大,我把书分成两部分别上传。 内容简介 本书系统全面地介绍了Java中的各项主流技术,以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具MyEclipse为载体,全面系统地介绍了如何在MyEclipse中开发基于Struts、Hibernate、Spring等主流框架的各种Java应用程序。 本书内容主要来自作者多年的软件开发和教学、培训经验,通过实例由浅入深地介绍MyEclipse的基本应用,是一本强调实践技能的实用性指导图书。 本书内容丰富、技术全面、案例实用,而且所有的实例都以MyEclipse工程的形式组织,并按章节的顺序组织在附书光盘中,源代码工程都经过精心调试,可以直接导入MyEclipse中运行。 本书内容精练、重点突出、实例丰富,是Java程序开发人员必备的参考书,同时也可作为高等院校计算机及相关专业的教材。 图书目录 第1章 初识MyEclipse 1 1.1 MyEclipse简介 1 1.2 MyEclipse的安装 1 1.2.1 JDK的安装与配置 1 1.2.2 MyEclipse 7.0的安装和运行 4 1.3 获取和阅读MyEclipse帮助文档 5 1.4 本章小结 5 第2章 MyEclipse集成开发环境的使用 6 2.1 MyEclipse集成开发工具界面 6 2.1.1 MyEclipse的菜单栏 7 2.1.2 MyEclipse的工具栏 13 2.1.3 MyEclipse的透视图 14 2.1.4 MyEclipse的视图 17 2.1.5 MyEclipse的编辑器 20 2.1.6 MyEclipse的Tasks视图 22 2.1.7 MyEclipse的Bookmarks视图 24 2.2 MyEclipse中的资源管理 26 2.2.1 MyEclipse中的工作空间 26 2.2.2 MyEclipse中的Navigator视图 27 2.3 定制MyEclipse的工作台 33 2.3.1 定制工作台外观 34 2.3.2 定制快捷键 35 2.3.3 定制编辑器 36 2.3.4 定制工作台公共设置 36 2.4 MyEclipse中常用操作 36 2.4.1 配置JRE 36 2.4.2 设置编译路径 37 2.4.3 设置项目属性 38 2.5 本章小结 39 第3章 Java程序的开发 40 3.1 使用JDT编写Java项目 40 3.2 MyEclipse中的Java代码编辑器 43 3.2.1 Java代码编辑器基本功能 43 3.2.2 自定义Java代码编辑器 45 3.2.3 Java代码编辑器相关视图 50 3.3 MyEclipse中的Java代码编译器 51 3.4 MyEclipse中的Java代码调试器 52 3.4.1 Java项目的运行 52 3.4.2 Java项目的调试 53 3.5 MyEclipse中的Java代码搜索器 57 3.5.1 搜索功能 57 3.5.2 查找功能 58 3.6 MyEclipse中的Java代码重构支持 59 3.6.1 Java元素重命名 59 3.6.2 Java元素移动 60 3.6.3 Java元素复制 61 3.7 本章小结 61 第4章 Java开发的版本控制及SVN 62 4.1 版本控制与SVN 62 4.2 SVN服务器的安装与配置 62 4.3 MyEclipse连接SVN服务器 63 4.3.1 配置MyEclipse连接SVN服务器 63 4.3.2 将SVN服务器中的项目导入到MyEclipse 64 4.3.3 将MyEclipse中的项目提交到SVN服务器 65 4.4 本章小结 67 第5章 Java开发项目的软件测试工具——JUnit 68 5.1 软件测试简介 68 5.2 JUnit简介 68 5.2.1 JUnit的特点 69 5.2.2 JUnit的常用类和接口 69 5.3 在MyEclipse中设置JUnit 71 5.4 JUnit测试 72 5.4.1 JUnit测试用例 72 5.4.2 JUnit测试套件 75 5.5 JUnit应用实例:数据库程序单元测试 77 5.6 本章小结 80 第6章 Java Web应用程序的开发 81 6.1 Java Web应用程序概述 81 6.2 Tomcat服务器的安装和配置 82 6.2.1 Tomcat服务器的下载 82 6.2.2 Tomcat服务器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值