`
pkfajax
  • 浏览: 14080 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

ibatis多条件查询问题,急!急!急!!

阅读更多
本人刚刚自学了Ibatis,我现在需要查询一个两个时间之间的数据,使用的是Map传参数,但一直查不出数据,也不报错,请高手指点下,不使用map传参数也行,只要有解决的方法。谢谢。
  数据库中中表t_work有一个时间的字段,对应的Bean中也有一个时间类型的属性,和表的时间类型字段相对应。
我把我的大概代码贴出来
我用log4j配置后,把sql语句打印出来,结果没有打印出where后面接的条件,就一个select * from t_work语句,不知道怎么后面的where条件没接上去,我再把判断参数为空的条件去掉,打印出来的语句是:select * from t_work where work_time between ? and ? 这样,Map中的参数也没传进去。

  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类
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 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脚本
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                   
)


哪位可以看出我问出在哪里吗?程序不报错,但返回的list一直是0,或者哪位有相关的demo发一个到我邮箱吧:jdbc4@163.com,谢谢。
1
0
分享到:
评论
4 楼 thisisvoa 2012-12-13  
  DaoUtil.getConnection().queryForList("findWork", hashMap); 

这个api你好好看一下,调用错误
3 楼 jamesji 2009-09-01  
1. In class WorkBean, change worktime attribute from Data to java.sql.Timestamp. otherwise, you may have timezone issue later on.

2. change

wrokMap.put("startTime", "2009-08-30 16:38:32.0"); 
wrokMap.put("endTime", "2009-08-30 16:39:08.0");

to

wrokMap.put("startTime", "2009-08-30 16:38:32"); 
wrokMap.put("endTime", "2009-08-30 16:39:08");

3. change work_time between #startTime# and #endTime# 
to work_time between to_date('#startTime#', 'YYYY-MM-DD HH24:MI:SS')  and to_date('#endTime#', 'YYYY-MM-DD HH24:MI:SS')

The idea is if you try to use string directly, then it must follow the default oracle date format. Otherwise, covert it to a date object.

4. If these 3 steps above still not work, then change

<select id="findWork"  resultClass="work" parameterClass="java.util.Map">

to

<select id="findWork"  resultClass="work" parameterClass="work">

And then in your dao class, create a WorkBean instance, and pass it as the argument instead of the map.


2 楼 laojiang 2009-09-01  
#  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(); 


#   <isNotEmpty prepend="and" property="work_time"> 
#                  work_time between #startTime# and #endTime# 
#             </isNotEmpty> 
#                  
#              <isNotEmpty prepend="AND" property="work_name">   
#                       work_name=#userName#  
#              </isNotEmpty>   


参数没有work_time呀 ,也没有work_name


#   <isNotEmpty prepend="and" property="startTime"> 
#                  work_time between #startTime# and #endTime# 
#             </isNotEmpty> 
#                  
#              <isNotEmpty prepend="AND" property="userName">   
#                       work_name=#userName#  
#              </isNotEmpty>   
1 楼 emlyn_1180 2009-09-01  
配置一下log4j,把执行的sql语句打印出来看看就知道怎么回事了

相关推荐

Global site tag (gtag.js) - Google Analytics