MyBatis对MySql数据库操作动态sql语句整理

查询

  • if标签和where标签示例

/**
 * 非常简单的使用<if>标签来判断
 * <if>标签的test属性相当于判断条件;条件里面的 userName 代表传入参数的别名
 * <where> 标签就相当于添加了一个 where 1=1
 */
 <select id="selectUserByArray" resultMap="selectUserAssc">
        SELECT su.userName,su.userRole,sr.roleName FROM smbms_user su
        <where>
	        <if test="userName != null and userName != ''">
	            AND su.userName like concat('%',#{userName},'%')
	        </if>
	        <if test="userRole != null and userRole != ''">
	            AND su.userRole = #{userRole}
	        </if>
        </where>
 </select>
  • 使用foreach标签示例

/**
 * 属性介绍
 * collection属性取值  1.array数组  2.list集合  3.map的键
 * item为每次遍历的结果
 * open添加一个前缀
 * clase添加一个后缀
 * separator表示遍历结果之间的分隔符
 * <foreach>会智能的去掉一些多余的信息,比如最后一个遍历结果的逗号
 */
 <select id="selectUserByList" resultType="User">
        SELECT id,userCode,userName,userRole FROM smbms_user
        where userRole IN
        <foreach collection="lists" item="list" open="(" close=")" separator=",">
            #{list}
        </foreach>
 </select>

修改

  • 使用set标签示例

/**
 * <set>一眼看明白.
 * <if>根据条件,空的就不修改了;这里有一个问题,如果修改列都是空就会发生异常(一会在解决)
 */
 <update id="updateUserTest" parameterType="User">
        UPDATE smbms_user
        <set>
            <if test="userCode != null">
                userCode = #{userCode},
            </if>
            <if test="userName != null">
                userName = #{userName},
            </if>
            <if test="userPassword != null">
                userPassword = #{userPassword},
            </if>
            <if test="gender != null">
                gender = #{gender},
            </if>
            <if test="phone != null">
                phone = #{phone},
            </if>
            <if test="modifyDate != null">
                modifyDate = now(),
            </if>
        </set>
        where id = #{id}
 </update>
  • 使用trim标签示例 以及解决没有修改列的异常

/**
 * <trim>就比较厉害了,功能比较全面  下面先介绍属性
 * prefix 添加前缀
 * suffix 添加后缀
 * prefixOverrides 消除前缀
 * suffixOverrides 消除后缀
 * 示例中在trim内部的语句前面添加了一个set前缀-添加了一个where语句后缀
 * 以及删除了语句中最后一个并且是逗号的东东
 */
 <!--
 	因为如果没有修改列的话会发生异常,所以我们要求如果传入空值的话就给它赋值自己本身;
 	刚刚开始我是这样写的 
 	userCode = (SELECT userCode FROM smbms_user where id = #{id})
 	完全没有毛病,但是发生了异常,去网上搜了一下在MySQl数据库中需要一个中间表转折就好了;
 	userCode = (SELECT userCode FROM (SELECT userCode FROM smbms_user where id = #{id}) AS one)
 	one 为给表起的别名
 -->
  <update id="updateUserByTrim" parameterType="Integer">
        UPDATE smbms_user
        <trim prefix="set" suffix="where id = #{id}" suffixOverrides=",">
            <if test="userCode == null or userCode == ''">
                userCode = (SELECT userCode FROM (SELECT userCode FROM smbms_user where id = #{id}) AS one),
            </if>
            <if test="userCode != null and userCode != ''">
                userCode = #{userCode},
            </if>
            <if test="userName == null or userName == ''">
                userName = (SELECT userName FROM (SELECT userName FROM smbms_user where id = #{id}) AS two),
            </if>
            <if test="userName != null and userName != ''">
                userName = #{userName},
            </if>
        </trim>
  </update>

还有choose标签相当于if-else,不过里面加了一个没有满足条件就执行的代码块,非常简单可以去网上搜一下,我要溜了,要下课了.继续去对spring发呆

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值