• 动态sql


    通过mybatis提供的各种标签方法实现动态拼接sql语句。

    常用有<if>、<where>、<foreach>

    基于不同需求来进行使用

    需求:根据性别和名字查询用户

    按原始方法在mapper.xml中写sql语句:

    <select>
    select * from user where sex = #{sex} and username = #{username}
    </select>

    但如果在查询时没有给username给值,则可能导致默认username = null 而致使查询 出错。

    所以解决方案,是使用动态sql的if标签

    <select>
    select * from user 
    where 
    <if test="sex != null and sex != ' ' ">
    sex = #{sex} 
    </if>
    <if test="username != null and username != ' ' ">
    and username = #{username}
    </if>
    </select>

    如果没有给username给值,那么语句将变成

    select * from user where sex = #{sex}

    但这依然存在隐患,如果sex为空,运行是就会语法报错,多了一个and

    这时候就引入了where标签

    <!-- 根据条件查询用户 -->
    <select>
      select * from user
    <!-- where标签可以自动添加where,同时处理sql语句中第一个前and关键字 -->
        <where>
            <if test="sex != null">
                AND sex = #{sex}
            </if>
            <if test="username != null and username != ''">
                AND username = #{username}
            </if>
        </where>
    </select>

    Sql片段:

    当sql语句部分重复太多时,可以抽取出来放在sql标签中,

    <sql id="selector">
          select * from user
    </sql>
    
    
    <!-- 根据条件查询用户 -->
    <select>
        <include refid="selector"/>
    <!-- where标签可以自动添加where,同时处理sql语句中第一个前and关键字 -->
        <where>
            <if test="sex != null">
                AND sex = #{sex}
            </if>
            <if test="username != null and username != ''">
                AND username = #{username}
            </if>
        </where>
    </select>

     

    foreach标签

    向sql传递数组或List,mybatis使用foreach解析,如下:

    根据多个id查询用户信息

    查询sql:

    SELECT * FROM user WHERE id IN (1,10,24)

    在UserMapper.xml添加sql,如下:

    <!-- 根据ids查询用户 -->
    <select id="queryUserByIds" parameterType="queryVo" resultType="user">
        SELECT * FROM `user`
        <where>
            <!-- foreach标签,进行遍历 -->
            <!-- collection:遍历的集合,这里是QueryVo的ids属性 -->
            <!-- item:遍历的项目,可以随便写,,但是和后面的#{}里面要一致 -->
            <!-- open:在前面添加的sql片段 -->
            <!-- close:在结尾处添加的sql片段 -->
            <!-- separator:指定遍历的元素之间使用的分隔符 -->
            <foreach collection="ids" item="item" open="id IN (" close=")" separator=",">
                #{item}
            </foreach>
        </where>
    </select>              
  • 相关阅读:
    Java IO输入输出流 FileWriter 字符流
    Java IO输入输出流File 字节流
    Java List集合和Map集合的综合应用
    表单提交中的重复问题(表单令牌验证)
    php中const与define的区别
    阿里云中获取文件及目录列表的方法
    巧用php中的array_filter()函数去掉多维空值
    文件大小格式化函数
    UTC 通用格式时间 转换为 时间戳,并格式化为2017-01-01 12:00:00
    关于匿名函数的使用,购物车中计算销售税的应用
  • 原文地址:https://www.cnblogs.com/xk920/p/9816359.html
Copyright © 2020-2023  润新知