Mybatis杂记

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如下

情况一:多列不同属性

  1.    
  2.          insert ignore into tb_news   
  3.            
  4.             ${key}  
  5.            
  6.          values   
  7.            
  8.             #{params[${key}]}  
  9.            
  10.    >

情况二:同一列不同值更新

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}'  

上一篇:关于设计模式


下一篇:mac:macOS开机恢复系统或选择不同系统