定义
动态sql:指sql语句可以根据参数的变化而变化
select * from student where sid=#{sid}
案例
实现传入一个Student对象,然后根据student的属性进行查询,如果只有sid有值,就以sid作为查询条件查询,如果只有sname就以sname作为查询条件,如果sid,sname都有,则以sid,sname作为查询条件,如果都没有,就查询所有学生
以往jdbc操作,需要根据逻辑条件拼接sql语句 在mybatis,提供了动态sql的功能
如下列代码
<mapper namespace="com.dynamicsql.StudentMapper">
<!-- 1.假设sid有值,如果sname没值就以sid作为条件,否则就以sid sname作为条件查询 -->
<select id="selectStudent" resultType="com.dynamicsql.Stu">
select * from student where sid=#{sid}
<if test="sname!=null and sname.length()!=0">
and sname=#{sname}
</if>
</select>
```
#/上述没用<where>,下列代码用了
```
<!-- 2.如果sid、sname都没值,就查询所有的,其他的按照1 -->
<!-- where:mybatis可以自动根据实际情况自动增加、去掉where关键字 -->
<select id="select" resultType="com.woniuxy.dynamicsql.Stu">
select * from student
<!-- 如果where中的条件有一个满足,就会自动添加where,如果没有任何
一个条件满足,就不条件where,还可以自动判断是否去掉多余的and or
-->
<where>
<if test="sid!=0">
sid=#{sid}
</if>
<if test="sname!=null and sname.length()!=0">
and sname=#{sname}
</if>
</where>
</select>
</mapper>