题目
在EmpMapper接口中增加如下方法:
//根据动态条件查询符合条件的员工
List<Emp> getEmpByCondition(条件类);
测试如下功能:
1)请查询 员工所在部门为2,工资在3000-5000的员工。
2)请查询 员工入职时间超过5年以上,工资在3000-5000的员工。
代码示例
EmpMapper.xml:
这里仅列出主要方法代码。
<!--这里用了两种大于、小于、大于等于、小于等于的写法,仅为练习-->
<select id="getEmpByCondition" parameterType="Map" resultMap="EmpMap">
select * from emp
<trim prefix="where" suffixOverrides="and">
<!--入职时间区间-->
<if test="beginHireDate!=null or endHireDate!=null">
<choose>
<!--开始入职时间和结束入职时间相同-->
<when test="beginHireDate==endHireDate">
hireDate=#{beginHireDate} and
</when>
<when test="beginHireDate!=endHireDate">
<![CDATA[ hireDate>=#{beginHireDate} and hireDate<=#{endHireDate} and]]>
</when>
<when test="beginHireDate!=null and endHireDate==null">
<![CDATA[ hireDate>=#{beginHireDate} and]]>
</when>
<when test="beginHireDate==null and endHireDate!=null">
<![CDATA[hireDate<=#{endHireDate} and]]>
</when>
</choose>
</if>
<!--工资区间-->
<if test="beginSalary!=null or endSalary!=null">
<!--开始工资和初始工资相同-->
<choose>
<when test="beginSalary==endSalary">
salary =#{beginSalary} and
</when>
<when test="beginSalary!=endSalary">
salary >=#{beginSalary} and salary <=#{endSalary} and
</when>
<when test="beginSalary!=null and endSalary==null">
salary >=#{beginSalary} and
</when>
<when test="beginSalary==null and endSalary!=null">
salary <=#{endSalary} and
</when>
</choose>
</if>
<!--入职时间年长-->
<if test="hirePerTime!=null and hirePerTimeCon!=null">
<choose>
<when test="hirePerTimeCon=='gt'">
TIMESTAMPDIFF(YEAR,hireDate,curdate())>#{hirePerTime} and
</when>
<when test="hirePerTimeCon=='ge'">
TIMESTAMPDIFF(YEAR,hireDate,curdate())>=#{hirePerTime} and
</when>
<when test="hirePerTimeCon=='lt'">
TIMESTAMPDIFF(YEAR,hireDate,curdate())<#{hirePerTime} and
</when>
<when test="hirePerTimeCon=='le'">
TIMESTAMPDIFF(YEAR,hireDate,curdate())<=#{hirePerTime} and
</when>
</choose>
</if>
<!--根据部门编号查询员工-->
<if test="deptnoList!=null">
deptno in
<foreach collection="list" item="deptno" open="(" separator="," close=")">
#{deptno}
</foreach>
</if>
</trim>
</select>
EmpController.java:
@RequestMapping(value="/getEmpByCondition", method= RequestMethod.POST)
@ResponseBody
public Map<String,Object> getEmpByCondition(@RequestParam(value="deptno",required = false) List deptno,
@RequestParam(value="beginHireDate",required = false) String beginHireDate,
@RequestParam(value="endHireDate",required = false) String endHireDate,
@RequestParam(value="hirePerTime",required = false) Integer hirePerTime,
@RequestParam(value="hirePerTimeCon",required = false) String hirePerTimeCon,
@RequestParam(value="beginSalary",required = false) Double beginSalary,
@RequestParam(value="endSalary",required = false) Double endSalary){
Map<String,Object> conditions = new HashMap<>();
Map<String,Object> returnMap = new HashMap<>();
try {
if(deptno!=null)
conditions.put("deptno",deptno);
if(beginHireDate!=null){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
conditions.put("beginHireDate",format.parse(beginHireDate));
}
if(endHireDate!=null){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
conditions.put("endHireDate",format.parse(endHireDate));
}
if(beginSalary!=null)
conditions.put("beginSalary",beginSalary);
if(endSalary!=null)
conditions.put("endSalary",endSalary);
//入职时间年长
if(hirePerTime!=null&&hirePerTimeCon!=null){
conditions.put("hirePerTime",hirePerTime);
conditions.put("hirePerTimeCon",hirePerTimeCon);
}
} catch (ParseException e) {
e.printStackTrace();
}
List<Employee> elist = employeeService.getEmpByCondition(conditions);
if(elist.size()!=0){
returnMap.put("message","findUserByDeptno successfully!");
returnMap.put("employeeList",elist);
}else{
returnMap.put("message","can not find user");
}
return returnMap;
}