记录一下今天做项目出现的问题以及解决方案。
一.项目的部分代码
- pojo层
public class Attendance {
private Integer id;
private Staff staff;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT-8",pattern = "yyyy-MM-dd")
private Date adate;
private String type;
private String remarks;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Staff getStaff() {
return staff;
}
public void setStaff(Staff staff) {
this.staff = staff;
}
public Date getAdate() {
return adate;
}
public void setAdate(Date adate) {
this.adate = adate;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
@Override
public String toString() {
return "Attendance{" +
"id=" + id +
", staff=" + staff +
", adate=" + adate +
", type='" + type + '\'' +
", remarks='" + remarks + '\'' +
'}';
}
- dao层
public interface AttendanceDao {
@Insert(value = "insert into attendance(id,sid,adate,type,remarks) values(default,#{sid},#{adate},#{type},#{remarks})")
int insAttendance(@Param("sid")Integer sid,@Param("attendance")Attendance attendance);
}
- service和serviceImpl层略(因为都差不多)
- controller层
public class AttendanceController {
@Autowired
private AttendanceService attendanceService;
@RequestMapping(value = "/attendanceAdd")
public ModelAndView attendanceAdd(ModelAndView mv, Attendance attendance,@RequestParam("attdate") String attdate,
String name,Integer did){
Staff staff = attendanceService.selByNameDid(name, did);
if(staff!=null){
attendance.setAdate(Date.valueOf(attdate));
attendanceService.insAttendance(staff.getId(),attendance);
mv.setViewName("redirect:/attendance/attendance-list/select");
}else{
mv.addObject("msg","alert('该用户不存在,请检查输入的姓名和部门名称是否正确!')");
mv.setViewName("/right");
}
return mv;
}
二.解决过程
- 起初看了一些csdn相关的文章,因为传递的参数较多所以出现这种异常。解决方案有两种。
第一种使用@Param参数,
第二种用#{0},#{1}。
以上方法第一种我就是使用注解来让mybatis识别的,但还是出现这种错误!
第二种更不可能,我传递的有对象肯定不能以这种方式。
还有一种说法@Param注解导包问题,导入的是mybatis的而不是spring下的,在这里我导入的是org.apache.ibatis.annotations.Param也没有问题。
这就很奇怪了!!! - 然后就看到了这篇文章,算是已有一些启发https://blog.youkuaiyun.com/xu1227233860/article/details/77387088
因为我想我这里也就额外添加了一个参数,为什么不把它放在同一个实体类中呢?
在Attendance实体类中新加入一个私有属性sid,加上get/set方法,而dao层接口中自然也就变成了int insAttendance(Attendance attendance); ,其他层的代码相继稍微修改一下。
结果一试,插入数据成功了!到现在我还是实在想不明白为什么添加注解也无法插入成功,有机会一定要问问大佬。