1.关于sql中引用使用$与使用#号的区别:
sql语句方面,使用$是直接替换值操作,而#是进行预处理,下面看个例子。
我们假设实体类Teacher有一个name属性,我们查询name=“张三”老师的信息。
SELECT * FROM teacher where name = ${name} 等价于 SELECT * FROM teacher where name = "张三"
SELECT * FROM teacher where name = #{name} 等价于 SELECT * FROM teacher where name = ? 当执行这条sql的时候,才会赋值name = '张三'.
我们一般使用#来获取引用值,这样避免了sql注入问题,当然在不能jdbc不能使用预处理的情况下我们就得使用$取值了,
比如公司每年的财务报表按照年份命名,我们根据年份来查询标的时候就不能使用#取值了
Select * from ${year}_account ,这里如果使用#号取值就会报错。
2.生成UUID
select replace(uuid(),'-','');
3.批量更新
主要用到foreach标签,遍历map如下
情况一:多列不同属性
- insert ignore into tb_news
- ${key}
- values
- #{params[${key}]}
- >
情况二:同一列不同值更新
update oa_host_resources
when id= #{key} then #{idLevelMap[${key}]}
where
id=#{key}
此种情况参考的是
UPDATE course
SET name = CASE id
WHEN 1 THEN 'name1'
WHEN 2 THEN 'name2'
WHEN 3 THEN 'name3'
END,
WHERE id IN (1,2,3)
4.截取字符串并遍历
'${item}'