mybatis报错:HTTP Status 500 - Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'cg_id' in 'class com.st.eleventh.tools.Page'
经过排错发现是在mapper.xml那里写错了。
分析:出现这个错误是在mapper.xml中的<if test="cg_id !=null and cg_id!='' ">验证的时候发生的,并不是and cg_id=#{cg_id}时发生的
<select id="resultSets" resultMap="BaseResultMap"
parameterType="java.util.Map">
select
<include refid="Base_Column_List" />
from t_space
<where>
<if test="cg_id !=null and cg_id!='' ">
and cg_id=#{cg_id}
</if>
</where>
</select>
解决方法:由于我使用了一个分页插件:它对分页的数据进行了封装
/**
* 对分页的基本数据进行一个简单的封装
*/
public class Page<T> {
private int pageNo = 1;//页码,默认是第一页
private int pageSize =18;//每页显示的记录数,默认是20
private int totalRecord;//总记录数
private int totalPage;//总页数
private List<T> results;//对应的当前页记录
private Map<String, Object> params = new HashMap<String, Object>();//其他的参数我们把它分装成一个Map对象
控制器:
@RequestMapping("/lists")
public String list(HttpServletRequest req,Page<Space>page,String cg_id) {
if(page==null) {
page=new Page<Space>();
}
page.getParams().put("cg_id", cg_id);
req.getServletContext().setAttribute("parkSet", parkingService.selectAll());
req.setAttribute("cg_id", cg_id);
req.setAttribute("resultSet", spaceService.resultSets(page));
return "park/listSpace";
}
所以在mapper.xml中要这样写:
<select id="resultSets" resultMap="BaseResultMap"
parameterType="java.util.Map">
select
<include refid="Base_Column_List" />
from t_space
<where>
<if test="params.cg_id !=null and params.cg_id!='' ">
and cg_id=#{params.cg_id}
</if>
</where>
</select>
最后再进行测试,没有错误。