MyBatis的动态SQL语句实现

  

  

我们根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在id如果不为空时可以根据id查询,如果用户名不为空时还要加入用户名作为条件,这种情况在我们的多条件组合查询中经常会碰到。

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; !DOCTYPE mapper公共”——//mybatis.org//DTD mapper 3.0//EN”“http://mybatis.org/dtd/mybatis-3-mapper.dtd”的在   & lt;映射器命名空间=癱om.joker.dao.IUserDao”比;      & lt;选择id=" findByUser " resultType=坝没А眕arameterType=坝没А北?   从用户选择* 1=1   & lt;如果测试="用户名!=null和用户名!=薄氨?   和用户名# {username}   & lt;/if>   & lt;如果测试=暗刂?=null”比;   和地址像#{地址}   & lt;/if>   & lt;/select>   & lt;/mapper>      

注意:& lt; if>标签属的测试性中写的是对象的属性名,如果是包装类的对象要使用OGNL表达式的写法。另外要注意,1=1的作用。

  


  

  

为了简化上面,1=1的条件拼装,我们可以采用& lt; where>标签来简化开发。

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; !DOCTYPE mapper公共”——//mybatis.org//DTD mapper 3.0//EN”“http://mybatis.org/dtd/mybatis-3-mapper.dtd”的在   & lt;映射器命名空间=癱om.joker.dao.IUserDao”比;      & lt;选择id=" findByUser " resultType=坝没А眕arameterType=坝没А北?   从用户选择*   & lt; where>   & lt;如果测试="用户名!=null和用户名!=薄氨?   和用户名# {username}   & lt;/if>   & lt;如果测试=暗刂?=null”比;   和地址像#{地址}   & lt;/if>   & lt;/where>   & lt;/select>   & lt;/mapper>      


  

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; !DOCTYPE mapper公共”——//mybatis.org//DTD mapper 3.0//EN”“http://mybatis.org/dtd/mybatis-3-mapper.dtd”的在   & lt;映射器命名空间=癱om.joker.dao.IUserDao”比;      & lt; !——查询所有用户在id的集合之中   foreach标签:用于遍历集合   *收集:代表要遍历的集合元素,注意编写时不要写# {}   *开放:代表语句的开始部分   *近:代表结束部分   *项目:代表遍历集合的每个元素,生成的变量名   * sperator:代表分隔符   ——比;   & lt;选择id=" findInIds " resultType="用户" parameterType=皅ueryvo”比;   从用户选择*   & lt; where>   & lt;如果测试=" id !=null和ids.size()比;0”比;   & lt; foreach收集=" id "开放=(“=?“id”=皍id”分隔符=项目”、“比;   # {uid}   & lt;/foreach>   & lt;/if>   & lt;/where>   & lt;/select>   & lt;/mapper>      


  

  

MyBatis的sql中可将重复的sql提取出来,使用时用包括引用即可,最终达到sql重用的目的。

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; !DOCTYPE mapper公共”——//mybatis.org//DTD mapper 3.0//EN”“http://mybatis.org/dtd/mybatis-3-mapper.dtd”的在   & lt;映射器命名空间=癱om.joker.dao.IUserDao”比;      & lt; !——抽取重复的语句代码片段——比;   & lt; sql id=癲efaultSql”比;   从用户选择*   & lt;/完成;      & lt;选择id=" findAll " resultType=坝没А北?   & lt;包括refid=" defaultSql "祝辞& lt;/include>   & lt;/select>      & lt;选择id=" findById " resultType="用户" parameterType=癷nt”比;   & lt;包括refid=" defaultSql "祝辞& lt;/include>   在id=# {uid}   & lt;/select>      & lt;/mapper>      

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

MyBatis的动态SQL语句实现