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) ...
随机推荐
- Dynamics 365创建用户提示:您正在尝试使用已由其他用户使用的域登录来创建用户。如何解决。
摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复287或者20181128可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ...
- textarea 输入长度限制
<textarea " placeholder="请输入详细地址(100字以内)"></textarea>
- 微信小程序下拉刷新和上拉加载的实现
一: 下拉刷新 下拉刷新两个步骤就能实现. 1.在要实现下拉刷新的页面的json配置文件里面加上 "enablePullDownRefresh": true, //开启下拉刷新 & ...
- selenium-确认进入了预期页面(四)
selenium确认进入了预期页面 在自动化操作中,浏览器每次进入一个新的需要,都需要确认该页面是否打开或打开的页面是否是预期的页面 需要进行确认页面后方可进行下一步操作 确认页面有很多中方法,像笔者 ...
- SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库
SQL Server知识点回忆篇(三):ADO.NET之C#操作数据库 1.连接数据库 (1)创建连接字符串: 使用windows身份验证时的连接字符串: private string conStr= ...
- crosstool-ng-1.22.0搭建开发环境
Ubuntu16.04无法安装libtool,只能在Ubuntu14.04以下版本安装. cp 下载/crosstool-ng-1.22.0.tar.bz2 /home/hou/ tar -x ...
- android菜鸟,了解android工程目录结构
- Spark SQL中列转行(UNPIVOT)的两种方法
行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...
- Node、TS、Koa学习笔记
这样定义可以轻松拿到gender属性 这样定义,函数内显示没有gender 这种方法能得到gender但是函数内部没有gender 这种方式能到gender 但是在函数里施symbel属性,外部不能访 ...
- 好程序员web前端分享18个用CSS制作出来的东西
好程序员web前端分享18个用CSS制作出来的东西,与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和 ...