最简单的 iBatis 入门例子
iBatis 是一个 O/R Mapping 解决方案, iBatis 最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能, iBatis 是能满足你的要求又足够灵活的最简单的解决方案。下面我们看一个最简单的入门例子,是《 ibatis 开发指南》上的例子改的,不过上面讲的不仔细,我开始学的时候搞了一个晚上才把那个例子跑起来的,相信一些朋友也和我一样,在入门的时候有一点小郁闷,我把整个工程项目打包了供朋友 下载 ,工具是 eclipse3.2+myeclipse5.0 ,导入即可运行,数据库用的是 MySQL 。也可以改用别的数据库!
先建数据库和表吧; sql 语句我导出来了:
/*

SQLyog 企业版 - MySQL GUI v4.1

主机 - 5.0.7-beta-nt : 数据库 - sample

*********************************************************************

服务器版本 : 5.0.7-beta-nt

create database if not exists `sample`;

USE `sample`;

/* 数据表 `t_user` 的表结构 */

drop table if exists `t_user`;

CREATE TABLE `t_user` (

`id` int ( 11 ) NOT NULL auto_increment,

` name ` varchar ( 50 ) default NULL ,

`sex` int ( 11 ) default NULL ,

PRIMARY KEY (`id`)

) ENGINE = InnoDB DEFAULT CHARSET = latin1;


/* 数据表 `t_user` 的数据 */

insert into `t_user` values ( 1 , ' zhupan ' , 1 ),( 2 , ' zhupan ' , 2 ),( 3 , ' 3 ' , 3 ),( 4 , ' 4 ' , 4 ),( 5 , ' 5 ' , 5 );
整个工程目录结构如下: (图片未能显示,附件里面有)
lib 包下面的文件: (图片未能显示,附件里面有)
下面开始编写每个文件:
编写 iBatis 必须的配置文件 SqlMapConfig.xml ,放在包 com.ctgusec.zhupan.maps 下,文件名可以任意改,内容如下:
<? 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 >

< settings cacheModelsEnabled = "true" enhancementEnabled = "true"

lazyLoadingEnabled = "true" errorTracingEnabled = "true" maxRequests = "32"

maxSessions = "10" maxTransactions = "5" useStatementNamespaces = "false" />


< transactionManager type = "JDBC" >

< dataSource type = "SIMPLE" >

< property name ="JDBC.Driver" value ="com.mysql.jdbc.Driver" />

< property name ="JDBC.ConnectionURL" value ="jdbc:mysql://localhost/sample" />

< property name ="JDBC.Username" value ="root" />

< property name ="JDBC.Password" value ="" />

< property name = "Pool.MaximumActiveConnections" value = "10" />

< property name = "Pool.MaximumIdleConnections" value = "5" />

< property name = "Pool.MaximumCheckoutTime" value = "120000" />

< property name = "Pool.TimeToWait" value = "500" />

< property name = "Pool.PingQuery" value = "select 1 from sample" />

< property name = "Pool.PingEnabled" value = "false" />

< property name = "Pool.PingConnectionsOlderThan" value = "1" />

< property name = "Pool.PingConnectionsNotUsedFor" value = "1" />

</ dataSource >

</ transactionManager >

< sqlMap resource = "com/ctgusec/zhupan/maps/User.xml" />

</ sqlMapConfig >
如果不用 mysql 数据库,需要重新配置数据源(红色加粗字体标出),更改相应的属性即可。
然后注意到这个配置文件还引用了一个 User.xml , iBatis 把每个需要 O/R Mapping 的 Java 对象关联到一个 xml 配置文件,我们需要把 t_user 表映射到一个 User 类:
package com.ctgusec.zhupan.model;

import java.io.Serializable;



public class User implements Serializable {



/**

* @author zhupan

*/

private static final long serialVersionUID = 1L ;


private Integer id ;


private String name ;


private Integer sex ;



public User() {

}



public Integer getId() {

return this . id ;

}



public void setId(Integer id) {

this . id = id;

}



public String getName() {

return this . name ;

}



public void setName(String name) {

this . name = name;

}



public Integer getSex() {

return this . sex ;

}



public void setSex(Integer sex) {

this . sex = sex;

}

}
编写 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 = "User" >


< typeAlias alias = "user" type = "com.ctgusec.zhupan.model.User" />

< select id = "getUser" parameterClass = "java.lang.String"

resultClass = "user" >

<![CDATA[ select name, sex from t_user where name = #name# ]]>

</ select >


< select id = "getAllUser" resultClass = "user" >

<![CDATA[ select name, sex from t_user ]]>

</ select >


< update id = "updateUser" parameterClass = "user" >

<![CDATA[ UPDATE t_user SET name=#name#, sex=#sex# WHERE id = #id# ]]>

</ update >


< insert id = "insertUser" parameterClass = "user" >

INSERT INTO t_user ( name, sex) VALUES ( #name#, #sex# ) </ insert >


< delete id = "deleteUser" parameterClass = "java.lang.String" >

delete from t_user where id=#value#

</ delete >

</ sqlMap >
通过 <insert> 、 <delete> 、 <update> 、 <select> 节点,分别定义了针对 TUser 对象的增删改查操作。在这些节点中,我们指定了对应的 SQL 语句: ID 指定了操作 ID ,之后我们可以在代码中通过指定操作 id 来执行此节点所定义的操作,如: sqlMap.update("updateUser",user); ID 设定使得在一个配置文件中定义两个同名节点成为可能(两个 update 节点,以不同 id 区分) parameterClass 指定 了 操 作 所 需的 参 数 类型 , 此例 中 update 操 作 以 com.ctgusec.zhupan.model .User 类型的对象作为参数,目标是将提供的 User 实例更新到数据库。 parameterClass="user" 中, user 为“ com.ctgusec.zhupan.model.User ”类的别名,别名可通过 typeAlias 节点指定,如示例配置文件中的: <typeAlias alias="user" type="com.ctgusec.zhupan.model.User"/> “ #name# ”在运行期会由传入的 user 对象的 name 属性填充。 “ #sex# ”,将在运行期由传入的 user 对象的 sex 属性填充。“ #id# ”,将在运行期由传入的 user 对象的 id 属性填充。
只要你会写 SQL ,就能非常容易地写出配置文件。
最后便是如何使用 iBatis 实现 O/R 映射 , 测试给个例子:
package com.ctgusec.zhupan;

import java.sql.SQLException;

import java.util.List;

import com.ctgusec.zhupan.model.User;

import com.ibatis.sqlmap.client.SqlMapClientBuilder;


/**

*

* @author zhupan

*/


public class ExampleMain {



public static void update() {

// 首先初始化 iBatis 获得一个 SqlMapClient 对象
String resource = " com/ctgusec/zhupan/maps/SqlMapConfig.xml " ;

com.ibatis.sqlmap.client.SqlMapClient sqlMap = null ;


try {

java.io.Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader(resource);

sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);


} catch (Exception e) {

e.printStackTrace();

}

// sqlMap 系统初始化完毕,开始执行 update 操作
try {

sqlMap.startTransaction();

User user = new User();

user.setId( new Integer( 1 ));

user.setName( " zhupan " );

user.setSex( new Integer( 1 ));

sqlMap.update( " updateUser " , user);

sqlMap.commitTransaction();


} catch (SQLException e) {

System.out.println(e.getMessage());


} finally {


try {

sqlMap.endTransaction();


} catch (SQLException e) {

e.printStackTrace();

}

}

}


public static List getUser() {

// 首先初始化 iBatis 获得一个 SqlMapClient 对象
String resource = " com/ctgusec/zhupan/maps/SqlMapConfig.xml " ;

com.ibatis.sqlmap.client.SqlMapClient sqlMap = null ;

List user = null ;


try {

java.io.Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader(resource);

sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);


} catch (Exception e) {

e.printStackTrace();

}

// sqlMap 系统初始化完毕,开始执行 getAllUser 操作
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();

}

}

return user;

}


public static void main(String[] args) {

update();

List user = getUser();

for ( int i = 0 ;i < user.size();i ++ )


{

System.out.println(((User)user.get(i)).getName());

}

}

}
posted on 2008-08-01 11:17
chencj 阅读(804)
评论(0) 编辑 收藏 所属分类:
orm工具