赞
踩
为什么要学MyBatis的动态SQL?
在执行sql语句时,不免会有一些很常用但是写起来又很复杂的SQL语句,使用了动态SQL就能把这些sql语句
封装
,只需要写简短的代码就能替换冗余
的sql语句,并且在修改这些重组的SQL语句时,因为进行了封装,就能只修改一份就可以,减少出错的可能
今天
没有重点,全是重点和干货
MyBatis的映射文件中支持在基础SQL上添加一些逻辑操作,并动态拼接成完整的sql之后再执行,以达到SQL复用,简化编程的效果
对两个查询方法中相同的sql语句用sql进行了封装
两个查询方法 |
---|
<sql id="subject_all"> select t_subjects.id,t_subjects.name,t_subjects.grade,t_students.id stu_id,t_students.name stu_name,t_students.sex from t_subjects join t_stu_sub on t_subjects.id = t_stu_sub.subject_id join t_students on t_students.id = t_stu_sub.student_id </sql> <select id="querySubjectById" resultMap="Subject_map"> <include refid="subject_all"></include> where t_subjects.id=#{id} </select> <select id="querySubjectByName" resultMap="Subject_map"> <include refid="subject_all"/> where t_subjects.name =#{name} </select>
简化代码书写,在业务逻辑发生改变时,修改代码时只需要修改sql标签中的sql语句就可以,不需要重复修改大量的sql语句
查询结果 |
---|
另外对于查询方法而言,我们可能需要很多的查询方法,如果我们为每个方法都定义一个Dao的方法,那么我们的方法就会很多,MyBatis允许我们把这些特别相似的方法合并为一个方法
对于前面这两个方法,我们通过MyBatis来做合并方法
SubjectDao |
---|
mapper映射文件
<!-- <select id="querySubjectById" resultMap="Subject_map">--> <!-- <include refid="subject_all"></include>--> <!-- where t_subjects.id=#{id}--> <!-- </select>--> <!-- <select id="querySubjectByName" resultMap="Subject_map">--> <!-- <include refid="subject_all"/>--> <!-- where t_subjects.name =#{name}--> <!-- </select> <!-- MyBatis动态sql的方法合并--> <!-- 这里因为我们查询的参数是一个Subject的对象,我们需要通过对象的属性来查询 我们约定要通过那个属性查询,那么就只(只给这一个属性赋值)的方式来查询 --> <select id="querySubjectBySubject" resultMap="Subject_map"> <include refid="subject_all"/> where <if test="id!=null"> t_subjects.id=#{id}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。