这边主要是mapper.xml的配置文件
1, if条件的简单使用:
<!-- 多个参数的形式,需要使用map来存储--> <!-- 只要是#{}这种形式的,都会以?形式替代,对应字符串形式,都会加上引号--> <!-- 只要是${}这种形式的,不会用?形式替代,传过来什么,就什么替代--> <select id="find" parameterType="map" resultType="User"> <!--name为空时,不加条件--> select * from t_user <if test="name!=null"> where ( username like #{name} or nickname like #{name}) </if> order by ${sort} ${order} limit #{pageOffset},#{pageSize} </select> <select id="count" parameterType="map" resultType="int"> select count(*) from t_user <if test="name!=null"> where ( username like #{name} or nickname like #{name}) </if> </select>
2, mybatis中没有else,如何做呢,使用choose
<select id="find" parameterType="map" resultType="User"> <!--name为空时,不加条件--> select * from t_user <if test="name!=null"> where ( username like #{name} or nickname like #{name}) </if> <if test="sort!=null"> order by ${sort} <!--order by 默认就是asc,因此这样就行--> <if test="order!=null"> ${order} </if> </if> limit #{pageOffset},#{pageSize} </select>
下面使用 choose,是为了让大家看choose的用法 其中when条件可以有多个 类似于java的switch case
<select id="find" parameterType="map" resultType="User"> <!--name为空时,不加条件--> select * from t_user <if test="name!=null"> where ( username like #{name} or nickname like #{name}) </if> <if test="sort!=null"> order by ${sort} <choose> <when test="order!=null"> ${order}</when> <otherwise>asc</otherwise> </choose> </if> limit #{pageOffset},#{pageSize} </select>
有多个条件要判断时,where怎么加
第一种方式: 额外加入为 where 1=1 解决
<select id="find" parameterType="map" resultType="User"> select * from t_user where 1=1 <if test="name!=null"> and ( username like #{name} or nickname like #{name}) </if> <if test="type!=null"> and type=#{type} </if> limit #{pageOffset},#{pageSize} </select>
第二种方式 :使用mybatis的 where标签
<select id="find" parameterType="map" resultType="User"> select * from t_user <where> <if test="name!=null"> <!--第一个条件不加and,后面几个都加--> ( username like #{name} or nickname like #{name}) </if> <if test="type!=null"> and type=#{type} </if> </where> limit #{pageOffset},#{pageSize} </select>