本人新手 ,对象类中,id字段为自增字段,添加了有参构造方法,参数中没有id这个字段,因为是自增的,但是如果不添加的话,mapper中selectByPrimaryKey (id),就会报错,意思大概是搜索的是ID 是number类型的字段,会映射到构造方法中的第一个参数,第一个参数是string类型的
selectByPrimaryKey
这个方法是根据id
检索数据。你的id
是null
。那mysql怎么知道你你要检索什么??
id
自增只跟insert
相关。跟检索没关系。
谢谢回复, 我构造函数中没有写id字段,是想着在create的时候可以直接new ClassName(字段1,字段2…)这样插入数据,但是如果构造函数中不写id参数的话,查询就会报错,前端访问,后台Controller中是可以接受到id这个参数的,但再往下就报错了
###sql
<select id="findById" parameterType="int" resultType="com.example.demo.entity.Emp">
select * from emp where empno=#{value};
</select>
####Controller
@GetMapping("/emp/{id}")
@ResponseBody
public Emp findById(@PathVariable("id") Integer id){
Emp emp = empService.findById(id);
return emp;
}
###Service#
public Emp findById(Integer empno) {
Emp emp = empMapper.findById(empno);
return emp;
}
##mapper
public interface EmpMapper {
public Emp findById(Integer empno);
}
###entity
import java.util.Date;
public class Emp {
private Integer empno; //id
private String empname;
private Integer age;
private Date hiredate;
private Integer deptno;
private String job;
public Emp(String empname, Integer age, Date hiredate, Integer deptno, String job) {
this.empname = empname;
this.age = age;
this.hiredate = hiredate;
this.deptno = deptno;
this.job = job;
}
再给个空的构造函数。
可以了 ,感谢