Mybatis中动态SQL的用法

在访问数据库时,需要拼装SQL语句,在Mybatis中提供了对SQL的拼装,只有几个简单的元素:iftestchoose,when,otherwisewheresettrimforeachbind
用法都十分简单,总结以下基本的用法。

首先准备一实体类


public class User {

    private  int id;

    private String name;

    private int sex;

    //省略掉构造方法和setter、getter方法
}

if、test元素

if 元素是最常用的判断语句,相当于java中的if语句。
test元素用于条件判断的语句中,它的作用相当于判断真假。 常常与if联合使用。

以按姓名查询的例子来说明if和test的用法

   <select id="getUser" parameterType="string" resultType="com.yao.beans.User">
        select  * from  user where 1=1
        <if test="name != null and name != ''">
            and name = #{name}
        </if>

   </select>

choose、when、otherwose元素

choose、when、otherwose是一个组合的元素,相当于java语句中的switch…case…default语句。

以按对象来查询的例子来说明choose、when、otherwose的用法

   <select id="getUserByChose" parameterType="com.yao.beans.User" resultType="com.yao.beans.User">
        select * from user where 1=1
        <choose>
            <when test="id !=null and id != ''">
                and id =#{id}
            </when>
            <when test=" name != null and name != ''">
                and name = #{name}
            </when>
            <otherwise>

            </otherwise>
        </choose>
    </select>

where、set元素

在前面的元素中查询时要加入1=1否则可能会出现语法错误,Mybatis提供了where标签来处理SQL语句

以按姓名查询为例子来说明where的用法

   <select id="getUserByWhere" parameterType="string" resultType="com.yao.beans.User">

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

where元素会判断SQL语句是不是要删去and或者or

set元素用于更新操作。

  <update id="updateBySet" parameterType="com.yao.beans.User">
        update user
        <set>
            <if test="name != null and name != ''">
                name = #{name},
            </if>

        </set>
        where id = #{id}
    </update>

set元素在遇到,时会自动判断是不是在最后,需不需要删去。

trim元素

有时候需要处理一些特殊的SQL语句,trim可以帮助处理一些不规则的语法。trim元素有点类似于replace。
trim有四个属性
- prefix:前缀覆盖并增加其内容。也就是给中的sql语句加上前缀;
- suffix:后缀覆盖并增加其内容。给包裹的sql语句加上后缀;
- prefixOverrides:前缀判断的条件。取消指定的前缀,如where;
- suffixOverrides:后缀判断的条件。取消指定的后缀,如and | or.,逗号等。

以插入一条数据来说明trim的用法

  <insert id="insertByTrim" parameterType="com.yao.beans.User">
        insert user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="name != null and name !=''">
                name,
            </if>
            <if test="sex != null and sex != ''">
                sex,
            </if>
        </trim>

        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="name != null and name !=''">
                #{name},
            </if>
            <if test="sex != null and sex != ''">
                #{sex},
            </if>
        </trim>

    </insert>

trim处理完后相当于insert user (name ,sex) valuse( #{name},#{sex} )

foreach元素

foreach元素是一个循环语句,它的作用是遍历集合,而且能够很好的支持数组和List、Set接口的集合。

以获取sex为1和0的例子来说明foreach的用法

   <select id="findUserByForeach" resultType="com.yao.beans.User">
        select * from user where sex in
        <foreach collection="sexList" item="sex" index="index" open="(" separator="," close=")">
            #{sex}
        </foreach>
    </select>
  • collection 是传递进来的参数名称,可以是数组、List、Set等集合
  • item 当前元素
  • index 当前元素在集合的位置下标
  • open 以什么符号开始
  • separator 元素之间的分隔符
  • close 以什么时候结束

bind元素

bind可以通过OGNL表达式去自定义一个上下文变量方便使用。

比如进行模糊查询

    <select id="findUserByBind" resultType="com.yao.beans.User">

        <bind name="patten" value="'%'+ _parameter+'%'"/>
        select * from user where name like #{patten}
    </select>

_parameter是传进来的参数,跟通配符连接后赋值给patten。
bind可以定义多个对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值