ssm框架学习---mybatis中动态sql中的sql片段

本文介绍了如何在Mybatis框架中利用动态SQL进行sql片段的定义和使用,通过示例展示了if判断语句和列名查询的片段实现,旨在提升代码的复用性和开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上面一篇文章中,比如if判断的语句,可以抽取出来组成一个sql片段,方便程序员程序的开发,于是上述的if片段可以定义为如下的sql片段:

 <!--sql片段
      id:sql片段的唯一标识
      经验:一般基于单表地定义sql片段,这样可重用性比较高,sql片段中不要包含 where
      第一步:定义sql片段
      第二步:引用sql片段
    -->
    <sql id="select_student">
        <if test="student!=null">
            <if test="student.sname!=null and student.sname!=''">
                and s.sname=#{student.sname}
            </if>
            <if test="student.ssex!=null and student.ssex!=''">
                and s.ssex=#{student.ssex}
            </if>
        </if>
    </sql>
然后引用sql片段如下:

<!--使用if判断条件是否为空,进行查询sql语句的拼接-->
    <select id="selectStudentMul" parameterType="com.ajin.mybatis.model.StudentVo" resultType="com.ajin.mybatis.model.Student">
        <!-- select * from student where sname=#{student.sname} and ssex =#{student.ssex}
           一定要注意上面这句话是否时真的注释成功了,就是满足xml文件注释的格式,否则不小心会发现虽然注释了,但是最终运行会报错,并没有被注释掉
        -->
        select * from student s
           <!-- 使用where标签可以自动去掉第一个and 很方便-->
           <where>
               <!--
               <if test="student!=null">
                   <if test="student.sname!=null and student.sname!=''">
                            and s.sname=#{student.sname}
                   </if>
                   <if test="student.ssex!=null and student.ssex!=''">
                       and s.ssex=#{student.ssex}
                   </if>
               </if>
               -->
               <!-- 引用sql片段的id,引用其它文件中的需要加上namespace-->
               <include refid="select_student"></include>
               <!-- 在这里还要引用其它的sql片段-->
           </where>
    </select>
原来的if片段可以看到被注释掉了,换为下面include sql片段的方式:

上面演示了sql片段的一种方式,对于查询出来的列名称,我们也可以使用sql片段的方式如下:

  <sql id="Base_Column_List" >
    id, name, password
  </sql>
然后在查询中引用这三列:

  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select
    <include refid="Base_Column_List" />
    from userinfo
    where id = #{id,jdbcType=INTEGER}
  </select>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值