本人刚刚自学了Ibatis,我现在需要查询一个两个时间之间的数据,使用的是Map传参数,但一直查不出数据,也不报错,请高手指点下,不使用map传参数也行,只要有解决的方法。谢谢。 
  数据库中中表t_work有一个时间的字段,对应的Bean中也有一个时间类型的属性,和表的时间类型字段相对应。 
我把我的大概代码贴出来 
 哪位可以看出我问出在哪里吗?程序不报错,但返回的list一直是0,或者哪位有相关的demo发一个到我邮箱吧:[email protected],谢谢。 
Java代码 
 public class WorkBean {   
  
private int     work_id;   
private String  workname;   
private String  worktype;   
private Date    worktime;   
private Float   workmoney;   
private int     workset;   
private int     workproof;   
private String  worktext;   
private String  workexpand1;   
private String  workexpand2;   
private int     workexpand3;   
private int     workexpand4;   
       //get set方法   
  }    public class WorkBean {

private int  work_id;
private String  workname;
private String  worktype;
private Date    worktime;
private Float workmoney;
private int  workset;
private int  workproof;
private String  worktext;
private String  workexpand1;
private String  workexpand2;
private int  workexpand3;
private int  workexpand4;
        //get set方法
   }dao类 
Java代码 
public List<WorkBean> findWork(Map hashMap){   
    List<WorkBean> workList = new ArrayList();   
    try{   
        DaoUtil.getConnection().queryForList("findWork", hashMap);   
    }catch(Exception ex){   
        ex.printStackTrace();   
    }   
    return workList;   
    }   
  public static void main(String[] args) {   
    WorkDao dao = new WorkDao();   
    Map<String,Object> wrokMap = new HashMap();   
    wrokMap.put("startTime", "2009-08-30 16:38:32.0");   
    wrokMap.put("endTime", "2009-08-30 16:39:08.0");   
    wrokMap.put("userName", "admin");   
    List<WorkBean> workList = new ArrayList();   
    workList = dao.findWork(wrokMap);   
    System.out.println(workList.size()+"--------");   
}  public List<WorkBean> findWork(Map hashMap){
List<WorkBean> workList = new ArrayList();
try{
DaoUtil.getConnection().queryForList("findWork", hashMap);
}catch(Exception ex){
ex.printStackTrace();
}
return workList;
}
  public static void main(String[] args) {
WorkDao dao = new WorkDao();
Map<String,Object> wrokMap = new HashMap();
wrokMap.put("startTime", "2009-08-30 16:38:32.0");
wrokMap.put("endTime", "2009-08-30 16:39:08.0");
wrokMap.put("userName", "admin");
List<WorkBean> workList = new ArrayList();
workList = dao.findWork(wrokMap);
System.out.println(workList.size()+"--------");
}
对应的映射文件 
Xml代码 
<?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>  
        <typeAlias alias="work" type="com.house.bean.WorkBean"/>  
           
        <resultMap id="workMap" class="work">  
  
            <result property="work_id" column="work_id" />  
            <result property="workname" column="work_name" />  
            <result property="worktype" column="work_type" />  
            <result property="worktime" column="work_time" />  
            <result property="workmoney" column="work_money" />  
            <result property="workset" column="work_set" />  
            <result property="workproof" column="work_proof" />  
            <result property="worktext" column="work_text" />  
            <result property="workexpand1" column="work_expand1" />  
            <result property="workexpand2" column="work_expand2" />  
            <result property="workexpand3" column="work_expand3" />  
            <result property="workexpand4" column="work_expand4" />  
               
        </resultMap>  
  
        <select id="findWork"  resultClass="work" parameterClass="java.util.Map">  
            select * from t_work   
            <dynamic prepend="where">    
        <isParameterPresent>  
            <isNotEmpty prepend="and" property="work_time">  
                 work_time between #startTime# and #endTime#   
            </isNotEmpty>  
                   
             <isNotEmpty prepend="AND" property="work_name">     
                      work_name=#userName#    
             </isNotEmpty>     
        </isParameterPresent>     
        </dynamic>  
           
        </select>  
    </sqlMap>  <?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>
<typeAlias alias="work" type="com.house.bean.WorkBean"/>

<resultMap id="workMap" class="work"> <result property="work_id" column="work_id" />
<result property="workname" column="work_name" />
<result property="worktype" column="work_type" />
<result property="worktime" column="work_time" />
<result property="workmoney" column="work_money" />
<result property="workset" column="work_set" />
<result property="workproof" column="work_proof" />
<result property="worktext" column="work_text" />
<result property="workexpand1" column="work_expand1" />
<result property="workexpand2" column="work_expand2" />
<result property="workexpand3" column="work_expand3" />
<result property="workexpand4" column="work_expand4" />

</resultMap> <select id="findWork"  resultClass="work" parameterClass="java.util.Map">
select * from t_work
<dynamic prepend="where"> 
        <isParameterPresent>
         <isNotEmpty prepend="and" property="work_time">
          work_time between #startTime# and #endTime#
         </isNotEmpty>
                
             <isNotEmpty prepend="AND" property="work_name">  
                      work_name=#userName# 
             </isNotEmpty>  
        </isParameterPresent>  
        </dynamic>
        
</select>
</sqlMap>
t_work脚本 
Sql代码 
create table t_work   
(   
    work_id int primary key identity not null ,--主键,自动增长   
    work_name varchar(20) not null,       
    work_type varchar(20) not null,       
    work_time datetime not null ,             
    work_money float ,                   
    work_set int ,                        
    work_proof int not null ,             
    work_text varchar(2000) ,             
    work_expand1 varchar(200) ,       -- 扩展字段1   
    work_expand2 varchar(2000),          
    work_expand3 int ,                    
    work_expand4 int                      
)  create table t_work
(
work_id int primary key identity not null ,--主键,自动增长
work_name varchar(20) not null,    
work_type varchar(20) not null,    
work_time datetime not null ,          
work_money float ,                
work_set int ,                     
work_proof int not null ,          
work_text varchar(2000) ,          
work_expand1 varchar(200) ,       -- 扩展字段1
work_expand2 varchar(2000),       
work_expand3 int ,                 
work_expand4 int                   
)

解决方案 »

  1.   

    work_time between #startTime# and #endTime# 
    改成
    work_time &gt; #startTime# and work_time &lt; #endTime# 另外说一下,你的变量名之类的命名习惯需要改进一下。
      

  2.   

    一般就就用 > 或<符号了,在ibatis配置文件中,>是&gt(特殊字符),< 是&lt(特殊字符)表示
      

  3.   

    返回检索结果为0是因为它没有把你传入"2009-08-30 16:38:32.0" 这样的数据当成日期类型
    后面加 as datetime试试
      

  4.   

    这样不行,我之前把代码写在<data...>里的时候用过“>”和“<”还是一样的差不出数据,谢谢,呵呵
      

  5.   

    work_time datetime not null ,  work_time是日期字段所以用map里放date类型,而不用string。你这里是什么数据库,mysql?没有报错可能也很奇怪
      

  6.   


    字段是时间类型,我在Map里放过时间类型的参数,也是一样的不报错,就是查不到数据。。
      

  7.   

    我用log4j配置后,把sql语句打印出来,结果没有打印出where后面接的条件,就一个select * from t_work语句,不知道怎么后面的where条件没接上去,我再把判断参数为空的条件去掉,打印出来的语句是:select * from t_work where work_time between ? and ? 这样,Map中的参数也没传进去。 有谁知道哪里错了吗?
      

  8.   

    没有条件就更不会为空的结果集了,仔细检查一下是不是已经有expceiton了,被你抓住了,所以没有看到excepiotn的信息
      

  9.   

     <isNotEmpty prepend="and" property="work_time">   
      work_time between #startTime# and #endTime#   
      </isNotEmpty>  
    这里写错了...property="work_time"
    property定义的是要传进来的参数.
    应该这样写:
     <isNotEmpty prepend=" AND " property="btime"> YEAR_NO &gt;= #btime# </isNotEmpty>
    <isNotEmpty prepend=" AND " property="etime">  YEAR_NO &lt;= #etime#</isNotEmpty>
      

  10.   

    zhouzhou1234222 前辈说的对property定义的是要传进来的参数.
    应该这样写:
     <isNotEmpty prepend=" AND " property="btime"> YEAR_NO &gt;= #btime# </isNotEmpty>
    <isNotEmpty prepend=" AND " property="etime"> YEAR_NO &lt;= #etime#</isNotEmpty>今天我也遇到同样的错,照此方法,解决了,谢谢!