今天用iBatis时,总是弹出异常:
om.ibatis.sqlmap.client.SqlMapException: There is no statement named User.findById in this SqlMap.
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.getMappedStatement(SqlMapExecutorDelegate.java:293)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:557)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:541)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:83)
at com.leec.demo_iBatis.model.DAO.UserDAO.findById(UserDAO.java:65)
at com.leec.demo_iBatis.model.DAO.TestIbatis.main(TestIbatis.java:23)
检查了好久,终于把问题给解决了。网上有很多关于这个异常的解决办法,但是都不够全面,而且偏偏没有我所出现的情况,所以费了好长时间。不过,总算,弄懂了。
下面就列举一下可能会出现这个异常的原因吧:
1.在具体数据表的映射文件中,必须要定义namespace
2.TPhonesale.xml中 parameterClass="java.lang.String"或者"String"
resultClass="com.hanpeng.base.model.TPhonesale"
注意:parameterClass是要传的参数;resultClass是返回值类型。这两个值不对触发'无效的对象类型 异常'
3.sqlMapConfig.xml中一定要加入自己编写的数据表的映射文件.xml文件引用,否则ibatIS无法找到
<sqlMap resource="com.leec.demo_iBatis.model.POJO.User"/>
4.在dao层调用sql语句时,要用“别名.id名”,如查询我们可以使用queryForObject("namespace.id 名",object/parameterObject);
我的问题就是第四种情况造成的。