`
farush
  • 浏览: 11572 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

在ibatis的入门例子中就被卡住了

    博客分类:
  • Java
阅读更多

近来开始学习ibatis,好不容易找了些入门资料,却没想到ibatis的第一个例子上就卡住,先是从ibatis官方下的petstore5在resin-pro-3.0.22上运行不起来。

然后就是《ibatis开发指南》(夏昕: xiaxin(at)gmail.com)的第一个例子,代码照着敲进来,也不见能起来。

然后在JE上找到了这个

http://www.iteye.com/post/148076 (温柔一刀

这个还不是很坏,能运行,然而getAllUser读出来的记录数总是0,而数据库是有数据的。

这个User.xml中查询的配置代码:

xml 代码
  1. <select id="getAllUser" resultClass="user">  
  2. <!----> 
  3.     select   
  4.       name,   
  5.       sex   
  6.     from t_user WHERE name=#name#  
  7. ]]>  
  8. select>  

 

java代码段如下:

java 代码
  1. try {   
  2.     sqlMap.startTransaction();                 
  3.     user=sqlMap.queryForList("getAllUser"null);   
  4.     sqlMap.commitTransaction();   
  5. catch (SQLException e) {   
  6.     System.out.println(e.getMessage());   
  7. finally {   
  8.     try {   
  9.         sqlMap.endTransaction();   
  10.     } catch (SQLException e) {   
  11.         e.printStackTrace();   
  12.     }   
  13. }  

 

测试了几次取不到结果。开始找原因,

先是把

java 代码
  1. user=sqlMap.queryForList("getAllUser"null);  

中的参数null改成user2(新创建的一个User对象,其他setName("数据库中已存在字段值")),可以取到那条记录。

可以这里有个小问题,放后面说!!!!!!

 

第二种尝试,把User.xml中ID为getAllUser的SQL改成查询所有记录,这样可以取到所以的记录。

xml 代码
  1. <select id="getAllUser" resultClass="user">  
  2. <!----> 
  3.     select   
  4.     name,   
  5.     sex   
  6.     from t_user  
  7. ]]>  
  8. select>  

上面只有条件“WHERE name=#name#”给去掉了。

到了这里,我想,问题是不是出在SQL上?一开始JAVA那边传递过来的参数是null,而ibatis最终生成的SQL还是

“select name, sex from t_user WHERE name=null” ?

不过,以前在JE上无意中看到有文章说IBATIS可以做到自动取舍WHERE子句的,难道是记错了,百度,结果出来了,要做到动态取舍WHERE子句,User.xml中有关SQL的配置应该是这样:

xml 代码
  1. <select id="getAllUser" resultClass="user">  
  2. <!----> 
  3.     select   
  4.     name,   
  5.     sex   
  6.     from t_user  
  7. ]]>  
  8. <dynamic prepend="WHERE">  
  9.     <isNotEmpty property="name">name like '%$name$%'isNotEmpty>  
  10. dynamic>  
  11. select>  

 

这里特殊(模糊查询)了一点,如果是精切查询,是#而不是$符号了。

 

===

说说那个小问题:

如果 User.xml的getAllUser的配置是:

xml 代码
  1. <select id="getAllUser" resultClass="user">  
  2.     <!----> 
  3.    select   
  4.      name,   
  5.      sex   
  6.    from t_user WHERE name=#name#  
  7.    ]]>  
  8. select>  

 

那么

java 代码
  1. user=sqlMap.queryForList("getAllUser""某条记录name的值");  

 

java 代码
  1. User user2 = new User();   
  2. user2.setName("某条记录name的值");   
  3. try {   
  4.     sqlMap.startTransaction();                 
  5.     user=sqlMap.queryForList("getAllUser", user2);   
  6.     sqlMap.commitTransaction();   
  7. catch (SQLException e) {   
  8.     System.out.println(e.getMessage());   
  9. finally {   
  10.     try {   
  11.         sqlMap.endTransaction();   
  12.     } catch (SQLException e) {   
  13.         e.printStackTrace();   
  14.     }   
  15. }  

 

这两个都可以正常取到那条记录。

如果User.xml是:

xml 代码
  1. <select id="getAllUser" resultClass="user">  
  2.     <!----> 
  3.    select   
  4.      name,   
  5.      sex   
  6.    from t_user  
  7.    ]]>  
  8. <dynamic prepend="WHERE">  
  9.     <isNotEmpty property="name">name = #name#isNotEmpty>  
  10. dynamic>  
  11. select>  

,只能传递User对象作为参数了,

java 代码
  1. user=sqlMap.queryForList("getAllUser", user2);  

 

否则报错:

xml 代码
  1. --- The error occurred in com/ctgusec/zhupan/maps/User.xml.     
  2. --- The error occurred while preparing the mapped statement for execution.     
  3. --- Check the getAllUser.     
  4. --- Check the parameter map.     
  5. --- Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named 'name' in class 'java.lang.String'   
  6. Exception in thread "main" java.lang.NullPointerException   
  7.     at com.ctgusec.zhupan.ExampleMain.main(ExampleMain.java:81)  

 

刚接触ibatis,有说错的地方恳请指正.

MySQL是4.1.22版本。

JDK1.6.0_02。

 

分享到:
评论
2 楼 gaoqs1984 2007-09-27  
这个问题,我也遇到过,用java.lang.String作为动态查询的条件,时不能直接传入java.lang.String.
需要用HashMap封装一下。就可以了。
HashMap<String, String> map=new HashMap<String, String>();
map.put("id",id);

parameterClass="java.util.HashMap"

1 楼 tianzhijie11 2007-07-13  
唉,不用那么麻烦,,是什么原因,是你的SQL语句写的有要传入一个参数,但你没有传入。<select id="getAllUser" resultClass="user>
你这里应该还要加一句 。<select id="getAllUser" resultClass="user parameterClass="java.lang.String">,,这里是说。你要出入一个String类型的参数,然后你user=sqlMap.queryForList("getAllUser", null); 你这里的user是什么类型的,queryForList这里查询出来的是LIST类型的,还有如果要传参数,你这里的null就要改为那个参数值,,其他,没注意看,如果还有什么问题,自己在找找。

相关推荐

    Ibatis 入门经典 实例

    《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...

    Ibatis入门例子,Ibatis教程

    在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    最简单的iBatis入门例子

    本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...

    ibatis入门

    在 Ibatis 中,这些 SQL 语句会被映射到 XML 格式的映射文件中,例如 `UserMapper.xml`。映射文件定义了 SQL 语句及其结果集映射,使得 Java 对象可以直接与数据库结果进行绑定。 3. **增删改查(CRUD)操作** - *...

    iBatis入门实例详细代码

    在这个“iBatis入门实例详细代码”中,我们将深入探讨如何使用iBatis与MySQL数据库进行交互。 首先,我们需要在MySQL数据库中创建相应的表。这个实例可能涉及一个简单的表结构,如用户表(users),包含字段如id...

    iBATIS入门实例测试

    **iBATIS入门实例测试** iBATIS是一个优秀的开源持久层框架,它简化了Java应用程序与数据库之间的交互,使得开发者可以专注于SQL语句本身,而无需处理大量的JDBC代码。本教程将通过一个简单的实例来介绍如何使用...

    ibatis入门实例(全代码)

    在实例中,提供了数据库创建语句,这通常包括创建表的 SQL 语句。例如,可能有一个名为 `users` 的表,用于存储用户信息,包含 `id`、`username` 和 `password` 等字段。运行这些语句,确保数据库环境已经准备好接收...

    ibatis入门实例,很方便,导入即用

    在本入门实例中,我们将探索如何快速上手 Ibatis,了解其基本配置和使用方法。 首先,"导入即用"表明这个压缩包可能包含了 Ibatis 的核心库、示例项目以及必要的配置文件,如 `SqlMapConfig.xml`。这个配置文件是 ...

    iBatis入门(三)

    **iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...

    iBATIS入门学习

    iBATIS入门学习

    ibatis 入门

    标题 "ibatis 入门" 暗示我们要探讨的是关于使用和理解开源持久层框架 iBATIS 的基础知识。iBATIS 是一个优秀的 Java 应用框架,它将 SQL 查询与 Java 代码分离,提供了更灵活的数据访问方式。这篇博客(博文链接已...

    ibatis 入门的例子

    这个压缩包中的"ibatisJavaTest"项目应该是一个简单的Ibatis入门示例,可能包含了配置文件、映射文件、测试类等。通过分析和运行这个项目,你可以直观地了解Ibatis如何与数据库交互,以及如何编写和使用Mapper接口。...

    ibatis入门到精通详细讲解

    **Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...

    ibatis 自己学的一个ibatis项目(只是打通了Oracle) 非常适合入门

    数据库自己建一张简单的表就行了,特别说明 只适合新手入门 只有三个java文件和三个xml配置文件 非常简单 但是包含了crud操作 非常适合新手入门,因为项目经理让我熟悉一下ibatis 我就自学写了一个,希望对你有帮助

    iBatis 入门例子 (含源代码)

    通过这个入门例子,你可以亲手实践上述知识点,逐步理解iBatis的工作原理,并学会如何在项目中应用iBatis进行数据库操作。在实践中,你会遇到如事务控制、缓存管理等更高级的主题,这些都是iBatis提供的强大功能,...

    最简单的iBatis入门例子.rar

    在“最简单的iBatis入门例子”中,可能包含以下内容: - 一个简单的Java项目结构,包括src目录下的Java源码和resources目录下的SQL映射文件。 - DAO接口:定义了与数据库交互的方法,如selectUser、insertUser等。 ...

    ibatis入门与ibatis迭代的用法

    在iBatis入门时,首先需要了解的是其核心概念:SqlMapConfig.xml配置文件、SQL映射文件(.xml)和Java接口或POJO(Plain Old Java Object)。SqlMapConfig.xml是全局配置文件,包含了数据源、事务管理器等信息。SQL...

    Ibatis 简单入门实例

    在这个简单的入门实例中,我们将深入理解Ibatis的基本概念和用法。 首先,我们需要了解Ibatis的核心组件:SqlSessionFactory和SqlSession。SqlSessionFactory是Ibatis的工厂类,用于创建SqlSession对象。SqlSession...

Global site tag (gtag.js) - Google Analytics