1、添加公共sql代码段

使用<sql><include> 标签

<sql id="userSubassemblyRecordParam">
id, user_id, lesson_id, subassembly_id, record_id, course_id, teacher_id, status, create_time, update_time
</sql> <select id="listUserSubassemblyRecordByParam" resultMap="userSubassemblyRecordMap">
SELECT
<include refid="userSubassemblyRecordParam"/>
FROM
rel_user_subassembly_record
</select>

2、动态更新

选择更新,为空则不更新,在<set> 标签里添加 <if> 标签,不需要考虑<if> 标签里的逗号

<update id="updateSchoolLevel" parameterType="com.ajz.course.entity.School">
UPDATE
school
<set>
<if test="gaokao != null">
gaokao = #{gaokao},
</if>
<if test="contest != null">
contest = #{contest},
</if>
<if test="independent != null &amp;&amp; independent != 0">
independent = #{independent},
</if>
</set>
WHERE
id = #{id}
</update>

3、批量动态更新

在2 的基础上添加<trim> 和<foreach>标签

<update id="updateCourseRateStateByCourseList">
UPDATE
course
<trim prefix="set" suffixOverrides=",">
<trim prefix="rate_state =case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.rateState!=null">
when id=#{item.id} then #{item.rateState}
</if>
</foreach>
</trim>
<trim prefix="name =case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.name!=null">
when id=#{item.id} then #{item.name}
</if>
</foreach>
</trim>
</trim>
WHERE
<foreach collection="list" separator="or" item="item" index="index" >
id=#{item.id}
</foreach>
</update>

4、动态插入

选择插入,为空则不插入,在key 和value 两个部分都需要判断

<insert id="insertSyllabus" useGeneratedKeys="true" keyProperty="syllabusId"
parameterType="com.ajz.course.entity.Syllabus">
INSERT INTO
syllabus
<trim prefix="(" suffix=")" suffixOverrides=",">
course_id,
<if test="startTime != null">
start_time,
</if>
<if test="endTime != null">
end_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{courseId},
<if test="startTime != null">
#{startTime},
</if>
<if test="endTime != null">
#{endTime}
</if>
</trim>
</insert>

5、批量插入

只在VALUES 部分循环

<insert id="insertTimetableList" parameterType="java.util.List">
INSERT INTO
timetable (user_id, user_type, lesson_id, lesson_time, watch_state, status)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.userId},
#{item.userType},
#{item.lessonId},
#{item.lessonTime},
#{item.watchState},
#{item.status})
</foreach>
</insert>

6、数据库根据主键自己选择插入还是更新,insertOrUpdate

相当于 jpa的 merge,关键在于唯一索引,也可以是主键,关键字:ON DUPLICATE KEY UPDATE

<!--user_id, user_type, lesson_id 三个字段建立了联合唯一索引-->
<insert id="insertOrUpdateTimetable" useGeneratedKeys="true" keyProperty="id" parameterType="com.ajz.course.entity.Timetable">
INSERT INTO
timetable (user_id, user_type, lesson_id, lesson_time, watch_state, status)
VALUES (#{userId},
#{userType},
#{lessonId},
#{lessonTime},
#{watchState},
#{status})
ON DUPLICATE KEY UPDATE
lesson_time = #{lessonTime}, watch_state = #{watchState}, status = #{status}
</insert>

7、批量insertOrUpdate

在5和6的基础上实现,注意 ON DUPLICATE KEY UPDATE 后面的 VALUES,是数据库的字段,而不是实体的字段, admin_name = VALUES(admin_name)

<insert id="insertOrUpdateStatSchoolHome" useGeneratedKeys="true" keyProperty="id" parameterType="com.ajz.course.entity.StatSchoolHome">
INSERT INTO
stat_school_home (sid,
name,
admin_name,
type_key,
status)
VALUES
<foreach collection="list" item="item" index="index" open="" close="" separator=",">
(#{item.sid},
#{item.name},
#{item.adminName},
#{item.typeKey},
#{item.status})
</foreach>
ON DUPLICATE KEY UPDATE
name = VALUES(name),
admin_name = VALUES(admin_name),
type_key = VALUES(type_key),
status = VALUES(status)
</insert>

原创文章,欢迎转载,转载请注明出处!

mybatis操作mysql的奇淫技巧总结(代码库)的更多相关文章

  1. Zepto源码分析(二)奇淫技巧总结

    Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...

  2. JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组

    一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...

  3. # ACM奇淫技巧

    目录 ACM奇淫技巧 差分操作 坐标旋转 ACM 卡常优化 vsc代码块(头文件模板) 读入输出优化 逗号表达式 内联函数inline 寄存器变量register 条件判断加减代替取模 自增运算符优化 ...

  4. 优化DP的奇淫技巧

    DP是搞OI不可不学的算法.一些丧心病狂的出题人不满足于裸的DP,一定要加上优化才能A掉. 故下面记录一些优化DP的奇淫技巧. OJ 1326 裸的状态方程很好推. f[i]=max(f[j]+sum ...

  5. 12个实用的 Javascript 奇淫技巧

    这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...

  6. NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)

    NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC) ARGUS 1月13日 发布 推荐 0 推荐 收藏 2 收藏,1.1k 浏览 文章整理中...... 实现思路 当服务器接收 ...

  7. NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识

    NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识 ARGUS 1月13日 发布 推荐 0 推荐 收藏 6 收藏,707 浏览 大家或许会有这种奇葩的需求...要是同一台主机上, 需要针对不 ...

  8. NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)

    NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1) ARGUS 1月13日 发布 推荐 0 推荐 收藏 3 收藏,839 浏览 nginx的if支持=.!= 逻辑比较, 但不支持if中 & ...

  9. javascript之奇淫技巧

    最近准备面试,复习一下javascript,整理了一些javascript的奇淫技巧~ //为兼容ie的模拟Object.keys() Object.showkeys = function(obj) ...

随机推荐

  1. Arcgis瓦片--js客户端加载

    接上篇博客,下载好arcgis格式的瓦片数据以后,需要用js客户端在前端加载出来.这里介绍两种方案: 1.使用超图iServer将瓦片发布成rest地图服务,或者arcgis地图服务,客户端直接加载 ...

  2. weblogic 安装配置打补丁

    Master Note on WebLogic Server (WLS) Patches, Upgrade Installers, and Full Installers

  3. C语言检测指定文件是否存在的代码

    内容之余,将做工程过程中比较常用的一些内容片段珍藏起来,下面资料是关于C语言检测指定文件是否存在的内容,希望能对小伙伴们有所用. #include <stdbool.h> #include ...

  4. 最小生成树(Prim算法)

    Java实现Prim算法 package com.java; import java.util.*; /** * 普里姆算法—Prim算法 * 算法思路:将图中所有的顶点分为两类:树顶点(已被选入生成 ...

  5. netstat简介

    netstat是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表,实际的网络连接以及每一个网络接口设备的状态信息,netstat用于显示与IP,TCP,UDP和ICMP协议相关的统计数据,一 ...

  6. Redis可视化工具 Redis Desktop Manager

    1.前言 从接触Redis也有两年,平时就使用它来做缓存层,它给我的印象就是很强大,内置的数据结构很齐全,加上Redis5.0的到来,新增了很多特色功能.而Redis5.0最大的新特性就是多出了一个数 ...

  7. 使用mybatis报错【Result Maps collection already contains value for ...BaseResultMap】的解决方法

    Result Maps collection already contains value for ...BaseResultMap ...... 这个问题,相信大家在使用mybatis的重新生成 d ...

  8. C++中 #if 和 #ifdef 区别

    以#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作#if 条件语句程序段1 //如果条件语句成立,那么就编译程序段1#endif程序段2//如果条件不语句成立,那么就编译程序段2# ...

  9. DB2批量插入性能对比

    import ibm_db import random import time first_names = '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏' \ '陶姜戚谢邹喻柏水窦章 ...

  10. 重建二叉树[by Python]

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2 ...