MyBatis动态SQL之增、删、改、查操作

MyBatis动态SQL之增、删、改、查操作


      • MyBatis动态SQL之增删改查操作
        • 概述
        • MyBatis动态SQL支持
          • 动态SQL之查询
          • 动态SQL之插入
          • 动态SQL之删除
          • 动态SQL之更新


概述


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

select * from students;   -- 不去限制姓名和年龄

当我们将年龄选择为>20时,相当于下面的SQL语句:

select * from students where age>20;

当我们同时选择条件姓名为:张三,年龄>20,则相当于下面的SQL语句:

 select * from students where age>20 and name='张三';

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

MyBatis动态SQL支持


动态SQL之查询




<mapper namespace="studentNameSpace">

    
    <resultMap type="com.jpzhutech.entity.Student" id="studentMap">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="sal" column="sal"/>
    resultMap>

    
    <select id="findAll" parameterType="map" resultMap="studentMap">
        select id , name , sal
        from students
        <where>
            <if test="pid!=null" >
                and id = #{pid}    
            if>

            <if test="pname!=null" >
                and name = #{pname}
            if>

            <if test="psal!=null" >
                and sal = #{psal}
            if>
        where>
    select>
mapper>
动态SQL之插入


    
    <sql id="key">
      <trim suffixOverrides=",">
        <if test="id!=null">
            id,
        if>

        <if test="name!=null">
            name,
        if>

        <if test="sal!=null">
            sal,
        if>
      trim>
    sql>


    
    <sql id="value">
      <trim suffixOverrides=",">
        <if test="id!=null">
            #{id},
        if>

        <if test="name!=null">
            #{name},
        if>

        <if test="sal!=null">
            #{sal},
        if>
      trim>
    sql>

    
    <insert id="insertStudent" parameterType="com.jpzhutech.entity.Student">
        insert into students(<include refid="key"/>) values(<include refid="value"/>);
    insert>
动态SQL之删除

 
    <delete id="deleteStudent">
        delete from students where id in
        
        <foreach collection="array" open="(" close=")" separator="," item="ids">
            #{ids}
        foreach>
    delete>
动态SQL之更新

 
    <update id="updateStudent" parameterType="map" >
        update students
        <set>
            <if test="pname!=null">
                name = #{pname},
            if>

            <if test="psal!=null">
                sal = #{psal},
            if>
        set>
        where id = #{pid}
    update>

你可能感兴趣的:(Database,Java)