`
pkfajax
  • 浏览: 14490 次
  • 性别: 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语句打印出来看看就知道怎么回事了

相关推荐

    ibatis动态多条件组合查询

    ibatis动态多条件组合查询 实例 说明

    ibatis多表查询

    在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...

    struts+spring+ibatis+extjs完美整合!!!

    struts+spring+ibatis+extjs完美整合! 联系方式:QQ360310087 如果有需要与本人沟通的.

    Ibatis多表查询

    Ibatis 是一款轻量级的持久层框架,它与 JDBC 集成,但比 JDBC 更加方便,更易于管理数据库操作。...在实际项目中,可以根据具体需求调整查询策略,如添加条件查询、分页等,以满足不同的业务场景。

    iBatis条件查询

    在本资源中,"iBatis条件查询"着重展示了如何根据业务需求定制SQL语句进行数据检索,尤其在不涉及复杂关联查询的情况下,iBatis可以提供高效且简单的解决方案。 首先,iBatis的核心概念是SQL Map,它是一个XML配置...

    ibatis_动态查询条件

    iBatis 动态查询条件...* 在使用 iBatis 的动态查询条件时,需要注意 SQL 注入问题。 iBatis 的动态查询条件提供了强大的功能,可以根据不同的参数生成不同的 SQL 语句,使得开发者可以更方便地实现复杂的查询逻辑。

    ibatis多表查询过程

    当我们需要进行多表查询时,iBatis提供了一种高效且易于管理的方式。本文将深入探讨iBatis在处理多表查询时的具体步骤和技巧。 ### 1. iBatis简介 iBatis 是一个基于Java的持久层框架,它简化了数据库访问,并避免...

    ibatis多对多关系(详细)

    iBatis多对多关系详解 iBatis是一种流行的持久层框架,用于简化Java应用程序和关系数据库之间的交互。在本文档中,我们将详细介绍iBatis在处理多对多关系时的配置和实现。 多对多关系 多对多关系是一种常见的关系...

    操作数据库 iBATIS查询

    ### 操作数据库iBATIS查询详解 #### 一、iBATIS中的LIKE查询技巧 iBATIS是一款优秀的Java持久层框架,它简化了基于SQL的程序编写,避免了程序员手动处理结果集和手工编写SQL语句。在进行数据库查询时,LIKE查询是...

    ibatis的动态查询

    以上内容详细介绍了 ibatis 中动态查询的基本原理及具体实现方法,包括模糊查询、多条件组合查询以及使用 Map 作为参数的高级用法。这些知识点对于深入理解 ibatis 的动态查询机制非常重要,可以帮助开发者更高效地...

    ibatis的多参数查询.doc

    针对ibatis的多参数查询问题,这里介绍三种常见的解决方法: ##### 1. 使用字符串(String)替代 **实现方式:** - 在SQL映射文件中,定义`&lt;select&gt;`标签的`parameterClass`属性为`java.lang.String`。 - 直接在...

    Ibatis复杂查询语句.doc

    在Ibatis中,复杂查询通常涉及到多个表的联接、条件动态拼接、子查询以及各种数据类型的处理。文档"Ibatis复杂查询语句.doc"所展示的查询语句就是一个很好的例子,展示了Ibatis如何处理复杂的数据库操作。接下来,...

    Ibatis查询语句里,可以使用多表查询

    ### iBatis 多表查询知识点详解 #### 一、iBatis简介 iBatis 是一款优秀的持久层框架,它将 SQL 映射到 Java 对象,简化了 JDBC 编程过程中的繁琐操作,提高了开发效率。iBatis 的核心功能包括 SQL 映射、动态 SQL...

    ibatis做连接查询 .doc

    注意,iBatis还支持动态SQL,这意味着你可以在XML配置文件中使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`等标签来根据条件动态构建SQL语句,这对于复杂的连接查询非常有用。 总的来说,iBatis提供了强大的SQL定制能力,使得...

    ibatis下oracle树查询

    通过指定起始节点(START WITH)和连接条件(CONNECT BY),我们可以构建出一个递归查询,从而获取整个树结构。 例如,假设我们有一个部门表DEPARTMENTS,包含ID(主键)、PARENT_ID(父ID)和NAME(部门名称)字段...

    解决IBatis缓存动态字段问题

    ### 解决IBatis缓存动态字段问题 #### 背景与问题描述 在使用IBatis框架处理数据库操作时,可能会遇到动态数据表名、动态字段名的情况。这种情况下,由于IBatis的缓存机制,可能导致字段找不到的问题。具体表现为...

    Ibatis查询Id列表.doc

    根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...

    动态ibatis查询语句配置

    动态查询语句配置是Ibatis的一个重要特性,它允许我们在运行时根据业务需求构建灵活多变的SQL语句。这篇博文主要探讨的是如何在Ibatis中设置和使用动态SQL,以便实现更高效、更灵活的数据查询。 首先,我们需要理解...

    ibatis 单表查询 一对多查询

    Source Database : ibatis_db Target Server Type : MYSQL Target Server Version : 50022 File Encoding : 65001 Date: 2013-05-02 22:49:28 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- --...

Global site tag (gtag.js) - Google Analytics