SSM框架之Mybatis动态sql配置

SSM框架之Mybatis框架的动态sql配置

Mybatis官方中文文档

http://www.mybatis.org/mybatis-3/zh/index.html

在实际的场景中,经常会遇到动态SQL的增、删、改、查问题,这里就必要说明何谓动态SQL,我们举一个实际的例子,比如,在一个web工程中,经常会有一个搜索框,并且在搜索之前通常会进行一个关键词的过滤,比如可以过滤的条件有:姓名、年龄等,这样的话当我们姓名和年龄都不选,则等价于下面的SQL语句

select * from students; – 不去限制姓名和年龄
1
当我们将年龄选择为>20时,相当于下面的SQL语句:

select * from students where age>20;
1
当我们同时选择条件姓名为:张三,年龄>20,则相当于下面的SQL语句:

select * from students where age>20 and name=’张三’;
1
当我们有很多的条件时,此时就需要我们去组合这些条件,并动态的生成一个可执行的SQL语句,这样就不是一个简单的SQL语句能够解决问题,那么我们该怎么办呢?在MyBatis中同样是支持这种动态SQL的写法,具体见下面的内容。

MyBatis动态SQL支持

动态SQL之查询




<mapper namespace="com.yztc.yx.pojo.Emp">

    

    
    
    <select id="findEmpBySalNameJob" parameterType="com.yztc.yx.pojo.EmpCondition"
        resultType="com.yztc.yx.pojo.Emp">
        
        select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp
        where
        ename like '%${kw}%' and job=#{job} and sal<=#{hisal} and
        sal>=#{losal}
    select>
mapper>

动态SQL之插入


    
    <sql id="key">
        
        <trim suffixOverrides=",">
            <if test="ename!=null">
                ename,
            if>
            <if test="job!=null">
                job,
            if>
            <if test="mgr!=null">
                mgr,
            if>
            <if test="hiredate!=null">
                hiredate,
            if>
            <if test="sal!=null">
                sal,
            if>
            <if test="comm!=null">
                comm,
            if>
            <if test="deptno!=null">
                deptno,
            if>
        trim>
    sql>
    <sql id="value">
        <trim suffixOverrides=",">
            <if test="ename!=null">
                #{ename},
            if>
            <if test="job!=null">
                #{job},
            if>
            <if test="mgr!=null">
                #{mgr},
            if>
            <if test="hiredate!=null">
                #{hiredate},
            if>
            <if test="sal!=null">
                #{sal},
            if>
            <if test="comm!=null">
                #{comm},
            if>
            <if test="deptno!=null">
                #{deptno},
            if>
        trim>
    sql>
    <insert id="add" parameterType="com.yztc.yx.pojo.Emp">
        insert into emp(
        <include refid="key" />
        ) values (
        <include refid="value" />
        )
    insert>

动态SQL之删除


    <delete id="delete" parameterType="int[]">
        delete from emp where empno in
        
        <foreach collection="array" item="arrs" open="(" separator=","
            close=")">#{arrs}foreach>
    delete>

动态SQL之更新

    
    <update id="update" parameterType="com.yztc.yx.pojo.Emp">
        update emp
        <set>
            <if test="ename">ename=#{ename},if>
            <if test="job">job=#{job},if>
            <if test="mgr">mgr=#{mgr},if>
            <if test="hiredate">hiredate=#{hiredate},if>
            <if test="sal">sal=#{sal},if>
            <if test="comm">comm=#{comm},if>
            <if test="deptno">deptno=#{deptno},if>
        set>
        where empno=#{empno}

        
        
    update>

动态SQL之条件不确定删选


    <select id="findEmpChanges" parameterType="com.yztc.yx.pojo.EmpCondition"
        resultType="com.yztc.yx.pojo.Emp">
        select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp
        <where>
            <if test="kw!=null">and ename like '%${kw}%'if>
            <if test="job!=null">and job=#{job}if>
            <if test="losal!=null&&hisal!=null">and sal between #{losal} and #{hisal} if>
        where>

        
        
    select>

你可能感兴趣的:(javaee)