- 浏览: 305783 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jakejone:
起作用了,谢谢啦
java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date -
BadBoyPgm:
不错 工作中刚好用到 看看知道怎么回事
ServletContextListener 应用 -
ifox:
不错哦,这个有用。找了好久呢、
struts2 iterator status index -
输入法:
上面书籍里有详细介绍?
js 获取select option 值 value text -
feihuale:
不错。。。真好,,,,学习了。。。
The error occurred while applying a parameter map.
在 iBATIS SQL Maps 的世界里也存在 one-to-many、many-to-one 的关系,想必你已经对这些概念驾轻就熟了。好!还是每个 People 对应多条 AutoInfo 信息。
本系列文章第一部分提到过 iBATIS SQL Maps 的映射文件个数可以人为设定,但是,把一组有共性的操作放在一起是首选策略。下面我们看看为张三首次买车所生成的映射文件是怎样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="AutoMag">
<insert id="insertPeople" parameterClass="bo.People">
<![CDATA[
insert into people (name, address) values (#name#, #address#)
]]>
<selectKey resultClass="java.lang.Integer" keyProperty="id">
<![CDATA[
select last_insert_id();
]]>
</selectKey>
</insert>
<insert id="insertAutoInfo" parameterClass="bo.AutoInfo">
<![CDATA[
insert into auto_info (license_plate, owner_no) VALUES (#licensePlate#, #ownerNo.id#)
]]>
</insert>
</sqlMap>
sqlMap
sqlMap 元素拥有属性 namespace="…",定义了该 XML 文件命名空间。如果你在配置文件 SqlMapConfig.xml 中指定了 settings 元素的属性 useStatementNamespaces="true",那么就可以按照命名空间的方式访问 Mapped statement,比如 namespace=" AutoMag",相应 Java 代码:sqlMap.insert("AutoMag.insertPeople",people)。这样做是为了防止不同映射文件中出现同名 Mapped statement 而产生冲突。什么是 Mapped statement ?
Mapped statement
iBATIS SQL Maps 的核心概念就是 Mapped statement!Mapped Statement 可以使用任意的 SQL 语句,利用 POJO、原始变量及其 Wrapper Class 作为输入(parameter class)和输出(result class)。
Mapped Statement 包含以下几种类型:
insert 对应数据库的 insert 操作,该操作返回本次操作插入记录的主键值。
select 对应数据库的 select 操作,该操作返回特定的 POJO 或 对象。
update 对应数据库的 update 操作,该操作返回被更新的记录个数。
delete 对应数据库的 delete 操作,该操作返回被删除的记录个数。
procedure 对应数据库存储过程。
statement 类型最为通用,可以代替以上所有的类型。但由于缺乏操作直观性故不推荐。
insert id="insertPeople" parameterClass="bo.People"
定义了 insert 类型的 Mapped Statement。属性 id="insertPeople" 定义操作名称,parameterClass="bo.People" 定义传入参数为 People 对象实例,框架可确保其属性持久化到数据库相应字段中。由于 SQL 语句会包含“<>”这样的符号,容易和 XML 产生冲突,放进 <![CDATA[……]]> 区域就可避免。insert into people (name, address) values (#name#, #address#),是一条普通的 SQL 语句,“#name#、#address#”利用 Java 反射机制访问 People 对象实例的相应属性。
selectKey resultClass="java.lang.Integer" keyProperty="id"
iBATIS SQL Maps 通过 <insert> 元素的子元素 < selectKey> 来支持主键自动生成。 resultClass="java.lang.Integer" 定义返回对象为 int 的 Wrapper Class。keyProperty="id" 定义了主键名称。本例是 MySQL 主键生成方式,参考官方文档,MySQL 的主键生成无需人为来控制,也就是说可不使用 <selectKey> 而由数据库自动处理。但我测试发现,在执行 insert 操作以后,程序没有返回本次操作插入记录的主键值。在官方论坛上也有很多用户提出这样的疑惑,作者的答复是:这和 JDBC Driver 有关系。不可能把驱动一一测试吧?一劳永逸的办法是使用 <selectKey> 元素。以下是 Oracle 和 SQL Server 主键生成方法:
< !- Oracle ->
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
<selectKey resultClass="int" keyProperty="id" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
</selectKey>
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)
</insert>
<!- Microsoft SQL Server ->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
<selectKey resultClass="int" keyProperty="id" >
SELECT @@IDENTITY AS ID
</selectKey>
</insert>
insert into auto_info (license_plate, owner_no) VALUES (#licensePlate#, #ownerNo.id#)
在插入了 people 记录后,要为 auto_info 插入记录。基本原则和之前遇到过的一样,只是”owner_no”这个字段值由 AutoInfo 对象属性”ownerNo”获得,该属性类型为 People。这是由于我沿用了 Hibernate 产生的 POJO,如果你愿意,完全可以把”ownerNo”替换为 Integer 类型。
编程中几个关键对象
com.ibatis.common.resources.Resources 对象负责从 XML 得到 java.io.Reader 抽象类的实例,供工厂方法调用。
com.ibatis.sqlmap.client.SqlMapClientBuilder 构造 SqlMapClient 实例。
com.ibatis.sqlmap.client.SqlMapClient 是 iBATIS SQL Maps 核心组件,可以说我们的编程工作都是围绕着它展开。
形成的 one-to-many 保存如下:
package test;
import java.io.Reader;
import com.ibatis.sqlmap.client.*;
import com.ibatis.common.resources.*;
import bo.*;
public class AutoMag {
private Reader reader;
private SqlMapClient sqlMap;
private String resource = "SqlMapConfig.xml";
public void insertPeople() throws Exception{
try{
reader = Resources.getResourceAsReader(resource);
sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);
sqlMap.startTransaction();
People people=new People();
people.setName("张三");
people.setAddress("中国");
sqlMap.insert("insertPeople",people);
AutoInfo autoInfo=new AutoInfo();
autoInfo.setLicensePlate("A00001");
autoInfo.setOwnerNo(people);
sqlMap.insert("insertAutoInfo",autoInfo);
sqlMap.commitTransaction();
}finally{
sqlMap.endTransaction();
}
}
}
程序和 Hibernate 写法差不多,我感觉甚至比 Hibernate 更简单。我可以显示的进行 insert 操作,符合传统 JDBC 编程习惯。iBATIS SQL Maps 支持自动事务处理,可以不用写明 startTransaction、commitTransaction。但如果 People insert 操作成功,而 AutoInfo insert 操作失败,就破坏了两次 insert 操作的原子性。最后 endTransaction 包含异常情况下的回滚事务和关闭连接池连接两种功能。
发表评论
-
struts2 redirect 参数 取不到
2009-12-03 16:07 2306关键字: struts2 redirect 参数 取不到 ... -
spring定时任务
2009-08-17 15:48 2098applicationContext.xml <?xm ... -
spring quartz 多定时任务
2009-08-17 15:31 1529<bean id="TaskAuto&qu ... -
The error occurred while applying a parameter map.
2009-08-17 11:37 21185关于“The error occurred whi ... -
用HttpSessionAttributeListener接口实现在线统计
2009-08-16 12:14 1357以下是一些不详细的代码,主要是说明原理: 捕获Sessio ... -
struts2 iterator status index
2009-08-14 17:34 11234<script type="text/ja ... -
ibatis The error occurred while applying a parameter map
2009-08-09 11:21 28460The error occurred while applyi ... -
struts2 标签截取字符串
2009-08-02 11:16 2410struts2 标签截取字符串,有点强大哦 <s:pr ... -
ibatis 双向关联不能实现
2009-08-01 11:07 1132最近用ibatis做持久层框架,好不容易吧关系给配置好了,又出 ... -
hibernate ibatis
2009-08-01 11:02 1402一。 inverse = ? ... -
struts2 selectedIndex 使用
2009-07-30 17:57 1471var ss = document.selectform ... -
struts2 类似 struts1的很低级问题
2009-07-30 15:25 1215本想通过超链接传递参数,但是网页地址栏会暴漏参数信息,于是选择 ... -
struts2 标签小体会
2009-07-30 15:16 1127<s:iterator id="m" ... -
ibatis javaBean 书写问题
2009-07-18 15:55 1336There is no WRITEABLE property ... -
dwr spring集成
2009-07-14 18:55 2197最近用dwr做了个登陆验证的例子,可真是几经波折呀(程序很简单 ... -
spring拦截器
2009-07-02 11:31 1624今天在SSH中用到spring拦 ... -
Spring学习笔记之Bean基本管理(BeanFactory,ApplicationContext
2009-06-17 15:56 1090Spring2中: BeanFactory接口定义了6种方法 ... -
Beans, BeanFactory和ApplicationContext
2009-06-17 15:52 1093在Spring中,两个最基本 ... -
struts2.0+spring2.0+ibatis
2009-06-16 23:13 1851首页 新闻 论坛 博客 招聘 更多 ▼ 问答 知识库 ... -
http://www.ibatis.com/dtd/sql-map-2.dtd
2009-06-16 23:06 7155在做spring ibatis整合测试的时候出现如下错误 实体 ...
相关推荐
这个"ibatis简单例子"旨在帮助初学者理解Ibatis的基本用法,包括配置文件的设置、SQL映射文件的编写以及如何在Java代码中调用这些映射的SQL。通过实践这两个小例子,可以深入理解Ibatis如何将数据库操作与业务逻辑...
**Ibatis简单实例** 在"IbatisTest"这个简单实例中,我们通常会经历以下步骤: 1. **引入依赖**: 在项目中引入Ibatis的jar包,包括核心库mybatis-x.x.x.jar和相关数据库驱动。 2. **配置SqlMapConfig.xml**: 配置...
在这个“使用的iBatis简单例子”中,我们将深入探讨如何配置和使用iBatis进行数据库交互。 首先,iBatis的核心组件包括XML配置文件、SQL映射文件以及SqlSessionFactory。XML配置文件用于定义数据源、事务管理器等...
**标题:“iBATIS简单例子”** iBATIS是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,从而避免了Java代码与SQL的耦合,提高了开发效率。在这个简单的例子中,我们将深入理解iBATIS的基本...
这个"webwork+spring+ibatis简单实例"提供了如何整合这三个框架来创建一个功能完整的应用程序的示例。以下是关于这三个框架及其整合方式的详细说明: **WebWork**: WebWork是一个轻量级的MVC(模型-视图-控制器)...
在这个“用Velocity改装的jquery+json+springMVC+ibatis简单例子”中,我们探讨的是一个集成多种技术的Web应用程序开发示例。这个项目利用了Velocity作为模板引擎,jQuery作为前端JavaScript库,JSON作为数据交换...
**Ibatis简介** ...通过这个简单的Ibatis例子程序,你可以一步步实践上述知识点,从而更好地理解和掌握Ibatis框架的运用。在实践中不断摸索和积累,将有助于提升你在数据库操作和持久层开发方面的技能。
1. **配置Spring**:设置Spring的配置文件,定义Bean的实例化规则,包括Struts2的Action类、Service层接口及其实现、iBatis的SqlSessionFactory和Mapper接口。 2. **配置Struts2**:配置struts.xml文件,定义Action...
**Ibatis简介** Ibatis,又称为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及...通过学习和实践这个简单的CRUD例子,开发者可以快速掌握Ibatis的基本操作,并将其应用到实际项目中,提升开发效率。
这个"最简单的iBatis入门例子"将引领我们逐步理解并掌握iBatis的核心概念和基本用法。 首先,我们需要了解iBatis的基本架构。iBatis主要由三部分组成:配置文件(ibatis-config.xml)、映射文件(mapper.xml)和...
在这个简单的入门实例中,我们将深入理解Ibatis的基本概念和用法。 首先,我们需要了解Ibatis的核心组件:SqlSessionFactory和SqlSession。SqlSessionFactory是Ibatis的工厂类,用于创建SqlSession对象。SqlSession...
《Ibatis应用实例》 iBatis是一个轻量级的持久层框架,它作为O/R Mapping解决方案,与Hibernate等其他框架相比,其最大的优势在于简洁易用。对于不需要复杂功能的项目,iBatis是理想的选择,它允许开发者自由地编写...
iBatis工程的简单例子,在eclipse上实现的,数据库是mysql数据库,里面的字段为CREATE DATABASE MYDB; use MYDB; Drop TABLE IF EXISTS `MYDB`.`student`; Create TABLE `MYDB`.`student` ( `name` varchar(40) NOT...
Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心概念和常用功能,帮助你快速...
下面我们将详细探讨如何将Maven与iBatis整合,以实现一个简单的例子。 首先,我们需要创建一个新的Maven项目。在Maven的`pom.xml`文件中,我们需要添加iBatis和其依赖的数据库驱动(如MySQL驱动)作为项目的依赖。...
在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....