条件查询
姓名:进行模糊查询
性别:进行精准匹配
入职时间:要求进行范围查询
并且要求根据最后修改时间进行倒序排序
select*from emp where name like '%张' and entrydate between '2010-01-01' and '2020-01-01' order by update_time desc;
方式一:
@select("select *from emp where name like '%${name}%' and gender =#{gender} and entrydate between #{begin} and #{end} order by update_time desc")
public List<Emp> list
2.1 XML映射文件
使用Mybatis的注解,主要是完成一些简单的增删改查功能;如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL写在XML配置文件中;
SQL映射配置文件中的是需要符合一定的规范的:
1.XMl映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
2.XML映射文件的namespace属性为Mapper接口全限定名一致;
3.XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持参数类型和返回值类型一致
xml映射文件模板
<?xml version=”1.0“ encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTO Mapper 3.0//EN"
"http: //mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="接口全限定名”>
<select id="接口方法名 resultType=" 返回值类型">
<!--sql语句-->
</select>
</mapper>
<select>标签的resultType属性,指的是查询返回的单条记录所封装的类型
2.2 if
用于判断条件是否成立,使用test属性进行条件判断,如果条件为true,则拼接sql;
条件查询
接下来,我们就通过<if>标签来改造上述的条件查询
EmpMapper接口方法
public List<Emp> list(String name,Short gender,LocalDate begin, LocalDate end);
EmpMapper.xml
<select id="list" resultType="com.itheima.pojo.Emp">
select id,username,password , name ,gender ,image,job,entrydate,dept_id,create_time,update_time from emp
where
<if test="name !=null">
name like concat('%',#{name},'%')
</if>
<if test="gender !=null">
and gender =#{gender}
</if>
<if test="begin !=null and end !=null">
and entrydate between #{begin} and #{end}
</if>
order by update_time desc
</select>
然后我们就可以进行测试了,我们可以传递不同的条件,然后通过日志查看组装执行的SQL语句;
进行测试之后我们发现,上述的SQL语句的配置是有问题的
A。如果,我们没有传递第一个参数,此时输出的SQL语句中,我们会看到多了一个where之后多了一个and