<select id="getArticleByCondition" resultMap="articleResult" parameterMap="articlePara">
<![CDATA[
select * from article
]]>
<dynamic prepend="where">
<isNotNull prepend="and" property="type">
(type = #type#)
</isNotNull>
<isNotNull prepend="and" property="title">
(title like %$#title#$%)
</isNotNull>
<isNotNull prepend="and" property="writer">
(writer = #writer#)
</isNotNull>
</dynamic>
</select>

上面是我的ibatis查询语句,问题如下:
(1)当我根据类型(type)或者作者(writer)查时,查不出任何数据,但是,数据库中是有这样的数据的;
(2)当我三个参数都有时,还是没有任何数据;
(3)当我按标题title一个字段查询时,老是报错“未给参数4设置值”。
(4)当根据类型类型(type)作者(writer)查询时,是能查出相关数据;
请大家帮我看看问题出在哪儿?我是第一次用ibatis的动态映射查询。
另外,我现在只有ibatis实战这本书,但是此书有些东西已经被现在iabtis版本更新了,大家能给我推荐一些吗?能和现在的ibatis版本相对应的,谢谢大家!

解决方案 »

  1.   

    改为:括号都可以不用啦
    <dynamic prepend="where"> 
    <isNotEmpty prepend="and" property="type"> 
    type = #type#
    </isNotEmpty  > 
    < isNotEmpty  prepend="and" property="title"> 
    title like %$#title#$%
    </isNotEmpty  > 
    < isNotEmpty  prepend="and" property="writer"> 
    writer = #writer#
    </isNotEmpty  > 
    </dynamic> 看看
    还有
    (title like %$#title#$%) 
    这里应该改为:
    (title LIKE '%$title$%') 
      

  2.   

    雾雨,还是那个样子啊,现在错倒是不报了,我让你看下我写的判断吧:
    Article  article = new Article();;
    //获取用户输入的信息
    if (request.getParameter("type").trim() != "") {
    int typeId = Integer.parseInt(request.getParameter("type"));
    article.setType(typeId);
    }else if(request.getParameter("title").trim() != ""){
    String title = new String(request.getParameter("title").getBytes("ISO-8859-1"));
    article.setTitle(title);
    }else if (request.getParameter("writer").trim() != "") {
    int writer = Integer.parseInt(request.getParameter("writer"));
    article.setWriter(writer);
    }else if (request.getParameter("type").trim() != "" && request.getParameter("title").trim() != "") {
    int typeId = Integer.parseInt(request.getParameter("type"));
    String title = new String(request.getParameter("title").getBytes("ISO-8859-1"));
    article.setType(typeId);
    article.setTitle(title);
      }else if (request.getParameter("type").trim() != "" && request.getParameter("writer").trim() != "") {
      int typeId = Integer.parseInt(request.getParameter("type"));
    int writer = Integer.parseInt(request.getParameter("writer"));
    article.setType(typeId);
    article.setWriter(writer);
    }else if (request.getParameter("writer").trim() != "" && request.getParameter("title").trim() != ""){
    String title = new String(request.getParameter("title").getBytes("ISO-8859-1"));
    int writer = Integer.parseInt(request.getParameter("writer"));
    article.setTitle(title);
    article.setWriter(writer);
    }else if (request.getParameter("type").trim() != "" && request.getParameter("title").trim() != ""
    && request.getParameter("writer").trim() != "")
    {
    int typeId = Integer.parseInt(request.getParameter("type"));
    String title = new String(request.getParameter("title").getBytes("ISO-8859-1"));
    int writer = Integer.parseInt(request.getParameter("writer"));
    article.setType(typeId);
    article.setTitle(title);
    article.setWriter(writer);
    }
    ArticleDao articleImpl = new ArticleDaoImpl();
    List<Article> articleList = articleImpl.getArticleByCondition(article); //查询文章信息
      

  3.   

    不用看那些代码了,无雨,现在的问题是这样:
    <dynamic prepend="where"> 
    <isNotEmpty prepend="and" property="type"> 
    type = #type# 
    </isNotEmpty  > 
    < isNotEmpty  prepend="and" property="title"> 
    title like '%$title$%'
    </isNotEmpty  > 
    < isNotEmpty  prepend="and" property="writer"> 
    writer = #writer# 
    </isNotEmpty  > 
    </dynamic> 
    我去掉任意两个条件,留下一个条件,就能查出数据,而三个全在就查不出来了,是何原因呢?
      

  4.   


    楼主你的if条件以及if{}里面都用了无数次
    request.getParameter("type");
    request.getParameter("title").getBytes("ISO-8859-1");
    request.getParameter("writer"); 何不在最上面判断下呢?对了取到有值了记得trim一下,说不定是空格的原因。
    记得ibatis似乎可以打印sql的,不如你把sql调出来看一下。
      

  5.   

    那说明,满足3个条件的记录没有呗,你把控制台上打印出的sql,直接拿到数据库里面测试看看,还有看下控制台上title,writer是否出现了乱码
      

  6.   

    <select id="getArticleByCondition" resultMap="articleResult" parameterMap="articlePara">
    如果你传入的是个对象的话,应该是parameterClass吧