文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis-Plus判断数据是否存在,不存在则插入

2023-09-17 09:48

关注

今天写业务代码有这么一个场景,就是在数据库表中插入一条数据,并且这个表中只有这么一条。

因为是用的Mybatis-Plus所以直接用它来实现业务功能,起初是把要插入的数据放到mybatis-plus中,代码如下

LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();        wrapper.eq(ProjectCompany::getProjectId,projectId).eq(ProjectCompany::getCompanyId,user.getCompanyId()).eq(ProjectCompany::getIsDelete,"0");        List projectCompanies = projectCompanyMapper.selectList(wrapper);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();wrapper.eq(ProjectCompany::getProjectId,projectId).eq(ProjectCompany::getCompanyId,user.getCompanyId()).eq(ProjectCompany::getIsDelete,"0");List projectCompanies = projectCompanyMapper.selectList(wrapper);

就是把要插入的数据先在表中查出来是否存在,查出来的结果放到List集合中,但是在遍历时始终想不到合适的思路,起初是这样写的

for (ProjectCompany projectCompany1 : projectCompanies) {            if (!(projectCompany1.getCompanyId().equals(projectCompany.getCompanyId())) && !(projectCompany1.getProjectId().equals(projectCompany.getProjectId()))){                projectCompanyMapper.insert(projectCompany);                break;            }        }
for (ProjectCompany projectCompany1 : projectCompanies) {    if (!(projectCompany1.getCompanyId().equals(projectCompany.getCompanyId())) && !(projectCompany1.getProjectId().equals(projectCompany.getProjectId()))){        projectCompanyMapper.insert(projectCompany);        break;    }}

因为不知道 if (!(projectCompany1.getCompanyId().equals(projectCompany.getCompanyId())) && !(projectCompany1.getProjectId().equals(projectCompany.getProjectId())))   (大家对这个有什么解决办法,欢迎留言给c主提供一下) 该怎么判断。试来试去始终不行,后面就换了一种思路,不查所有数据了,我只在表中查一条

LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();        wrapper.eq(ProjectCompany::getProjectId,projectCompany.getProjectId()).eq(ProjectCompany::getCompanyId,projectCompany.getCompanyId()).eq(ProjectCompany::getIsDelete,"0");ProjectCompany projectCompany1 = projectCompanyMapper.selectOne(wrapper);            if (projectCompany1 ==null){                projectCompanyMapper.insert(projectCompany);            }

LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ProjectCompany::getProjectId,projectCompany.getProjectId()).eq(ProjectCompany::getCompanyId,projectCompany.getCompanyId()).eq(ProjectCompany::getIsDelete,"0");
ProjectCompany projectCompany1 = projectCompanyMapper.selectOne(wrapper);
            if (projectCompany1 ==null){
                projectCompanyMapper.insert(projectCompany);
            }

就是我还用之前的查询条件,只不过这次查询我查一条数据projectCompanyMapper.selectOne(wrapper);

然后判断这个结果是不是空的,如果是空的则说明数据库中没有该数据,则可以进行插入。相反如果不为空,则说明表中有数据。

但是上面代码还会出现一个异常,就是   projectCompanyMapper.selectOne(wrapper);  可能会查出多条数据,所以我们还要对该异常进行一个处理

try {            ProjectCompany projectCompany1 = projectCompanyMapper.selectOne(wrapper);            if (projectCompany1 ==null){                projectCompanyMapper.insert(projectCompany);            }        }catch (Exception e){            throw new BaseException("数据有误,待周一回来调试,原因是ProjectCompany表中");        }
try {    ProjectCompany projectCompany1 = projectCompanyMapper.selectOne(wrapper);    if (projectCompany1 ==null){        projectCompanyMapper.insert(projectCompany);    }}catch (Exception e){    throw new BaseException("数据有误,待周一回来调试,原因是ProjectCompany表中");}

因为是周五,要着急下班,所以异常信息自己定义的一个,今天就说这么多吧。

喜欢的话可以给个赞哦

来源地址:https://blog.csdn.net/xiaoheihai666/article/details/127695556

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯