广告
返回顶部
首页 > 资讯 > 后端开发 > Python >mybatis如何实现saveOrUpdate
  • 632
分享到

mybatis如何实现saveOrUpdate

mybatissaveOrUpdatemybatis实现saveOrUpdate 2023-02-08 09:02:35 632人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. selectKey标签查询2. 主键自增或者累加的,不使用selecTKEy3. 主键为varchar的使用ON DUPLICATE KEY UPDATE总结1.

1. selectKey标签查询

DDL

CREATE TABLE `luck_reward_info` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
  `activity_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '活动id',
  `reward_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '奖品名',
  `reward_level` int DEFAULT NULL COMMENT '奖品等级',
  `num` int DEFAULT NULL COMMENT '奖品数量',
  `dis_number` int DEFAULT '0' COMMENT '已发奖品数量',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `field` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`,`activity_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='奖品信息表';

RewardInfoMapper接口

@Mapper
public interface RewardInfoMapper{
   int saveOrUpdate(RewardInfo rewardInfo);
}

使用selectKey

<insert id="saveOrUpdate" >
  <selectKey keyProperty="count" resultType="int" order="BEFORE">
    select count(*) from luck_reward_info where id = #{id}
  </selectKey>
  <if test="count > 0">
        UPDATE luck_reward_info
        <set>
            <if test='activityId != null and activityId != "" '>activity_id=#{activityId},</if>
            <if test='rewardName != null and rewardName != "" '>reward_name=#{rewardName},</if>
            <if test='rewardLevel != null '>reward_level=#{rewardLevel},</if>
            <if test='num != null '>num=#{num},</if>
            <if test='disNumber != null '>dis_number=#{disNumber},</if>
            update_time=now(),
            <if test='field != null and field != "" '>field=#{field},</if>
        </set>
        WHERE id=#{id}
  </if>
  <if test="count==0">
    INSERT INTO luck_reward_info(
            id,activity_id,reward_name,reward_level,number,create_time,field
            )
            VALUES (
            (select id from (select (ifnull(max(id), 0)) + 1 as id from luck_reward_info)t), #{activityId},#{rewardName},#{rewardLevel},#{number},now(),#{field}
            )
  </if>
</insert>

报错:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No setter found for the keyProperty ‘count’ in com.cmbchina.SSM.entity.RewardInfo.

原因:RewardInfo内必须有count属性,来接收count值,否则报错

优化:接口使用Map,实体类不需要再新增count字段了

//RewardInfoMapper.java
int saveOrUpdate(Map<String, Object> map);

2. 主键自增或者累加的,不使用selectKey

根据id是否为空,空新增,不为空修改

<insert id="saveOrUpdate" keyProperty="id" useGeneratedKeys="true">
        <if test="id == null">
            INSERT INTO luck_reward_info(
                id,activity_id,reward_name,reward_level,num,create_time,field
            )
            VALUES (
                (select id from (select (ifnull(max(id), 0)) + 1 as id from luck_reward_info)t), #{activityId},#{rewardName},#{rewardLevel},#{num},now(),#{field}
            )
        </if>
        <if test="id != null">
            UPDATE luck_reward_info
            <set>
                <if test='activityId != null and activityId != "" '>activity_id=#{activityId},</if>
                <if test='rewardName != null and rewardName != "" '>reward_name=#{rewardName},</if>
                <if test='rewardLevel != null '>reward_level=#{rewardLevel},</if>
                <if test='num!= null '>num=#{num},</if>
                <if test='disNumber != null '>dis_number=#{disNumber},</if>
                update_time=now(),
                <if test='field != null and field != "" '>field=#{field},</if>
            </set>
            WHERE id=#{id}
        </if>
    </insert>

3. 主键为varchar的使用ON DUPLICATE KEY UPDATE

DDL

CREATE TABLE `luck_activity_info` (
  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id',
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '标题',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '结束时间',
  `sap_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作员工编号',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='抽奖活动表';

条数 新增返回1,修改返回2

<insert id="saveOrUpdate">
        INSERT INTO luck_activity_info(
            id,title,start_time,end_time,sap_id,create_time
        )
        VALUES (
            #{id},#{title},#{startTime},#{endTime},#{sapid},now()
        )
        ON DUPLICATE KEY UPDATE
            <if test='title != null and title != "" '>title=#{title},</if>
            <if test='startTime != null '>start_time=#{startTime},</if>
            <if test='endTime != null '>end_time=#{endTime},</if>
            <if test='sapId != null and sapId != "" '>sap_id=#{sapId},</if>
            update_time=now()
    </insert>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: mybatis如何实现saveOrUpdate

本文链接: https://www.lsjlt.com/news/194574.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis如何实现saveOrUpdate
    目录1. selectKey标签查询2. 主键自增或者累加的,不使用selectKey3. 主键为varchar的使用ON DUPLICATE KEY UPDATE总结1....
    99+
    2023-02-08
    mybatis saveOrUpdate mybatis实现saveOrUpdate
  • myBatis如何实现查询
    这篇文章主要为大家展示了“myBatis如何实现查询”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“myBatis如何实现查询”这篇文章吧。把查询的字段,查询的条...
    99+
    2022-10-19
    mybatis
  • MyBatis懒加载如何实现
    这篇文章主要介绍“MyBatis懒加载如何实现”,在日常操作中,相信很多人在MyBatis懒加载如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis懒加载如何实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Mybatis如何实现InsertOrUpdate功能
    目录实现InsertOrUpdate功能需求实现Mybatis学习笔记:InsertOrUpdate环境前言DaoMapper XML文件行别名主键和唯一索引 实...
    99+
    2022-11-13
    Mybatis InsertOrUpdate InsertOrUpdate功能 Mybatis实现InsertOrUpdate
  • 如何在MyBatis中实现DataSource
    目录一、DataSource二、DataSourceFactory三、UnpooledDataSource四、PooledDataSource一、DataSource 首先大家要清楚...
    99+
    2022-11-12
    MyBatis中实现DataSource MyBatis中DataSource的实现
  • Mybatis如何实现SQL存储
    这篇“Mybatis如何实现SQL存储”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis如何实现SQL存储”文章吧...
    99+
    2023-07-05
  • Mybatis如何实现增删改查
    这篇文章主要介绍了Mybatis如何实现增删改查,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Mybatis实现增删改查一.mybatis的配置1.1 添加相应的jar包在l...
    99+
    2023-06-26
  • mybatis plus乐观锁如何实现
    本篇内容介绍了“mybatis plus乐观锁如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是乐观锁乐观锁其实用一...
    99+
    2023-06-30
  • mybatis如何实现继承映射
    目录mybatis 继承映射类图三个实体类的代码分析mybatis xml映射文件的继承问题1、首先dao层mapper.java需要继承原来的接口  2、继承原始mapper.xml的结果映射   mybatis 继承映射 ORM框架的优...
    99+
    2017-01-08
    mybatis继承 继承映射 mybatis映射
  • 如何实现一个Mybatis程序
    这篇文章主要介绍了如何实现一个Mybatis程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。环境说明:jdk 13MySQL 8.0.22maven 3.8.1开发工具:I...
    99+
    2023-06-20
  • 使用SpringBoot如何实现集成mybatis
    使用SpringBoot如何实现集成mybatis?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、使用mybatis-spring-boot-starter添...
    99+
    2023-05-31
    springboot mybatis
  • 使用SpringMVC如何实现整合mybatis
    这篇文章给大家介绍使用SpringMVC如何实现整合mybatis,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softw...
    99+
    2023-05-31
    springmvc mybatis
  • 使用spring如何实现整合mybatis
    今天就跟大家聊聊有关使用spring如何实现整合mybatis,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、采用MapperScannerConfigurer,它将会查找类路径下...
    99+
    2023-05-31
    spring mybatis 整合
  • MyBatis复杂Sql查询如何实现
    这篇文章主要介绍“MyBatis复杂Sql查询如何实现”,在日常操作中,相信很多人在MyBatis复杂Sql查询如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis复杂Sql查询如何实现”的疑...
    99+
    2023-07-04
  • 使用MyBatis如何实现Dao开发
    本篇文章为大家展示了使用MyBatis如何实现Dao开发,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.SqlSession使用范围1.1 SqlsessionFactoryBuilder通过Sq...
    99+
    2023-05-31
    mybatis dao
  • mybatis-plus与mybatis共存的实现
    目录一、在pom文件中添加mybatis-plus-boot-starter。二、配置yml文件接手了一个开发任务,在一个springboot+mybatis+nacos的框架上增加...
    99+
    2022-11-13
    mybatis-plus与mybatis共存
  • MyBatis详解如何实现Dao层接口
    目录传统开发方式编写UserDao接口编写UserDaompl实现传统测试方法代理开发方法代理开发方式介绍编写UserMapper接口测试代理方法传统开发方式 编写UserDao接口...
    99+
    2022-11-13
    MyBatis Dao层接口 MyBatis Dao层
  • MyBatis如何实现批量插入数据
    本文小编为大家详细介绍“MyBatis如何实现批量插入数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“MyBatis如何实现批量插入数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、SQL实现示例假设我们...
    99+
    2023-07-04
  • mybatis-plus之如何实现in嵌套sql
    目录mybatis-plus实现in嵌套sqlmybatis-plus sql中in的用法总结mybatis-plus实现in嵌套sql 今天使用jeegboot看源码时发现用户权限...
    99+
    2023-03-15
    mybatis-plus in mybatis-plus in嵌套sql mybatis-plus嵌套
  • mybatis如何实现的数据库排序
    目录mybatis数据库排序mybatis order by 排序方式能够很大程度防止sql注入order by 之后要使用$而非#mybatis数据库排序 今天用到了对数据库按照倒...
    99+
    2022-11-13
    mybatis排序 数据库排序 mybatis数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作