mybatis@insert 注解如何判断insert或是update

目录
  • @insert注解判断insert或update
    • @insert 注解
  • 实现insert Or update的操作
    • selectKey有以下几个属性

@insert注解判断insert或update

最近参与研发了一个项目,需要用到mybatis,和我之前接触的不同,我们的sql语句并没有写在xml中,而是使用的注解。

所以在此做个笔记方便以后查找。

@insert 注解

简单的就不多说主要是有个业务需求,当一条数据存在时update ,不存在时insert,这时就会用到 ON DUPLICATE KEY UPDATE

其中appserverid 和 userid 是主键

@Insert({
        "INSERT INTO KZT_APPSERVER_HISTORY(APPSERVERID,USERID) values(#{appid},#{userid})",
       "ON DUPLICATE KEY UPDATE `TIMES` = `TIMES`+1 ",
        })
    int addHistory(@Param("userid") String userid,@Param("appid") String appid);

实现insert Or update的操作

在工作过程中 我们会经常遇到 saveOrUpdate这种情况 而Mbatis中并没有提供这样的操作

在这里 我们通过selectKey 这个标签来实现saveOrUpdate

selectKey的作用是在mybatis框架中,在插入到表格之后或者之前,查询主键的值。

selectKey有以下几个属性

  • resultType:返回的主键的类型
  • keyPropety:实体类对应的主键的属性。
  • order:如果是after,那么先插入,在执行selectKey中的sql。如果是before,则反之。

从上面的属性中我们可以明确 可以在插入前先查 然后进行if else 判断 从而实现saveOrUpdate 列出一段代码实例以供参考

其中 order="BEFORE" 尤为关键

<insert id="insertStat" parameterType="com.thd2000.freela.domain.Stat">
		<selectKey keyProperty="statId" resultType="int" order="BEFORE">
    		select count(*) FROM tb_stat
    		<include refid="Where_Clause" />
		</selectKey>
		<if test="statId == 0">
		insert into tb_stat
		(
			stat_type,
			stat_key,
			stat_num,
			create_time,
			update_time,
			stat_type_key,
			stat_type_usertype,
			stat_type_userid,
			stat_type_planid
		)
		values
		(
			#{statType},
			#{statKey},
			#{statNum},
			NOW(),
			NOW(),
			#{statTypeKey},
			#{statTypeUserType},
			#{statTypeUserId,jdbcType=VARCHAR},
			#{statTypePlanId,jdbcType=VARCHAR}
		)
		</if>
		<if test="statId > 0">
   	 update tb_stat set  stat_num=stat_num+#{statNum},update_time=NOW()
   	 <include refid="Where_Clause" />
  </if>
	</insert>

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

(0)

相关推荐

  • MyBatis注解方式之@Update/@Delete使用详解

    @Update 1. RoleMapper接口增加接口方法 /** * * * @Title: updateSysRoleById * * @Description: updateSysRoleById * * @param sysRole * @return * * @return: int */ @Update({ "update sys_role set role_name = #{roleName},enabled = #{enabled},create_by = #{createBy}

  • Mybatis如何实现InsertOrUpdate功能

    目录 实现InsertOrUpdate功能 需求 实现 Mybatis学习笔记:InsertOrUpdate 环境 前言 Dao Mapper XML文件 行别名 主键和唯一索引 实现InsertOrUpdate功能 需求 最近在项目开发中遇到这样一个需求:每天需要对相同的数据(也有可能是不同的)进行两次入库操作,数据不存在便insert,存在则update.于是就用到了Mybatis的InsertOrUpdate功能. 实现 每次操作数据库之前,先根据id查询有没有记录,有则进行update操

  • Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库操作中的常用操作. 其实,mybatis 注解方式 和 XML配置方式两者的使用基本上相同,只有在构建 SQL 脚本有所区别,所以这里重点介绍两者之间的差异,以及增删改查,参数传递等注解的常用操作. 详解SpringBoot 快速整合Mybatis(去XML化+注解进阶)已经介绍过了,不清楚的朋友可

  • mybatis@insert 注解如何判断insert或是update

    目录 @insert注解判断insert或update @insert 注解 实现insert Or update的操作 selectKey有以下几个属性 @insert注解判断insert或update 最近参与研发了一个项目,需要用到mybatis,和我之前接触的不同,我们的sql语句并没有写在xml中,而是使用的注解. 所以在此做个笔记方便以后查找. @insert 注解 简单的就不多说主要是有个业务需求,当一条数据存在时update ,不存在时insert,这时就会用到 ON DUPLI

  • Mybatis基于注解形式的sql语句生成实例代码

    对其做了些优化,但此种sql生成方式仅适用于复杂程度不高的sql,所以实用性不是很高,仅仅是写着玩的,知道点mybatis的注解形式的使用方式,可能以后会逐渐完善起来.第一次写博客,写的简单点. package com.bob.config.mvc.mybatis; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retenti

  • mybatis中注解与xml配置的对应关系和对比分析

    注解与xml配置的对应关系 mybatis中注解就是简单不需要写配置文件,适合简单的数据处理,理解起来比较容易,不动态生成SQL时候可以用用. 需要绑定,有些时候不如配置文件,配置文件扩展强. 选择合适的方式应用在合适的场景,注解主要应用于sql语句比较简单容易理解的情况下可读性高:生成动态sql时用xml配置文件要更简洁,扩展性强 常用的注解和xml的对应关系 @CacheNamespace 类 <cache> @CacheNamespaceRef 类 <cacheRef> @R

  • 详解spring boot mybatis全注解化

    本文重点给大家介绍spring boot mybatis 注解化的实例代码,具体内容大家参考下本文: pom.xml <!-- 引入mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version

  • Mybatis 开发注解快速入门

    快速普及 1.mybatis是什么 mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. Mybatis实现了接口绑定,使用更加方便. 对象关系映射的改进,效率更高 MyBatis采用功能强大的基于OGNL的表达式来

  • Spring与Mybatis基于注解整合Redis的方法

    基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载后直接启动redis-server就行了,见下图: 一,先上jar包 二,创建实体类 package com.sl.user.vo; import java.io.Serializable; import com.fasterxml.jackson.databind.PropertyNamingSt

  • Mybatis基于注解实现多表查询功能

    对应的四种数据库表关系中存在四种关系:一对多,多对应,一对一,多对多.在前文中已经实现了xml配置方式实现表关系的查询,本文记录一下Mybatis怎么通过注解实现多表的查询,算是一个知识的补充. 同样的先介绍一下Demo的情况:存在两个实体类用户类和账户类,用户类可能存在多个账户,即一对多的表关系.每个账户只能属于一个用户,即一对一或者多对一关系.我们最后实现两个方法,第一个实现查询所有用户信息并同时查询出每个用户的账户信息,第二个实现查询所有的账户信息并且同时查询出其所属的用户信息. 1.项目

  • 详解mybatis @SelectProvider 注解

    01.前言 为什么会写这篇文章, 因为在看到 MapperAnnotationBuilder 构造方法初始化时, 发现了四个从未见过的注解 public MapperAnnotationBuilder(Configuration configuration, Class<?> type) { ... sqlAnnotationTypes.add(Select.class); sqlAnnotationTypes.add(Insert.class); sqlAnnotationTypes.add

  • Mybatis常见注解有哪些(总结)

    当下,注解非常流行,以前很长篇的代码,现在基本上一个注解就能搞定. 那,在Mybatis中又有哪些注解呢? Mybatis中的注解基本上都在org.apache.ibatis.annotations目录下: @MapperScan 该注解存在着争议,但不可否认的是这个注解确实是Mybatis的注解,是为了集成Spring而写的注解.该注解主要是扫描某个包目录下的Mapper,将Mapper接口类交给Spring进行管理. org.mybatis.spring.annotation.MapperS

随机推荐