最简单的 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 阅读(802)
评论(0) 编辑 收藏 所属分类:
orm工具