Mybatis模糊查询和动态sql语句的用法
Mybatis模糊查询和动态sql语句
模糊查询
对数据库最常用的操作就是查询了,但是如何使用Mybatis进行模糊查询呢?下面先看一个简单的模糊查询
SELECT * FROM oa_employee WHEREemp_nameLIKE#{asd}
这是一条伪模糊查询,因为没有实现真正的模糊“%”。参数为字符串,所以#{}中内容不被限制。但是应该如何插入%字符呢。我们首先想到的是传递字符串参数时将%插入到字符串中“张%”,但是这种方法操作略微繁琐了一些。下面提供了使用sql方法的策略
SELECT * FROM oa_employee WHEREemp_nameLIKECONCAT(#{asd},'%')
另外一种不推荐的写法给大家
SELECT * FROM oa_employee WHEREemp_nameLIKE'${emp_name}%'
#{}是采用预编译的写法,也就是JDBC中的PerpareStatement,这种写法可以防止sql注入,但${}这种写法是不采用预编译,其中的参数写成类中的属性或者map的key值或者为接口中注解的参数名。
mybatis提供了bind标签。下面举个例子
SELECT * FROM oa_employee WHEREemp_nameLIKE#{emp_name}
他是在#{}表达式自动填入value值,值得注意的是“_parameter.getEmp_name()”调用的方法是对象中作为查询参数的属性的get方法
多条件查询
多种条件查询的要点是判断查询条件是否为空,拼接sql语句。在mybatis中提供了if标签和where标签。下面来介绍两种标签的用法。
if标签
SELECT * FROM oa_employee WHERE1=1 andemp_name=#{emp_name} andsex=#{emp_sex}
mybatis中的if标签有些类似于EL表达式的使用,test中可以直接写入类中的属性或者key值。
where标签
SELECT * FROM oa_employee andemp_name=#{emp_name} andsex=#{emp_sex}
这里的where标签替换了前一段代码的where1=1。mybatis中的where标签会判断标签内是否有内容,如果有内容就自动生成where并把where后面的第一个and+一个空格,or+一个空格去掉。
choose,when和otherwise标签
SELECT * FROM oa_employee andemp_name=#{emp_name} andsex=#{emp_sex} emp_id=50
当所有条件不满足时,执行otherwise标签的内容。
trim标签
SELECT * FROM oa_employee andemp_name=#{emp_name} andsex=#{emp_sex}
trim标签的属性及其含义
- -prefix:标签之间有内容在最前面加入
- -prefixOverrides:检查内容的最前面是否匹配,匹配就删除
- -suffix:标签之间有内容在最后面加入
- -suffixOverrides:检查内容的最后面是否匹配,匹配就删除
set标签
set标签常用于update操作,并且会自动抹掉无关的,
UPDATE oa_employee WHEREemp_id=50 emp_name=#{emp_name} ,sex=#{emp_sex}
foreach标签
foreach用于处理数组或者list集合,下面是一个批量添加的例子
INSERTINTO oa_employee (emp_name,sex,fk_dept_id) VALUES (#{employee.emp_name},#{employee.emp_sex},#{employee.fk_dept_id})
其中如果参数为数组则collection只能为“array”参数为List集合则collection只能为“list”item类似JSTL中的var的作用,指代容器中的每一个对象。separator=”,”的含义是每条数据以,分割。未注明的属性有open和close他们的含义是在遍历开始和结束时分别添加其内容。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接