前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mybatis判断用insert还是update

mybatis判断用insert还是update

作者头像
用户7741497
发布于 2022-03-22 06:04:19
发布于 2022-03-22 06:04:19
37000
代码可运行
举报
文章被收录于专栏:hml_知识记录hml_知识记录
运行总次数:0
代码可运行

前言

在实际开发中会遇到这种情况,就是一条数据需要判断是新增还是更新,正常的开发思路是先去查询这条数据的Id是否已经存在于数据库,存在就是update,否则为insert,mybatis也是基于这样的思想实现的,下面就举个例子看一下。

具体实现

比如,前台将一条教师的信息保存到教师的实体bean中,然后需要将这条信息保存到数据库中,这时需要判断一下教师信息是要update还是insert。

教师信息实体bean如下:Teacher.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Teacher {

    private int teacherId;//教师Id

    private String teacherName;//教师名

    private int count;//mybatis判断Id是否存在

    public int getTeacherId() {
        return teacherId;
    }

    public void setTeacherId(int teacherId) {
        this.teacherId = teacherId;
    }

    public String getTeacherName() {
        return teacherName;
    }

    public void setTeacherName(String teacherName) {
        this.teacherName = teacherName;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

}

可以看到在实体bean中除了正常的教师信息外多了一count,它就是mybatis用来判断teacherId是否存在,如果存在就会将存在的个数保存到count中,当然一般Id都是主键,所有count也就一般都是1。下边看一下mybatis的映射文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<insert id="AddTeacher" parameterType="com.mycompany.entity.Teacher">
        <selectKey keyProperty="count" resultType="int" order="BEFORE">
            select count(*) from Teacher where teacher_id = #{teacherId}
        </selectKey>
        <if test="count > 0">
            update event
            <set>
               <if test="teacherName!= null" >  
                    teacher_name= #{teacherName},
               </if>
            </set>
            <where>
                teacher_id = #{teacherId}
            </where>
        </if>
        <if test="count==0">
            insert into teacher(teacher_id,teacher_name) values (#{teacherId},#{teacherName})
        </if>
</insert>

可以看到mybatis的实现思路也是先查询Id是否存在,在根据count判断是insert还是update。

说明

1.实现原理是selectKey做第一次查询,然后根据结果进行判断,所以这里的order="BEFORE"是必须的,也是因BEFORE,所以没法通过<bind>标签来临时存储中间的值,只能在入参中增加属性来存放。

2.就上面这个例子而言,就要求实体类中包含count属性(可以是别的名字)。否则selectKey的结果没法保存,如果入参是个Map类型,就没有这个限制。

3.这种方式只是利用了selectKey会多执行一次查询来实现的,但是如果你同时还需要通过selectKey获取序列或者自增的id,就会麻烦很多(oracle麻烦,其他支持自增的还是很容易),例如我在上一篇中利用selectKey 获取主键Id。

4.建议单独查看学习一下selectKey的用法。

————————————————

版权声明:本文为CSDN博主「老贼大魔王」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_36637705/article/details/78530442

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
spring3+mbatis3开发实例
最近一直在深入了解struts2,spring,hibernate以及mybatis框架,通过查看这些框架的源码和官方文档,发现自己对于这些框架的原理,使用有了更深的理解,那么今天
py3study
2020/01/07
4790
安卓最后一个大题复习
teacher_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schema
手撕代码八百里
2020/07/29
8780
安卓最后一个大题复习
Mybatis generator 1.4.x 入门教程--转载
​ 最近因为公司开了新的项目,所以在构建骨架的时候发现mybatis最新的版本已经更新到了1.4.0了,尝试了一下,比起之前的mybatis版本,有了更好的优化,用上了lamada表达式,还支持动态sql查询,所以在这里安利一波,因为之前我用的Laravel ORM,所以比较习惯使用这种lamada表达式来查询,可能之前用习惯了以前的查询方式的
allsmallpig
2021/02/25
1.1K0
_Mybatis映射文件 — 常用标签及特殊字符的处理
在映射文件中,使用 <resultMap> 自定义映射关系;在 <select> 标签中,使用 resultMap 属性代替 resultType 属性,使用自定义映射关系。 如下:
会洗碗的CV工程师
2023/11/21
2530
_Mybatis映射文件 — 常用标签及特殊字符的处理
springboot+mybatis+security ajax实现session保存User实体
AuthorityTeacher import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; import java.util.List; /** * @ProjectName: teaching * @Package: cn.bdqn.entity *
用户5899361
2020/12/31
5270
Mybatis映射文件 — 常用标签及特殊字符的处理
        哎呀,这是为什么呢,查询有三条记录后,但是我们的集合对象却是为空, 原来是因为
会洗碗的CV工程师
2023/04/01
1.3K0
Mybatis映射文件 — 常用标签及特殊字符的处理
Spring IOC基于XML管理Bean(一)
IoC 是 Inversion of Control 的简写,译为“ <font color=blue>控制反转</font> ”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。
鱼找水需要时间
2023/06/11
6420
Spring IOC基于XML管理Bean(一)
SSM 单体框架 - 教育平台后台管理系统:课程模块
课程模块包含了多条件查询、 图片上传、 新建&修改课程、课程状态管理、课程内容展示、回显章节对应的课程信息、新建&修改章节信息、修改章节状态、 新建&修改课时信息等接口的编写。
RendaZhang
2020/09/24
1.2K0
oracle表之间的关联
mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-
微醺
2019/01/17
1.2K0
Data Access 之 MyBatis(四) - Dynamic SQL
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。
RiemannHypothesis
2022/08/19
4590
Data Access 之 MyBatis(四) - Dynamic SQL
Spring Boot实现xml传参和返回值
虽然json作为数据传输的格式大型其道,但是使用xml格式传输的系统还是在一些存量的系统中存在。另外WebService本身就是使用xml格式进行数据传输。今天用个小例子看看Spring Boot如何实现xml传参和返回值。
BUG弄潮儿
2020/06/15
2.6K0
Spring Boot实现xml传参和返回值
springboot的搭建
com/teng/spring02/mapper TeacherMapper.xml
微醺
2019/01/17
4920
myBatis实例
1. myBatis的介绍: MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除 了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的 XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 jdbc-->dbutil-->(mybatis)-->hibernate 2. mybatis快速入门 a. 添加jar包
用户1112962
2018/07/03
1.2K0
MySql-学生成绩管理系统
HelloWorldZ
2024/03/20
3300
springboot和redis的结合使用
启动jar包,pom.xml文件添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupI
微醺
2019/01/17
8790
面试Mybatis之基本操作(collection和association)
我们把级联关系基本操作都已经演示完毕,为了让大家更加深刻,我们在再介绍一下基本的概念。
小土豆Yuki
2020/06/15
4840
MyBatis关联查询(一对一)
这里是一对一的关联关系,当然实际中一般不是这样的,一般可以是多对多,不过这里只是举例子
SmileNicky
2019/01/17
2.1K0
MyBatis 实现关联表查询
一、一对一关联  1.1、提出需求   根据班级id查询班级信息(带老师的信息) 1.2、创建表和数据   创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY
庞小明
2018/03/08
2.9K0
MyBatis 实现关联表查询
搞定Mybatis面试题
${} 是 Properties 文件中的变量占位符,它可以用于 XML 标签属性值和 SQL 内部,属于字符串替换。例如将 ${driver} 会被静态替换为 com.mysql.jdbc.Driver :
田维常
2019/07/16
1.3K0
搞定Mybatis面试题
Data Access 之 MyBatis(七)- MBG &amp; PageHelper
MyBatis逆向工程是指可以根据数据库表的分析逆向生成Entity实体类、Mapper接口以及Mapper XML等类和XML文件,逆向工程会用到MyBatis官方提供的代码生成器即MyBatis Generator
RiemannHypothesis
2022/08/19
3230
Data Access 之 MyBatis(七)-  MBG &amp; PageHelper
相关推荐
spring3+mbatis3开发实例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验