<selectid="queryByidAndname"resultMap="pMap"parameterType="com.offcn.pojo.Person">
select * from person
<where><iftest="pid!=null and pid!=0">
AND pid=#{pid}
</if><iftest="pname!=null">
AND pname=#{pname}
</if></where></select>
书写测试代码:
@TestpublicvoidtestqueryByidAndname()throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build =newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession();
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person =newPerson();
person.setPname("lisi");
List<Person> people = mapper.queryByidAndname(person);
people.forEach(a-> System.out.println(a));
sqlSession.close();}
总结
标签
作用
< where>
类似where 1=1
< if>
判断查询条件的字段值是否存在,如果没有则不拼接
and +条件
在if标签里面记得要写and,不能省略
2.< choose >标签的使用
使用场景:如果有pid则根据pid查询,如果没有pid则根据pname查询,如果都没有则查询全部
直接书写配置文件:
<selectid="queryByidAndname1"resultMap="pMap"parameterType="com.offcn.pojo.Person">
select * from person
<where><choose><whentest="pid!=0">
and pid=#{pid}
</when><whentest="pname!=null">
and pname=#{pname}
</when><otherwise>
and 1=1
</otherwise></choose></where></select>
测试代码一样,只是这里调用的方法不一样了:
@TestpublicvoidtestqueryByidAndname1()throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build =newSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession();
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person =newPerson();
person.setPid(9);
person.setPname("lisi");
List<Person> people = mapper.queryByidAndname1(person);
people.forEach(a-> System.out.println(a));
sqlSession.close();}
3.< set >标签的使用
使用场景:对数据进行更新,如果属性有值就更新,否则不更新.
定义接口方法:
voidupdatePerson(Person person);
书写映射文件代码:
<selectid="updatePerson"resultMap="pMap"parameterType="com.offcn.pojo.Person">
update person
<set><iftest="pname!=null">pname=#{pname}</if><iftest="adress!=null">adress=#{adress}</if></set>
where pid=#{pid}
</select>
<selectid="queryByintarr"resultMap="pMap"parameterType="list">
select * from person
<where><foreachcollection="collection"open="pid in ("close=")"item="pid"separator=",">
#{pid}
</foreach></where></select>
<selectid="updatePerson1"resultMap="pMap"parameterType="com.offcn.pojo.Person">
update person
<trimprefix="set"suffixOverrides=","><iftest="pname!=null">pname=#{pname},</if><iftest="adress!=null">adress=#{adress},</if></trim>
where pid=#{pid}
</select>
重写where标签:
<selectid="updatePerson2"resultMap="pMap"parameterType="com.offcn.pojo.Person">
select * from person
<trimprefix="where"suffixOverrides=" and|or "><iftest="pid!=0 and pid!=null">and pname=#{pname}</if><iftest="adress!=null"> and adress=#{adress},</if></trim></select>