MyBatis(动态SQL)

MyBatis是基于java的持久层框架,因为内部封装了JDBC,所以只需要关注SQL本身,无需关注驱动的加载和创建连接。

MyBatis通过XML或注解的方式将要执行的statement配置,通过java对象和statement中的sql动态参数进行映射生成最终执行的SQL语句,由MyBatis框架执行SQL,并将结果映射为java对象。

MyBatis框架采用了ORM思想,解决了实体类与数据库表之间的映射关系问题。JDBC进行封装,屏蔽了JDBC API底层访问,避免了与JDBC API打交道,从而实现持久化操作。 

动态SQL

什么是动态SQL?

是MyBatis的强大特性之一,同一个dao方法,根据不同的条件可以表示不同的sql语句。

解决了什么问题?

拼接sql时忘记添加一些空格或是没有去掉列表最后一个列名的逗号,都会使得SQL语句错误从而无法正常运行。

动态SQL的标签:

元素作用备注
if判断语句单条件分支

trim(where)

辅助元素用于处理SQL拼接问题
choose(when,otherwise)相当于java中的switch多条件分支
set辅助元素智能忽略最后的逗号
foreach循环语句批量插入,更新,查询是经常用到

 if+where标签:

<select id = "">
  SELECT * FROM user
    <where>
        <if test="id != null">
            id=#{id}
        </if>
        <if test="name != null">
            and name=#{name}
        </if>
    </where>
</select>

每满足一个条件都会与SQL语句拼接,where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

trim标签:

<select id="">
  SELECT * FROM user
    <trim prefix="where" suffix="order by" prefixOverrides="and | or" suffixOverrides=",">
        <if test="name != null">
            AND name=#{name}
        </if>
        <if test="address != null">
            AND address=#{address}
        </if>
    </trim>
</select>

prefix:前缀

suffix:后缀

prefixOverrides:去掉第一个and或者or

suffixOverrides:去掉最后一个逗号或其他的标记

choose(when,otherwise)标签:

<select id="">
   SELECT * FROM user
    <where>
        <choose>
            <when test="id != null">
                id=#{id}
            </when>
            <when test="name != null">
                AND name = #{name}
            </when>
            <otherwise>
                id=1
            </otherwise>
        </choose>
    </where>
</select>

相当于switch,在此标签中有一个when成立,其余中的内容不再执行,<otherwise>标签中的内容也不会执行。

set标签:

<update id="">
    UPDATE user
    <set>
        <if test="name != null">
            name=#{name}
        </if>
        <if test="address != null">
            address=#{address}
        </if>
    </set>
        WHERE id=#{id}
</update>

智能忽略最后的逗号。

foreach标签:

<select id="">
    SELECT * FROM user
    WHERE id IN
    <foreach collection="ids" item="user_id" separator="," open="(" close=")">
        #{user_id}
    </foreach>
</select>

通常在构建IN条件语句时使用,对传入的集合或数组进行遍历以及动态的SQL组装,

collection:要遍历的集合元素,注意编写时不要编写#{}。

item:遍历集合的每个元素,生成的变量名。

separator:结束部分。

open:语句的开始部分。

close:技术部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值