动态sql语句
1、查询表
2、查询接口
public List<User> selectUserByUsernameAndSex(User user);
piblic void updateById(User user);
public List<User> selectUserByChoose(User user);
3、if标签
<select id="selectUserByUsernameAndSex" resultType="user" >
select * from user where 1=1
<if test="username != null">
and username=#{username}
</if>
<if test="sex!= null">
and sex=#{sex}
</if>
</select>
4、if+where
<select id="selectUserByUsernameAndSex" resultType="user" parameterType="com.ys.po.User">
select * from user
<where>
<if test="username != null">
and username=#{username}
</if>
<if test="sex!= null">
and sex=#{sex}
</if>
</where>
</select>
“where”标签如果它包含的标签中有返回值的话(把满足if条件的内容,拼接起来返回),它就插入一个‘where’。此外,如果标签返回的内容是以and 或 or 开头的,则它会把and、or 剔除掉。
5、set+if
<update id="updateUserById" parameterType="com.ys.po.User">
update user
<set>
id=#{id}, //至少要更新一个字段,不然sql会报错
<if test="username != null and username != ''">
u.username = #{username},
</if>
<if test="sex != null and sex != ''">
u.sex = #{sex},
</if>
</set>
where id=#{id}
</update>
“set” 标签的作用是把,返回内容尾部的逗号去掉,所以每个if标签下面的语句,末尾都要写逗号
6、trim语句
trim 是用来替代wher和set的;
trim有4个字段:
prefix:前缀(作用:前缀加什么)
prefixoverride:前缀重写(去掉第一个and或者是or)
suffix:后缀 (作用:在后面加什么)
suffixoverride:后缀重写(去掉最后一个逗号)
6.1、用trim改写上面的if+where语句
<select id="selectUserByUsernameAndSex" resultType="user" parameterType="com.ys.po.User">
select * from user
<trim prefix="where" prefixOverrides="and | or">
<if test="username != null">
and username=#{username}
</if>
<if test="sex != null">
and sex=#{sex}
</if>
</trim>
</select>
6.2、用 trim 改写上面第三点的 if+set 语句
在这里插入<update id="updateUserById" parameterType="com.ys.po.User">
update user
<trim prefix="set" suffixOverrides=",">
id=#{id}, //至少要更新一个字段,不然sql会报错
<if test="username != null and username != ''">
u.username = #{username},
</if>
<if test="sex != null and sex != ''">
u.sex = #{sex},
</if>
</trim>
where id=#{id}
</update>代码片
7、choose(Java中有switch, mybatis有choose)
<select id="selectUserByChoose" resultType="com.ys.po.User" parameterType="com.ys.po.User">
select * from user
<where>
<choose>
<when test="id !='' and id != null">
id=#{id}
</when>
<when test="username !='' and username != null">
and username=#{username}
</when>
<otherwise>
and sex=#{sex}
</otherwise>
</choose>
</where>
</select>
也就是说,这里我们有三个条件,id,username,sex,只能选择一个作为查询条件
如果 id 不为空,那么查询语句为:select * from user where id=?
如果 id 为空,那么看username 是否为空,如果不为空,那么语句为 select * from user where username=?;
如果 username 为空,那么查询语句为 select * from user where sex=?
8、sql标签和include标签(为了复用sql语句)
<sql id=" sqlBase">
select id,name, num
</sql>
<select id="get" resulutMap="user">
<include refid="get" />
from user where id=1
</select>
<sql>标签定义一个Sql的通用部分
<include>标签是把通用部分拼接进去