对于一些复杂的查询,我们可能会指定多个查询条件,但是这些条件可能存在也可能不存在,例如在58同城上面找房子,我们可能会指定面积、楼层和所在位置来查找房源,也可能会指定面积、价格、户型和所在位置来查找房源,此时就需要根据用户指定的条件动态生成SQL语句。如果不使用持久层框架我们可能需要自己拼装SQL语句,还好MyBatis提供了动态SQL的功能来解决这个问题。MyBatis中用于实现动态SQL的元素主要有:
- if
- choose / when / otherwise
- trim
- where
- set
- foreach
下面是映射文件的片段。
<select id="foo" parametertype="Blog" resulttype="Blog"> select * from t_blog where 1 = 1 and title = #{title} and content = #{content} and owner = #{owner} </select>
当然也可以像下面这些书写。
<select id="foo" parametertype="Blog" resulttype="Blog"> select * from t_blog where 1 = 1 and title = #{title} and content = #{content} and owner = "owner1" </select>
再看看下面这个例子。
<select id="bar" resulttype="Blog"> select * from t_blog where id in #{item} </select>