iBatis 入门笔记

iBatis简介

iBatis是一个"半自动"的轻量级O/R Mapping框架。

O/R Mapping是指对象与数据库之间的映射,而iBatis就是这样一个映射器,映射器的主要作用是在对象和数据库之间搬运数据,同时保证对象、数据库和映射器之间相互独立。

通过O/R Mapping你将不用再面对那一堆令人厌恶的JDBC代码,为一堆打开连接、关闭连接的代码而眼花头昏。

何为"半自动"?    这里的半自动是与Hibernate这样的O/R Mapping方案对比得出的,在Hibernate中只要建立起完全的O/R关系,甚至在对数据库进行CRUD(create read update delete)操作时都不用写SQL语句,Hibernate会自动帮你生成sql语句,然后使用JDBC来操纵数据库。在iBatis中可不行,你需要自己定义要使用的sql语句。

相比于Hibernate这样的重量级O/R Mapping框架,iBatis入门简单,延续了很好用的sql使用经验,在某些对性能要求较高的场合下,使用iBatis可以量身定制你的sql语句,优化操作效率。而对于Hibernate,设计一个好的O/R映射则显得比较困难,你需要在对象模型和性能之间权衡取舍。而在O/R映射设计完成之后,如果使用的是iBatis,数据库查询的sql语句仍然需要自己编写,工作量很大,而若是Hibernate,则你的整个持久层代码将显得非常简洁,开发效率高。

iBatis映射 - 对象操作

iBatis映射将对象操作映射成SQL语句,可以使用statement、select、insert、update、delete、procedure等元素来配置。

其中statement元素可以配置成任意的sql语句,procedure用于配置储存过程,其他元素则各有侧重点。

Statement  Element  Attribute
<statement> id

parameterClass

resultClass

parameterMap

resultMap

cacheModel

resultSetType

fetchSize

xmlResultName

reMapResults

timeout

<select> 与上同
<insert> id

parameterClass

parameterMap

<update> id

parameterClass

parameterMap

<delete> id

parameterClass

parameterMap

<procedure> 与statement相比,

无resultSetType

一个简单的iBatis使用例子

1.  搭建环境: 下载iBatis的jar包,并导入到你的project中,我目前使用的是 ibatis-2.3.3.720.jar\ibatis-2.3.3.720.jar。

2. 定义你的model:User类

public class User {
	private int id;
	private String username;
	private String password;

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

}

3. 配置文件:

1) JDBC的连接属性文件 SqlMap.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ibatis_test
username=root
password=root

2)   总配置文件SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="SqlMap.properties" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
<sqlMap resource="User.xml"/>   //引入实体的映射文件
</sqlMapConfig>

3)实体的映射文件 User.xml

<?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="UserDAO">
	<!-- 建立表与对象的映射关系 -->
	<resultMap id="UserDO" class="com.troy.model.User">
		<result property="id" column="ID" />
		<result property="username" column="USERNAME" />
		<result property="password" column="PASSWORD" />
	</resultMap>

	<insert id="insert" parameterClass="com.troy.model.User">
		insert into USER (USERNAME,PASSWORD)
		values (
		#username#,
		#password#
		)
		<selectKey resultClass="int" keyProperty="id">
			SELECT LAST_INSERT_ID() AS ID
		</selectKey>
	</insert>

	<delete id="deleteUserByName" parameterClass="java.lang.String">
		<![CDATA[
		delete from USER
		where USERNAME = #username#
		]]>
	</delete>

	<update id="updateUser" parameterClass="com.troy.model.User">
		update USER
		<dynamic prepend="set">
		<isNotNull prepend="," property="username">
		USERNAME = #username#
		</isNotNull>
		<isNotNull prepend="," property="password">
		PASSWORD = #password#
		</isNotNull>
		</dynamic>
		where ID = #id#
	</update>

	<!-- resultClass与上方sqlMap定义的映射对应 -->
	<select id="selectUser" parameterClass="java.lang.String" resultMap="UserDO">
		select ID,USERNAME,PASSWORD
		from USER
		where USERNAME = #username#
	</select>

</sqlMap>

说明:

  • <![CDATA[...]] : 由于在映射中要嵌入SQL语句,但在XML文件中,某些字符是不能包含的,如<和>等,这时就可以使用<![CDATA[...]] 来进行处理,

例:<select id=“…” parameter=“…” resultClass=“…”>

select * from user where age <![CDATA[ > ]]>18

</select>

  • Insert时使用的selectKey: iBatis支持数据库主键自动生成,这包括支持预生成主键和后生成主键。所谓预生成是在插入记录前就生成主键,主键与其它字段一同插入数据库,如Oracle。所谓后生成则是在插入记录后才知道主键,不插入记录主键便是未知的,如MySQL。生成的主键会设置到同名属性中,也可通过keyProperty属性指定主键属性,在iBatis中使用mysql进行插入时,必须要在insert语句之后才能使用selectKey,通过selectKey进行返回。

4. 编写主函数进行测试

	public static void main(String[] args) {
		SqlMapClient sqlMapclient = null;
		try {
		Reader reader = com.ibatis.common.resources.Resources
		.getResourceAsReader("SqlMapConfig.xml");
		sqlMapclient = com.ibatis.sqlmap.client.SqlMapClientBuilder
		.buildSqlMapClient(reader);

		User user = new User();
		user.setPassword("12345");
		user.setUsername("troy");
		sqlMapclient.insert("insert", user);

		user.setPassword("123");
		sqlMapclient.update("updateUser", user);

		User user1 = new User();
		user1.setUsername("Troy");

		@SuppressWarnings("unchecked")
		List<User> users = (List<User>) sqlMapclient.queryForList("selectUser", "troy");
		for(User temp : users) {
			System.out.println(temp.getId() + "-" + temp.getUsername() + "-" + temp.getPassword());
		}

	//	sqlMapclient.delete("deleteUserByName", "troy");

		reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

可以在mysql中和Eclipse中观察到程序的运行结果。

例子代码下载

我把上面例子的代码放在了http://download.csdn.net/detail/troy__/7432523,欢迎各位前去下载测试...

iBatis 入门笔记,布布扣,bubuko.com

时间: 2024-08-01 06:28:06

iBatis 入门笔记的相关文章

ibatis学习笔记(完整)

1.       Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate.Toplink等在java编程的对象持久化方面深受开发人员欢迎. 对象关系映射(ORM):简单原理是通过面向对象方式操作关系型数据库,目前存储数据最常用最流行的工具是关系型数据库,其操作方式是通过SQL语句操作数据库的表,但是对于Java面向对象编程语言中,所有的操作对象都是对象,因此对象关系映射就是把数据库表和java编程语言中的对象对应起来,把表的列同java对象中的字

MySQL入门笔记(一)

MySQL入门笔记(二) 一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; ??上述代码中DATABASE和SCHEMA完全相同,可任选一个(花括号内的参数为任选其一): ??添加IF NOT EXISTS的作用则是,若新建数据库的名称与已有数据库名称冲突,则产

Django入门笔记【一】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 查看Django是否安装及版本 1 $ python -c "import django; print(django.get_version())" 2. 创建一个项目(project) 通过cd方式进入自创目录,然后运行: 1 $ django-admin startprojec

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持 调试(debug)是软件开发的一个重要环节,对于嵌入式开发而言这个环节其实比较依赖一些硬件资源(硬件debugger)的支持.传统的嵌入式系统的调试比较依赖断点(breakpoint)和单步调试(single step through).而 ARM cortex-M 系列的芯片其实有很强的CoreSight片上调试支持,实际上就是一个小的调试硬件,作为ARM的标准,内嵌在ARM的芯片里.在ARM自家的调试器ULINK-pro等的帮

Ajax 入门笔记

AJAX =Asynchronous Javascript + XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. XMLHttpRequest 是 AJAX 的基础.XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 1:创建 XMLHttpRequest 对象 为

Hive入门笔记-----架构以及应用介绍

Hive这个框架在Hadoop的生态体系结构中占有及其重要的地位,在实际的业务当中用的也非常多,可以说Hadoop之所以这么流行在很大程度上是因为Hive的存在.那么Hive究竟是什么,为什么在Hadoop家族中占有这么重要的地位,本篇文章将围绕Hive的体系结构(架构).Hive的操作.Hive与Hbase的区别等对Hive进行全方面的阐述. 在此之前,先给大家介绍一个业务场景,让大家感受一下为什么Hive如此的受欢迎: 业务描述:统计业务表consumer.txt中北京的客户有多少位?下面是

JAVA数据库编程(JDBC技术)-入门笔记

本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学习一下.我现在很迫不及待用JAVA想来实现以下对数据库的增删改查.想实现就来看Java是怎么操作数据库的,回想下.Net里你可能会配置web.Config,或者你去写一些DBhelper类然后调用里面的自己定义的一些增删改查的方法,更或者你去配一些数据控件等等往往发现操作基本都是一体化的简单.现在面

Django入门笔记【三】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. Public interface - views. 1. 定义 视图(View)是Django应用中用于实现某一特定功能的Web页面.比如,一个博客可以有博客展示页面,博客创建页面,评论页面. 2. 视图示例 写入代码 1 #polls/views.py 2 3 from django.http

#1 SQL入门笔记(1)

今天的笔记主要讲解的是数据库的一些常识.和数据库的创建.创建数据库的方法都是差不多的,所以掌握了这个,创建数据库就Ok了(正常使用够了).当然在实际工作中用这个创建数据库还是比较少的.都是用建库工具(eg:PowerDesign)来设计数据库的. ---2014.07.29 常用的数据库: MS: SqlServer2008->.NETIBM: DB2 ->烟草..甲骨文: oracle ->银行,证券...非商业:MYSQL->IBM,Oracle->小型站点ACCESS,