查询场景
日期和时间的查询
查询表1中创建时间小于或等于指定时间的数据
and DATE_FORMAT(表1.create_date, '%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{入参.date}, '%Y-%m-%d')
解读
DATE_FORMAT(参数,'精度')
,用于 mybatis在处理sql的时候,按照年月日的格式去处理参数
- ‘%Y-%m-%d %H:%i:%S’ 匹配到秒钟
- ‘%Y-%m-%d %H:%i’ 匹配到分钟
- ‘%Y-%m-%d %H’ 匹配到小时
- ‘%Y-%m-%d’ 匹配到天
- ‘%Y-%m’ 匹配到月
- ‘%Y’ 匹配到年
<![CDATA[ 需要转译的字符 ]]>
,被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容“<”。
- 此标记用于xml文档中,我们先来看看使用转义符的情况。我们知道,在xml中,”<”、”>”、”&”等字符是不能直接存入的,否则xml语法检查时会报错,如果想在xml中使用这些符号,必须将其转义为实体,如”<”、”>”、”&”,这样才能保存进xml文档。
自定义指定字段的内容排序
通常排序都可以通过关键字 order by 搭配 desc
和
来实现,如
SELECT ro.* FROM rebate_order ro
LEFT JOIN rebate_order_detail rod ON ro.id = rod.rebate_order_id
WHERE rod.history_order_no like CONCAT('%', #{vo.historyOrderNo},'%')
GROUP BY ro.id order by ro.create_time desc
但是这里要讲的是特殊场景,比如订单的状态:草稿、已提交、已审核 在数据库中存的不是数值类型012,而是字符类型的(“草稿”, “已提交”, “已审核”),这时需要你根据订单状态来将查询结果进行排序
用到关键字 filed ()
SELECT ro.* FROM rebate_order
order by filed(order_status,'已审核','已提交','草稿')
这样就能根据指定字段的内容进行排序
插入场景
修改场景
一对多关系,
将主表中字段A的数据 刷新到子表中 为空的字段b上
update 子表名 as 子1
inner join (
select 主2.id, 主2.字段A
from 主表名 as 主2
left join 子表名 as 子2 on 主2.id = 子2.主_id
where (子2.字段b is null or 子2.字段b = '')
and 主2.字段A is not null
) 主1
on 主1.id = 子1.主_id
set 子1.字段b = 主1.字段A;
解读
inner join :内关联,作用类似于and条件
通过嵌套查询过滤出符合条件的主表ID和目标字段
在修改子表字段b时,我们需要先通过子表中的主表ID找到对应的主表,
为了预防主表中的字段A是null时将子表的字段b全刷成null,所以这里我们增加了一个判断 -》
当且仅当主表字段A不为null,且子表字段b是空的时候,才将主表的数据刷新到子表
删除场景
持续更新…