MyBatis动态SQL之增、删、改、查操作
MyBatis动态SQL之增删改查操作
概述MyBatis动态SQL支持
动态SQL之查询动态SQL之插入动态SQL之删除动态SQL之更新
概述
在实际的场景中,经常会遇到动态SQL的增、删、改、查问题,这里就必要说明何谓动态SQL,我们举一个实际的例子,比如,在一个web工程中,经常会有一个搜索框,并且在搜索之前通常会进行一个关键词的过滤,比如可以过滤的条件有:姓名、年龄等,这样的话当我们姓名和年龄都不选,则等价于下面的SQL语句
select * from students;
1
1
当我们将年龄选择为>20时,相当于下面的SQL语句:
select * from students where age>20;
1
1
当我们同时选择条件姓名为:张三,年龄>20,则相当于下面的SQL语句:
select * from students where age>20 and name='张三';
1
1
当我们有很多的条件时,此时就需要我们去组合这些条件,并动态的生成一个可执行的SQL语句,这样就不是一个简单的SQL语句能够解决问题,那么我们该怎么办呢?在MyBatis中同样是支持这种动态SQL的写法,具体见下面的内容。
MyBatis动态SQL支持
动态SQL之查询
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<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>
12345678910111213141516171819202122232425262728293031323334353637
12345678910111213141516171819202122232425262728293031323334353637
动态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>
12345678910111213141516171819202122232425262728293031323334353637383940
12345678910111213141516171819202122232425262728293031323334353637383940
动态SQL之删除
<delete id="deleteStudent">
delete from students where id in
<foreach collection="array" open="(" close=")" separator="," item="ids">
#{ids}
</foreach>
</delete>
12345678910111213
12345678910111213
动态SQL之更新
<update id="updateStudent" parameterType="map" >
update students
<set>
<if test="pname!=null">
name = #{pname},
</if>
<span class="hljs-tag"><<span class="hljs-title">if</span> <span class="hljs-attribute">test</span>=<span class="hljs-value">"psal!=null"</span>></span>
sal = #{psal},
<span class="hljs-tag"></<span class="hljs-title">if</span>></span>
<span class="hljs-tag"></<span class="hljs-title">set</span>></span>
where id = #{pid}
<span class="hljs-tag"></<span class="hljs-title">update</span>></span></code><ul class="pre-numbering" style="opacity: 0.149728;"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;" target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div><ul class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li></ul></pre></div>
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul></ul>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li></li>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>