近来开始学习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 代码
- <select id="getAllUser" resultClass="user">
- <!---->
- select
- name,
- sex
- from t_user WHERE name=#name#
- ]]>
- select>
java代码段如下:
java 代码
- try {
- sqlMap.startTransaction();
- user=sqlMap.queryForList("getAllUser", null);
- sqlMap.commitTransaction();
- } catch (SQLException e) {
- System.out.println(e.getMessage());
- } finally {
- try {
- sqlMap.endTransaction();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
测试了几次取不到结果。开始找原因,
先是把
java 代码
- user=sqlMap.queryForList("getAllUser", null);
中的参数null改成user2(新创建的一个User对象,其他setName("数据库中已存在字段值")),可以取到那条记录。
可以这里有个小问题,放后面说!!!!!!
第二种尝试,把User.xml中ID为getAllUser的SQL改成查询所有记录,这样可以取到所以的记录。
xml 代码
- <select id="getAllUser" resultClass="user">
- <!---->
- select
- name,
- sex
- from t_user
- ]]>
- 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 代码
- <select id="getAllUser" resultClass="user">
- <!---->
- select
- name,
- sex
- from t_user
- ]]>
- <dynamic prepend="WHERE">
- <isNotEmpty property="name">name like '%$name$%'isNotEmpty>
- dynamic>
- select>
这里特殊(模糊查询)了一点,如果是精切查询,是#而不是$符号了。
===
说说那个小问题:
如果 User.xml的getAllUser的配置是:
xml 代码
- <select id="getAllUser" resultClass="user">
- <!---->
- select
- name,
- sex
- from t_user WHERE name=#name#
- ]]>
- select>
那么
java 代码
- user=sqlMap.queryForList("getAllUser", "某条记录name的值");
java 代码
- User user2 = new User();
- user2.setName("某条记录name的值");
- try {
- sqlMap.startTransaction();
- user=sqlMap.queryForList("getAllUser", user2);
- sqlMap.commitTransaction();
- } catch (SQLException e) {
- System.out.println(e.getMessage());
- } finally {
- try {
- sqlMap.endTransaction();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
这两个都可以正常取到那条记录。
如果User.xml是:
xml 代码
- <select id="getAllUser" resultClass="user">
- <!---->
- select
- name,
- sex
- from t_user
- ]]>
- <dynamic prepend="WHERE">
- <isNotEmpty property="name">name = #name#isNotEmpty>
- dynamic>
- select>
,只能传递User对象作为参数了,
java 代码
- user=sqlMap.queryForList("getAllUser", user2);
否则报错:
xml 代码
- --- The error occurred in com/ctgusec/zhupan/maps/User.xml.
- --- The error occurred while preparing the mapped statement for execution.
- --- Check the getAllUser.
- --- Check the parameter map.
- --- Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named 'name' in class 'java.lang.String'
- Exception in thread "main" java.lang.NullPointerException
- at com.ctgusec.zhupan.ExampleMain.main(ExampleMain.java:81)
刚接触ibatis,有说错的地方恳请指正.
MySQL是4.1.22版本。
JDK1.6.0_02。
分享到:
相关推荐
《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...
在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....
本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...
在 Ibatis 中,这些 SQL 语句会被映射到 XML 格式的映射文件中,例如 `UserMapper.xml`。映射文件定义了 SQL 语句及其结果集映射,使得 Java 对象可以直接与数据库结果进行绑定。 3. **增删改查(CRUD)操作** - *...
在这个“iBatis入门实例详细代码”中,我们将深入探讨如何使用iBatis与MySQL数据库进行交互。 首先,我们需要在MySQL数据库中创建相应的表。这个实例可能涉及一个简单的表结构,如用户表(users),包含字段如id...
**iBATIS入门实例测试** iBATIS是一个优秀的开源持久层框架,它简化了Java应用程序与数据库之间的交互,使得开发者可以专注于SQL语句本身,而无需处理大量的JDBC代码。本教程将通过一个简单的实例来介绍如何使用...
在实例中,提供了数据库创建语句,这通常包括创建表的 SQL 语句。例如,可能有一个名为 `users` 的表,用于存储用户信息,包含 `id`、`username` 和 `password` 等字段。运行这些语句,确保数据库环境已经准备好接收...
在本入门实例中,我们将探索如何快速上手 Ibatis,了解其基本配置和使用方法。 首先,"导入即用"表明这个压缩包可能包含了 Ibatis 的核心库、示例项目以及必要的配置文件,如 `SqlMapConfig.xml`。这个配置文件是 ...
**iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...
iBATIS入门学习
标题 "ibatis 入门" 暗示我们要探讨的是关于使用和理解开源持久层框架 iBATIS 的基础知识。iBATIS 是一个优秀的 Java 应用框架,它将 SQL 查询与 Java 代码分离,提供了更灵活的数据访问方式。这篇博客(博文链接已...
这个压缩包中的"ibatisJavaTest"项目应该是一个简单的Ibatis入门示例,可能包含了配置文件、映射文件、测试类等。通过分析和运行这个项目,你可以直观地了解Ibatis如何与数据库交互,以及如何编写和使用Mapper接口。...
**Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...
数据库自己建一张简单的表就行了,特别说明 只适合新手入门 只有三个java文件和三个xml配置文件 非常简单 但是包含了crud操作 非常适合新手入门,因为项目经理让我熟悉一下ibatis 我就自学写了一个,希望对你有帮助
通过这个入门例子,你可以亲手实践上述知识点,逐步理解iBatis的工作原理,并学会如何在项目中应用iBatis进行数据库操作。在实践中,你会遇到如事务控制、缓存管理等更高级的主题,这些都是iBatis提供的强大功能,...
在“最简单的iBatis入门例子”中,可能包含以下内容: - 一个简单的Java项目结构,包括src目录下的Java源码和resources目录下的SQL映射文件。 - DAO接口:定义了与数据库交互的方法,如selectUser、insertUser等。 ...
在iBatis入门时,首先需要了解的是其核心概念:SqlMapConfig.xml配置文件、SQL映射文件(.xml)和Java接口或POJO(Plain Old Java Object)。SqlMapConfig.xml是全局配置文件,包含了数据源、事务管理器等信息。SQL...
在这个简单的入门实例中,我们将深入理解Ibatis的基本概念和用法。 首先,我们需要了解Ibatis的核心组件:SqlSessionFactory和SqlSession。SqlSessionFactory是Ibatis的工厂类,用于创建SqlSession对象。SqlSession...