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>