使用iBatis框架问题,使用varchar类型的数据就无法进行查询,而number就可以,不知道为啥。求大神解答!!!附上代码:
carman.xml<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="CarManger">
  <resultMap id="result" class="com.estock.database.carmanger.CarManEO">
    <result property="carId" column="CAR_ID"/>
<result property="carName" column="CAR_NAME"/>
<result property="carPail" column="CAR_PAIL"/>
<result property="carPaiz" column="CAR_PAIZ"/>
<result property="carOil" column="CAR_OIL"/>
  </resultMap>
  
  <resultMap id="resultTO" class="com.estock.database.carmanger.CarManTO" extends="result">
    <result property="useUserId" column="USE_USER_ID"/>
<result property="useBtime" column="USE_BTIME"/>
<result property="useEtime" column="USE_ETIME"/>

  </resultMap>
  
  <select id="CarManger.selectCarByUser" parameterClass="java.util.Map" resultMap="resultTO">
select *
from ms_car mc,
     ms_use mu 
where mc.car_id = mu.use_car_id
<isNotNull prepend="and" property="carId">
mc.car_id = #carId:VARCHAR#
</isNotNull>
<isNotNull prepend="and" property="useEtime">
mu.use_etime = #useEtime:VARCHAR#
</isNotNull>
<isNotNull prepend="and" property="carPail">
 mc.car_pail=#carPail:VARCHAR#
</isNotNull>

</select>


<select id="carmanger.all" resultMap="resultTO">
select * from ms_car mcar,ms_use muse
where mcar.car_id = muse.use_car_id
</select></sqlMap>carmandao
package com.estock.database.carmanger;import java.util.List;public interface CarManDAO {


public List<CarManTO> selectCarByUser(String carId,String useEtime,String carPail);

public List selectCarByUserSelf(String KeyType,String KeyValue,String Btime,String Pail,String UserId);

public List selectAll();}
carmandaoimpl
package com.estock.database.carmanger;import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;public class CarManDAOImpl extends SqlMapClientDaoSupport implements CarManDAO { public List<CarManTO> selectCarByUser(String carId,String useEtime,String carPail) {
Map<String,Object> param=new HashMap<String,Object>();
param.put("carId",carId);
System.out.println(carId);
param.put("useEtime",useEtime);
param.put("carPail",carPail);
return getSqlMapClientTemplate().queryForList("CarManger.selectCarByUser",param);
} public List selectCarByUserSelf(String KeyType, String KeyValue,
String Btime, String Pail, String UserId) {
Map<String,Object> param=new HashMap<String,Object>();
param.put("KeyType", KeyType);
param.put("KeyValue", KeyValue);
param.put("Btime", Btime);
param.put("Pail", Pail);
param.put("UserId", UserId);
return getSqlMapClientTemplate().queryForList("carmanger.selectCarByUserSelf");
} public List selectAll() {
return getSqlMapClientTemplate().queryForList("carmanger.all");
}}速来大神啊~~

解决方案 »

  1.   

    ibatis查询方法SQL参数是 namespace.id  LZ的namespace 是 CarManger
      

  2.   

    好久没用iBatis了 是varchar2 ?哈哈
      

  3.   

    问题是我在查询的时候,如果参数为int,可以出结果,如果参数为String,List里面查不出结果,显示为0,而实际有2条。如果将参数,比如那个selectCarByUser 的参数设为null,null,null也可以出结果。
      

  4.   

    create table MS_CAR
    (
      CAR_ID   CHAR(10) not null,
      CAR_NAME CHAR(50),
      CAR_PAIL CHAR(50),
      CAR_PAIZ CHAR(50),
      CAR_OIL  CHAR(50)
    )
      

  5.   

    你在数据库里查查看能查出不,要不看看日志里面的sql对不对
      

  6.   

    真无语,你知道数据库char类型是什么东西吗?char是定长的,当你值长度是20时,但你数据库字段是50,它会自动补足到50,原来值是123,补加的值可能是123456,当然没这条记录了。都改为varchar类型
      

  7.   

    还是不行啊。改的varchar2(50),但还是查不出,对了,从DAOIMPL的 Map<String,Object> param=new HashMap<String,Object>();
            param.put("carId",carId);
            System.out.println(carId);
    这段里打印出来是有数据的。
      

  8.   

    都用泛型了,就指定类型。
    表是char,配置文件又是
     <isNotNull prepend="and" property="carId">
                    mc.car_id = #carId:VARCHAR#
                </isNotNull>真的……
      

  9.   

    嗯。问题貌似被解决了,还在 测试中,是因为char和varchar,但是varchar(10)可以,varchar(255)就不可以还是先谢谢这位大神了~给分~~~
      

  10.   

    长度,类型对orm框架很重要。