mybatis:动态sql

172 阅读1分钟

定义

动态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>