Mybatis的<insert>,<update>,<delete>标签用法

这篇具有很好参考价值的文章主要介绍了Mybatis的<insert>,<update>,<delete>标签用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前对mybatis的<select>标签以及其他相关标签做了讲解,很多标签也是可以拿到增删改的标签中来用的,下面先说下<insert>标签的用法:

<insert>标签顾名思义就是插入语句,用于将数据插入到数据库中,一般插入标签没有返回值,传入一个实体对象的数据,一般不对插入的数据做判断,因为是新的一笔数据,即使是null值也可以插入,一些业务逻辑的判断应该放在前端实现。下面写一个例子:

<insert id="insertUser" parameterType="User">
  INSERT INTO sys_user (name, age, email)
  VALUES (#{name}, #{age}, #{email})
</insert>

但是有时候存在子表数据一起插入的情况,而此时数据库的id又是自增长,那么就需要返回插入数据的id,用来作为从表的外键插入到数据库,需要引入一个新的标签<selectKey>专门用来查询插入后返回的id。那么插入语句就可以改成这个样子:

<insert id="insertUser" parameterType="User">
  <selectKey keyProperty="id" resultType="int" order="AFTER">
    SELECT LAST_INSERT_ID()
  </selectKey>
  INSERT INTO sys_user (name, age, email)
  VALUES (#{name}, #{age}, #{email})
</insert>

还有一种实现方式是通过给insert标签添加属性来实现:

<insert id="insertUser" usegeneratedKeys="true" keyProperty="id" parameterType="User">
  INSERT INTO sys_user (name, age, email)
  VALUES (#{name}, #{age}, #{email})
</insert>

<update>的实现方式也是如此,只不过update正常都是通过id修改,不会需要返回id,不过<update>标签需要注意的是有时候会希望返回影响的行数,那么同样可以用<selectKey>标签,具体代码如下:

<update id="updateUser" parameterType="User" statementType="PREPARED">
  <selectKey keyProperty="rowCount" resultType="int" order="AFTER">
    SELECT ROW_COUNT()
  </selectKey>
  UPDATE sys_user
  SET name = #{name}, age = #{age}, email = #{email}
  WHERE id = #{id}
</update>

同时,<update>还经常存在一种需求是如果传入的值为null则不修改数据库原有的值,如果传入的数据是有效值,则修改原有的值,那么这里就要结合<if>标签做一些判断了。这里要引入一个标签<set>,例子如下:

<update id="updateUser" parameterType="User">
  UPDATE sys_user
  <set>
    <if test="name != null">
      name = #{name},
    </if>
    <if test="age != null">
      age = #{age},
    </if>
    <if test="email != null">
      email = #{email},
    </if>
  </set>
  WHERE id = #{id}
</update>

不希望更新传入数据为null的值,也就是传入的字段有值则修改,如果没有值则不修改,不过要注意的是起码要保证有一个条件是存在的,否则sql会成为以下这样:update sys_user where id = #{id},这样sql是报错的。

<delete> 最后再说下<delete>标签,这个标签也是最简单的,只需要判断条件是否满足然后删除掉对应的数据就好了,例子:

<delete id="deleteUser" parameterType="int">
  DELETE FROM 
  WHERE id = #{userId}
</delete>

也可以判断条件的是否存在,但是一般删除操作比较谨慎,不会多条件筛选删除。否则会出现误删的清理,判断条件的方式与查询里的方式一致,可以参考查询里的实现方式。

好了,已上如有问题可以在评论区给我留言文章来源地址https://www.toymoban.com/news/detail-732783.html

到了这里,关于Mybatis的<insert>,<update>,<delete>标签用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • for循环中循环一次提交一次 insert update 关闭事务 spring springboot mybatis

     在方法上直接加如下注解: 在测试的时候,有时候会希望在for循环中,代码循环一次就提交一次事务。 最简单的方式,就是关闭事务,不需要事务。添加注解如下: 如果说是真的在生产上有这样的需要,每循环一次就提交事务,那就需要手动控制事务了。 需要这几行代码

    2024年02月07日
    浏览(47)
  • mybatis实战:四、insert 用法(普通插入、返回主键自增的值)

    1.UserMapper.xml 1.指定特殊数据类型 2.<insert >元素,这个标签包含如下属性  2. UserMapperTest  1.只插入一条数据 2.回滚(不写入数据库) 3.插入后判断是否为空(为空/不为空,抛异常) 3.UserMapper 方法一: 使用 JDBC 方式返回主键自增的值  方法二: 使用 selectKey 返回主键的值

    2024年02月07日
    浏览(46)
  • 5.4 如何在Mybatis中使用insert标签并返回主键id?-- 教你通用做法

    通过 《上文》,我们学会了XML映射文件Mapper的创建,以及最常用的select标签和resultMap标签,本文主要讲解 insert标签 ,用于和insert SQL语句映射,非常简单上手,只有两个点可以扩展讲讲:一个点是 insert后返回主键id(会介绍两种方式) ,另外一个点是 实现批量添加 ,原本打算

    2024年02月06日
    浏览(42)
  • SQL注入_insert&delete&update&selete

    一. SQL注入介绍 1.1 sql注入概念 1.1.1 sql注入的实质:数据库将用户输入的数据当作代码执行 1.1.2 sql注入产生的条件 用户能控制输入 原本程序要执行的代码,拼接了用户输入的数据然后进行执行 1.2 sql注入注入点判断 1.2.1 判断是否存在可控变量 抓包判断 如图所示,id=1与subm

    2023年04月16日
    浏览(38)
  • 5.5 Mybatis Update标签实战,返回值是什么? 教你通常处理做法

    通过 《上文》,我们学会了如何在Mybatis中使用insert标签,并学会了使用两种方式获取返回主键id,本文主要讲解 update标签 ,用于和update SQL语句映射,依然结合实战边做边讲。 其实update标签非常简单,知识点不多!所以,本文主要安排的小知识点: 返回值是什么? 为什么要

    2024年02月04日
    浏览(39)
  • MySQL修炼手册7:数据修改基础:INSERT、UPDATE、DELETE语句详解

    在掌握了MySQL数据库的基础之后,学习如何对数据进行有效的修改是至关重要的。本篇博客旨在提供一个深入的指南,涵盖了数据修改的三大基础操作:插入(INSERT)、更新(UPDATE)、删除(DELETE)。为了更好地理解这些概念,我们首先创建一个示例表“水果表”,然后逐一

    2024年01月17日
    浏览(76)
  • Oracle数据库update语句用法,多表批量更新对应的字段值

    日常工作经常会遇到参照某个表格,更新主表对应字段的值 一般可以用excel的VLOOKup函数进行查找匹配,但是这种方法需要将表从数据库中导出,更新完了之后再导回数据库中。 我们用update语句可以很方便在数据库里完成更新。 语句: update 要修改数据的表名 set 修改的列1=(

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

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

    2024年02月12日
    浏览(72)
  • Mybatis使用insert插入后获取id值

    在mapper中定义insert方法: 属性 useGeneratedKeys:设置为true,否则无法获取到主键id。 keyProperty:实体类对象的主键id属性名称。 keyColumn:数据库中主键id字段名称。 调用orderMapper.insertOrder(record)执行插入语句,返回值是一个int类型,如果成功返回的是1,失败返回的是exception。 插

    2024年02月16日
    浏览(45)
  • spring boot集成mybatis-plus——Mybatis Plus 批量 Insert_新增数据(图文讲解)

     更新时间 2023-01-10 16:02:58 大家好,我是小哈。 本小节中,我们将学习如何通过 Mybatis Plus 实现 MySQL 批量插入数据。 先抛出一个问题:假设老板给你下了个任务,向数据库中添加 100 万条数据,并且不能耗时太久! 通常来说,我们向 MySQL 中新增一条记录,SQL 语句类似如下:

    2024年02月04日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包