经常使用mybatis或者跟数据库打交道的都老爱语句这个异常,那么就总结一下解决方案,省得我下次又去找。
例如:
public interface StudentDao
int selectById(int id)
int insert(Student stu)
}
这两种是正常的方式,
不会出现什么问题,mappper中的对应取值都是用 #{} 这种方式;
例如:
insert into inbox_template (name,age)
values (#{name},#{age})
注意:上面如果是student对象作为参数,那么mapper中不能少了parameterType,否则会找不对应的属性.
例如
public interface StudentDao {
int selectBySelective(int id,String name)
}
解决办法:
在每个参数前加上@param注解,括号中注解的名称就是mapper中映射的值.
如下:
public interface StudentDao {
int selectBySelective(@Param("id")int id,@Param("name")String name);
}
至于mapper中,还是那样写,可以使用${}或者#{}任意一种方式:
如下:
public interface StudentDao {
int selectBySelective(@Param("page")int page,@Param("stu")Student stu);
}
mapper:
如下:
建一个page类:
public class Page {
private int pageNo;
private int pageSize;
private Object obj;
public Page(int page,int pageSize,Object obj){
this.pageNo=page;
this.pageSize=pageSize;
this.obj=obj;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
}
在处理时直接new page对象中自己定义好的构造函数,然后直接把page作为参数传到dao:
Student stu = new Student();
stu.setName("aa");
stu.setId(1);
stu.setAge(12);
Page page = new Page(1, 10,stu);
dao:
public interface StudentDao {
int update(Page page);
}
mapper:
update inbox_template
set
name = #{obj.name},
age = #{obj.age}
where id = #{obj.id}
例子: