Mybatis学习笔记-三、动态SQL dynamic-sql

3.6 动态SQL dynamic-sql

有时候,静态的SQL语句并不能满足应用程序的需求。我们可以根据一些条件,来动态地构建 SQL语句。
例如,在Web应用程序中,有可能有一些搜索界面,需要输入一个或多个选项,然后根据这些已选择的条件去执行检索操作。
在实现这种类型的搜索功能,我们可能需要根据这些条件来构建动态的SQL语句。如果用户提供了任何输入条件,
我们需要将那个条件添加到SQL语句的WHERE子句中。MyBatis通过使用,,,,元素提供了对构造动态SQL语句的高级别支持。

3.6.1 If 条件 (零个或多个)

元素被用来有条件地嵌入SQL片段,如果测试条件被赋值为true,则相应地SQL片段将会被添加到SQL语句中。
假定我们有一个课程搜索界面,设置了讲师(Tutor)下拉列表框,课程名称(CourseName)文本输入框,开始时间(StartDate)输入框,
结束时间(EndDate)输入框,作为搜索条件。假定课讲师下拉列表是必须选的,其他的都是可选的。
当用户点击搜索按钮时,我们需要显示符合以下条件的成列表:
特定讲师的课程
课程名
包含输入的课程名称关键字的课程;如果课程名称输入为空,则取所有课程
在开始时间和结束时间段内的课程
我们可以对应的映射语句,如下所示:

<resultMap type="Course" id="CourseResult"> 
  <id column="course_id" property="courseId" /> 
  <result column="name" property="name" /> 
  <result column="description" property="description" /> 
  <result column="start_date" property="startDate" /> 
  <result column="end_date" property="endDate" /> 
</resultMap> 

<select id="searchCourses" parameterType="map" resultMap="CourseResult">
	SELECT * FROM COURSES 
		WHERE TUTOR_ID= #{
   tutorId} 
	<if test="courseName != null"> 
		AND NAME LIKE #{
   courseName} 
	</if> 
	<if test="startDate != null"> 
		AND START_DATE >= #{
   startDate} 
	</if> 
	<if test="endDate != null"> 
		AND END_DATE <![CDATA[ <= ]]> #{
   endDate} 
	</if> 
</select> 

public interface DynamicSqlMapper{
    
	List<Course> searchCourses(Map<Str
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值