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. Python 使用Python远程连接并操作InfluxDB数据库

    使用Python远程连接并操作InfluxDB数据库 by:授客 QQ:1033553122 实践环境 Python 3.4.0 CentOS 6 64位(内核版本2.6.32-642.el6.x86 ...

  2. 更新下载库update绝对详解

    下载更新apk,基本上每个app都需要的功能,来看看吧,肯定有你想要的,以前都是自己写,近期想借助第三方的一个库来做,功能齐全,感觉不错,记录使用过程,虽然官方也有使用教程,不过毕竟粗略,网上也能搜到 ...

  3. 2019Java查漏补缺(二)

    查看了公众号:java之间的整理的集和文章,文章地址 总结和搜索了一下网络知识,总结了一下: 1.String 的hashcode()方法 2.switch总结: 3.如何实现克隆 1.String ...

  4. shell脚本批量ssh登陆主机并执行命令

    shell脚本批量ssh登陆主机并执行命令 今天在客户现场遇到了这个问题,客户没有管理工具,无法批量登陆主机下发命令,几个个C段啊,让我一个一个登陆,.................. 所以写了个s ...

  5. c#二进制移位运算符 "<<"及">>","&","|","^"

    移位运算符 & :按位与,其实与&&逻辑运算符有一致的地方: | :按位或,同样与||有类似的地方. ~:按位取反 ^:按位异或 <<:左移运算符 >> ...

  6. 从0开始的Python学习006流程控制

    流程控制语句 Python中有三种控制流程语句: if.for.和while. if语句 使用if语句来校验一个条件,如果条件为真(True),运行if-块,如果为假(False),运行else-块. ...

  7. Python__装饰器练习题

    一:编写函数,(函数执行的时间是随机的) import time def timmer(func): def wrapper(*args,**kwargs): start= time.time() f ...

  8. SQLServer查询计划

    参考:http://blog.csdn.net/luoyanqing119/article/details/17022649 1. 开启方式 菜单栏:query---Display Estimated ...

  9. LV 指定或修改逻辑卷的major, minor号[RHEL6]

    在创建逻辑卷时,可以指定逻辑卷的major和minor设备号. [-M|--persistent {y|n}] //Set to y to make the minor number specifie ...

  10. Mac系统编译FFmpeg

    转载请标明来源:我不是掌柜的博客 前言 维基百科解释:FFmpeg是一个开源软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec – 这是一个用于多个项目中音频和视频的解码 ...