SqlMap异常的处理
摘自:http://jun1986.iteye.com/blog/1150606
ibatIS需要注意的几个地方,否则很容易出错,避免低级错误的方法:
1.TPhonesale.xml中,必须要定义namespace
2.TPhonesale.xml中 parameterClass="java.lang.String"
resultClass="com.hanpeng.base.model.TPhonesale"
注意:parameterClass是要传的参数;resultClass是返回值类型。这两个值不对触发'无效的对象类型异常'
3.sql-map-config.xml中一定要加入自己编写的TPhonesale.xml引用,否则ibatIS无法找到
<sqlMapConfig>
<settings cacheModelsEnabled="true" enhancementEnabled="true"
lazyLoadingEnabled="false" useStatementNamespaces="true" />
<sqlMap resource="com/hanpeng/base/ibatis/COMMON_SqlMap.xml"/>
<sqlMap resource="com/hanpeng/base/ibatis/Area.xml"/>
<sqlMap resource="com/hanpeng/base/ibatis/Tconfig.xml"/>
<sqlMap resource="com/hanpeng/base/ibatis/TPhonesale.xml"/>
</sqlMapConfig>
4.实际中继承SqlMapClientDaoSupport,使用.queryForObject("namespace.id名",object/parameterObject);
- public class AreaDAOImpl extends SqlMapClientDaoSupport implements AreaDAO{
- public int queryCount(TArea area) {
- return (Integer)getSqlMapClientTemplate().queryForObject("TTArea.count", area);
- }
- public List queryPage(TArea area) {
- return getSqlMapClientTemplate().queryForList("TTArea.queryPage", area);
- }
- }
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
- <sqlMap namespace="TTArea">
- <select id="load" parameterClass="com.hanpeng.base.model.TArea" resultClass="com.hanpeng.base.model.TArea">
- SELECT
- CITY as city ,
- AREA_CODE as areaCode ,
- PROVINCE as province
- FROM T_AREA
- WHERE
- CITY=#city# </select>
- <select id="query" parameterClass="com.hanpeng.base.model.TArea" resultClass="com.hanpeng.base.model.TArea">
- SELECT
- CITY as city ,
- AREA_CODE as areaCode ,
- PROVINCE as province
- FROM T_AREA
- <dynamic prepend="WHERE">
- <isNotEmpty prepend=" AND " property="city">
- CITY = #city# </isNotEmpty>
- <isNotEmpty prepend=" AND " property="areaCode">
- AREA_CODE = #areaCode# </isNotEmpty>
- <isNotEmpty prepend=" AND " property="province">
- PROVINCE = #province# </isNotEmpty>
- </dynamic>
- </select>
- </sqlMap>
-----------------------------------------------------------------------------------------------------------------------------------------------------------
使用ibatIS,出现了下面的错误
There is no statement named User.login in this SqlMap,网上查询发现,xml中没有定义namespace
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
- <sqlMap namespace="TPhonesale">
- <select id="load" parameterClass="java.lang.String" resultClass="com.hanpeng.base.model.TPhonesale">
- SELECT
- SALE_NUM as saleNum ,
- ORDER_ID as orderId ,
- SUPPLY_ID as supplyId ,
- USER_ID as userId ,
- PHONE as phone ,
- PRICE as price ,
- COST as cost ,
- COMMISSION as commission ,
- STATE as state ,
- CREATE_DATE as createDate ,
- GET_DATE as getDate ,
- FINISH_DATE as finishDate ,
- TYPE_CODE as typeCode ,
- AREA_CODE as areaCode ,
- PRODUCT_NUM as productNum ,
- OPERATORS_CODE as operatorsCode ,
- CHANNEL_NUM as channelNum ,
- COLLECT as collect ,
- EMPLOYEE_NUM as employeeNum ,
- THIRD_CHANNEL_NUM as thirdChannelNum ,
- MAN_STATE as manState ,
- SEND_STATE as sendState ,
- CARD_NUM as cardNum ,
- CARD_PASS as cardPass ,
- PAY_MONEY as payMoney ,
- SUPPLY_FAILED as supplyFailed ,
- CS_NUM as csNum ,
- CS_DEAL_INFO as csDealInfo
- FROM T_PHONESALE WHERE SALE_NUM = #saleNum#
- </select>
- </sqlMap>