mybatis操作mysql的奇淫技巧总结(代码库)
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 && 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的奇淫技巧总结(代码库)的更多相关文章
- Zepto源码分析(二)奇淫技巧总结
Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...
- JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组
一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...
- # ACM奇淫技巧
目录 ACM奇淫技巧 差分操作 坐标旋转 ACM 卡常优化 vsc代码块(头文件模板) 读入输出优化 逗号表达式 内联函数inline 寄存器变量register 条件判断加减代替取模 自增运算符优化 ...
- 优化DP的奇淫技巧
DP是搞OI不可不学的算法.一些丧心病狂的出题人不满足于裸的DP,一定要加上优化才能A掉. 故下面记录一些优化DP的奇淫技巧. OJ 1326 裸的状态方程很好推. f[i]=max(f[j]+sum ...
- 12个实用的 Javascript 奇淫技巧
这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...
- NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)
NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC) ARGUS 1月13日 发布 推荐 0 推荐 收藏 2 收藏,1.1k 浏览 文章整理中...... 实现思路 当服务器接收 ...
- NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识
NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识 ARGUS 1月13日 发布 推荐 0 推荐 收藏 6 收藏,707 浏览 大家或许会有这种奇葩的需求...要是同一台主机上, 需要针对不 ...
- NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)
NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1) ARGUS 1月13日 发布 推荐 0 推荐 收藏 3 收藏,839 浏览 nginx的if支持=.!= 逻辑比较, 但不支持if中 & ...
- javascript之奇淫技巧
最近准备面试,复习一下javascript,整理了一些javascript的奇淫技巧~ //为兼容ie的模拟Object.keys() Object.showkeys = function(obj) ...
随机推荐
- 功能强大的PDF实用工具
PDF实用工具(PDFTool)是北京博信施科技有限有限公司研制开发的一款专门提供对PDF文件进行编辑.加工的处理软件.本软件具有对PDF文件进行分割.结合.加密.解密.添加水印.设定有效期限等多种功 ...
- 深入了解Object.defineProperty
原来写文章都是一次写两三个小时写完,偶尔看到一个人的博客了解到还有草稿箱这个功能,所以以后写文章的时候就舒服多了哈哈,可以存起来再发,不需要一口气写完了 最近一直在看JavaScript高级程序设计, ...
- 测者的性能测试手册:Web压力测试工具webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: wget http:/ ...
- hrbust1140 数字和问题
题目: 定义一种操作为:已知一个数字,对其各位数字反复求和,直到剩下的数是一位数不能求和为止.例如:数字2345,第一次求和得到2 + 3 + 4 + 5 = 14,再对14的各位数字求和得到1 + ...
- PHAR系列之导言
由于之前都是在现成的PHP框架下写web项目,一般都只专注于框架内部的使用跟优化.但是对于一些PHP很有特色的功能跟特性很少过多的深入了解.最近做项目调研的时候偶尔注意到一个PHP中一个比较常见的概念 ...
- docker compose 服务启动顺序控制
概要 docker-compose 可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序. docker-comp ...
- Java基础——1 一切都是对象
- hello随笔
初次来到博客园,都试一下 我明白了,随笔就是博客咯.日记自对自己可见.再试试分类吧
- C#基础知识之类和结构体
虽然项目中一直在使用类.结构体等类型,仔细琢磨,还真无法系统的说出个所以然.记录一下类.结构体.类和结构体区别 一.类 对于类,大家都特别熟悉.简单的介绍一下类的结构,然后记录一下Class需要注意的 ...
- kernel笔记——内核编译与进程管理
内核与操作系统 由于一些商业操作系统设计上的缺陷以及日益庞杂,“操作系统”的概念对很多人而言变得含糊不清.在进一步讨论Linux内核的话题前,我们先区分“内核”与“操作系统”这两个概念. 操作系统:指 ...