在访问数据库时,需要拼装SQL语句,在Mybatis中提供了对SQL的拼装,只有几个简单的元素:if
、test
、choose,when,otherwise
、where
、set
、trim
、foreach
、bind
。
用法都十分简单,总结以下基本的用法。
首先准备一实体类
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
可以定义多个对象。