MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)

这篇具有很好参考价值的文章主要介绍了MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用原因:

        批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了


批量修改:

1、Mapper.java中

说明:参数是list

@Repository
public interface ProcessUnitDurationMapper {

    int updateMultiple(List<ProcessUnitDuration> list);

}

 2、Mapper.xml中

说明:通过trim标签拼接前后缀和去除多余的逗号,parameterType即是参数list中的元素实体类(必须写),item是list中元素的实体类的实例对象,WHEN是条件,THEN是赋值

<update id="updateMultiple" parameterType="com.luntek.metaversevr.entity.ProcessUnitDuration">
	UPDATE st_process_unit_duration
	<trim prefix="set" suffixOverrides=",">
		<trim prefix="process_id=case" suffix="end,">
			<foreach collection="list" item="processUnitDuration">
				WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.processId}
			</foreach>
		</trim>
		<trim prefix="update_by=case" suffix="end,">
			<foreach collection="list" item="processUnitDuration">
				WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.updateBy}
			</foreach>
		</trim>
		<trim prefix="update_time=case" suffix="end,">
			<foreach collection="list" item="processUnitDuration">
				WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.updateTime}
			</foreach>
		</trim>
		version = version+1
	</trim>
	<where>
		<foreach collection="list" separator="or" item="processUnitDuration">
			id =#{processUnitDuration.id}
		</foreach>
	</where>
</update>

批量新增:

1、Mapper.java中

说明:参数是list

@Repository
public interface ProcessUnitDurationMapper {

    int insertMultiple(List<ProcessUnitDuration> list);

}

 2、Mapper.xml中

分两种情况: (一)、主键自增情况字段较少,插入字段灵活性高  (二)、主键不自增,字段较多

情况一说明:通过trim标签拼接前后缀和去除多余的逗号,parameterType即是参数list中的元素实体类(必须写),useGeneratedKeys=true表明主键自增,keyProperty指定主键自增字段

<insert id="insertMultiple" parameterType="com.luntek.metaversevr.entity.ProcessUnitDuration" useGeneratedKeys="true" keyProperty="id">
	insert into st_process_unit_duration
	<trim prefix="(" suffix=")" suffixOverrides=",">
		<if test="process_id != null">
			process_id,
		</if>
		<if test="unit_duration != null">
			unit_duration,
		</if>
		<if test="init_duration != null">
			init_duration
		</if>
	</trim>
	<foreach collection="list" item="list" index="index" separator=",">
		<trim prefix="values(" suffix=")" suffixOverrides=",">
			<if test="processId != null">
				#{list.processId,jdbcType=VARCHAR},
			</if>
			<if test="unitDuration != null">
				#{list.unitDuration,jdbcType=INTEGER},
			</if>
			<if test="initDuration != null">
				#{list.initDuration,jdbcType=INTEGER}
			</if>
		</trim>
	</foreach>
</insert>

情况二说明:如果使用trim标签会显得很臃肿,所以手动拼接即可,parameterType即是参数list中的元素实体类(必须写),与情况一对比,字段插入灵活性略低

<sql id="filed">
		id,
		create_by,
		create_time,
		update_by,
		update_time,
		version,
		process_id,
		unit_duration,
		init_duration
</sql>
<insert id="insertMultiple" parameterType="com.luntek.metaversevr.entity.ProcessUnitDuration">
	insert into st_process_unit_duration(
	<include refid="filed"/>
	)
	values
	<foreach collection="list" item="list" index="index" separator=",">
		(#{list.id,jdbcType=VARCHAR},
		#{list.createBy,jdbcType=VARCHAR},
		#{list.createTime,jdbcType=TIMESTAMP},
		#{list.updateBy,jdbcType=VARCHAR},
		#{list.updateTime,jdbcType=TIMESTAMP},
		#{list.version,jdbcType=INTEGER},
		#{list.processId,jdbcType=VARCHAR},
		#{list.unitDuration,jdbcType=INTEGER},
		#{list.initDuration,jdbcType=INTEGER})
	</foreach>
</insert>

 注意情况:

        <foreach>标签中:collection属性中的list与传入参数类型相对应,item属性就是list中的元素—实体类的实例对象

 结束语:珍视每一次机会,输给自己的感觉,比输给别人更惨文章来源地址https://www.toymoban.com/news/detail-498084.html

到了这里,关于MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis 动态SQL的标签有哪些?如何使用?

    目录 1. MyBatis 动态SQL标签有什么用? 2. if 标签 3. where 标签 4. trim 标签 5. choose,when,otherwise 6. foreach 1. MyBatis 动态SQL标签有什么用? 我来说一个场景大家就明白了,如下图,大家应该在铁路12306上买过火车票吧,可以看到,我们在选票的时候可以对车做很多种选择和筛选,系

    2024年02月11日
    浏览(26)
  • mybatis的<foreach>标签使用

    记录 :419 场景 :使用MyBatis的foreach/foreach标签的循环遍历List类型的入参。使用collection属性指定List,item指定List中存放的对象,separator指定分割符号,open指定开始字符,close指定结束字符。 版本 :JDK 1.8,Spring Boot 2.6.3,mybatis-3.5.9。 1.基础知识 1.1MyBatis的标签 (1)查看MyBatis支持的

    2023年04月24日
    浏览(31)
  • Mybatis-Plus 自定义mapper批量新增修改函数

    version MybatisPlusConfig CustomizedSqlInjector InsertBatchMethod UpdateBatchMethod RootMapper 使用方式 mapper接口实现自定义的RootMapper,即可调用批量新增修改函数

    2024年02月12日
    浏览(35)
  • MyBatis:动态 SQL 标签

    MyBatis 动态 SQL 标签 ,是一组预定义的标签,用于构建动态的 SQL 语句,允许在 SQL 语句中使用条件、循环和迭代等逻辑。通过使用动态 SQL 标签,开发者可以根据不同的条件和参数生成不同的 SQL 语句,实现更加灵活的数据访问操作。但是,需要谨慎处理 SQL 注入问题,确保所

    2024年02月04日
    浏览(25)
  • 【MyBatis】四、MyBatis中的动态SQL标签

    动态SQL语句是动态的拼接Mybatis中SQL语句的情况,可以动态的在Mybatis中使用SQL if语句的xml文件: 传入对象来进行调用: where标签中的and会被自动去掉,并且若没有合适的内容,则不会添加where 注意:where标签只能去掉条件前的and、五福去掉条件后的and trim标签会在其内容

    2024年02月09日
    浏览(28)
  • MyBatis 动态SQL之<where>标签-

    where 标签主要用来简化 SQL 语句中的条件判断,可以自动处理 AND/OR 条件。 在if标签和choose-when-otherwise标签的案例中,SQL语句加入了一个条件’1=1’,它既保证了where后面的条件成,页避免了where后面出现的第一个词语是and 或者or之类的。 假设把条件‘1=1’去掉,可以出

    2024年02月11日
    浏览(34)
  • Mybatis是什么?Mybatis中动态sql常用标签有哪些?

    Mybatis是什么? Mybatis是一种开源的Java持久层框架,它可以将SQL语句和Java代码进行分离,使得开发人员可以更加专注于业务逻辑的实现。与Hibernate等ORM框架不同的是,Mybatis使用XML或注解的方式来描述SQL语句,这种方式更加灵活,因此在一些需要高度自定义SQL语句的场景下,

    2024年02月05日
    浏览(35)
  • 详细分析Mybatis中的<foreach>标签

    对于Java专栏:Java专栏 对于Mybatis的相关知识可看我之前的文章:Mybatis从入门到精通(全) 对于其余Java框架可看我之前的文章:java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 对于上述Mybatis中曾有讲过foreach标签!此篇博客对其标签进行拓展 MyBatis中的

    2024年02月02日
    浏览(26)
  • MyBatis 动态SQL之<choose><when><otherwise>标签-

    MyBatis 中动态语句 choose-when-otherwise 类似于 Java 中的 switch-case-default 语句。由于 MyBatis 并没有为 if 提供对应的 else 标签,如果想要达到…… 的效果,可以借助 、、 来实现。 hoose 标签按顺序判断其内部 when 标签中的判断条件是否成立,如果有一个成立,则执行相应的 SQL 语句

    2024年02月09日
    浏览(33)
  • 数据库操作不再困难,MyBatis动态Sql标签解析

    MyBatis缓存原理 Mybatis的CachingExecutor与二级缓存 Mybatis plugin 的使用及原理 MyBatis四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler 详解 MyBatis+Springboot 启动到SQL执行全流程 使用MyBatis,或者MyBatis-plus,有一项重要的开发技能就是写动态sql,动态sql能帮我们省略很多复杂逻

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包