1、ibatis开发iBatis是又一个O/R Mapping解决方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,iBatis是能满足你的要求又足够灵活的最简单的解决方案。iBatis最大的特点是简单,最新版本2.0(下载),和1.0相比,主要改动在XML配置文件上,不过,只要有SQL基础,相信你不用教程也能看明白。下面我们看一个最简单的例子入门。我们先建一个表Account,包括字段username,varchar(20), pk和password, varchar(20),随便填入一些数据。然后编写iBatis必
2、须的配置文件sql-map-config.xml,文件名随意,内容如下:!DOCTYPE sqlMapConfig PUBLIC -/iBATIS.com/DTD SQL Map Config 2.0/EN 其他部分你不用管它,我是直接copy的示例配置,只需注意红色部分,配置好数据源即可。我用的是Access,所以用JdbcOdbc驱动。如果你用MySQL或其他数据库,更改相应的属性。然后注意到这个配置文件还引用了一个Account.xml,没错,iBatis把每个需要O/R Mapping的Java对象关联到一个xml配置文件,我们需要把一个Account表映射到一个Account类:pa
3、ckage example;public class Account private String username; private String password; 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=passw
4、ord; 编写Account.xml文件:!DOCTYPE sqlMap PUBLIC -/iBATIS.com/DTD SQL Map 2.0/EN select * from Account whereusername = #value# insert into Account (username, password) values ( #username#, #password# ) 我们主要关心红色部分。以为例,这里定义了一个查询方法,名字为getAccount,传入参数为String,返回类型resultClass就是example.Account类,select语句相信你已经很熟悉
5、了,#value#是我们将要传进去的String。与之类似,不过注意到#username#和#password#,由于参数是Account类,它们将被 Account.getUsername()和Account.getPassword()替换。所以,只要你会写SQL,就能非常容易地写出配置文件。最后便是如何使用iBatis实现O/R映射。首先初始化iBatis获得一个SqlMapClient对象:com.ibatis.sqlmap.client.SqlMapClient sqlMap = null; try java.io.Reader reader = mon.resources.Resou
6、rces.getResourceAsReader (sql-map-config.xml); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); catch (Exception e) e.printStackTrace(); 然后就可以异常方便地使用O/R Mapping了,比如查询username=admin的Account: try Account accout = (Account)sqlMap.queryForObject(getAccount, admin); . 或者创建一个新的Account: try Account
7、account = new Account(); account.setUsername(micheal); account.setPassword(1234); sqlMap.insert(createAccount, account); 运行时把两个配置文件和iBatis的3个jar包放到classpath中,要求jdk1.4版本。总结:iBatis确实简单灵活,上手容易,代码很少,配置稍嫌复杂。不足之处一是没有方便的工具来自动生成xml配置文件,二是不管是query还是 insert都只能传入一个参数,有时不得不把两个参数包装成一个类传进去。另外对常见的1:1,1:N关系的支持不如Hib
8、ernate。不过,大多数 时候iBatis已经完全可以满足我们的需求。Spring很好的集成了iBatis,你可以参考Spring的JPetStore示例。需要注意的是使 用iBatis 2.0和1.0有较大区别,主要体现在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地实现DAO模式。介绍iBATIS是以SQL为中心的持久化层框架。能支持懒加载、关联查询、继承等特性。iBATIS不同于一般的OR映射框架(eg:hibernate)。OR映射框架,将数据库表、字段等映射到类、属性,那是一种元数据(meta-data)映射。iBATIS则是将SQL查
9、询的参数和结果集映射到类。因此可以说,iBATIS做的是SQL Mapping的工作。它把SQL语句看成输入以及输出,结果集就是输出,而where后面的条件参数则是输入。iBATIS能将输入的普通POJO对象、Map、XML等映射到SQL的条件参数上,同时也可以将查询结果映射到普通POJO对象(集合)、Map、XML等上面。iBATIS使用xml文件来映射这些输入以及输出。能大大减少数据库存储部分的代码量,而且可以非常方便的利用SQL中的一些小技巧。简单示例基于ibatis-2.3.0.677版本。1、创建新的项目,并引入jar包a) ibatis-2.3.0.677.jarb) mysql驱
10、动2、在类路径中(classes下)提供ibatis的配置文件:sqlMapConfig.xml 3、创建实体类:User.javapackage com.ibatis.model;publicclass User privateintid; private String username; private String password; publicint getId() returnid; publicvoid setId(int id) this.id = id; public String getPassword() returnpassword; publicvoid setPas
11、sword(String password) this.password = password; public String getUsername() returnusername; publicvoid setUsername(String username) this.username = username; 4、创建针对User对象的CRUD的xml映射配置:User.xml select * from t_userselect * from t_user where id=#id#insert into t_user values ( null,#username#,#passwor
12、d#)update t_user set username = #username#,password=#password#where id=#id#delete from t_user where id=#id#5、创建测试程序测试:package com.crm.model;import java.io.Reader;import java.util.Iterator;import java.util.List;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.iba
13、tis.sqlmap.client.SqlMapClientBuilder;/*最简单的形式!*authorq*/publicclass UserTest /* *paramargs */ publicstaticvoid main(String args) throws Exception /从配置文件中得到SqlMapClient对象 Reader reader = Resources.getResourceAsReader(sqlMapConfig.xml); SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(r
14、eader); reader.close(); /创建用户数据 for(int i=0; i10; i+) User user = new User(); user.setUsername(用户+i); user.setPassword(密码+i); sqlMapper.insert(insertUser, user); /查询用户数据 List users = sqlMapper.queryForList(selectAllUsers); for (Iterator iter = users.iterator(); iter.hasNext();) User user = (User) it
15、er.next(); System.out.println(user.getUsername(); /查询特定用户的数据 User user = (User)sqlMapper.queryForObject(selectUser, 1); System.out.println(用户【id=+1+】的名称是:+user.getUsername(); /更新用户的信息 user = new User(); user.setId(3); user.setUsername(更改之后的用户名称); user.setPassword(密码被更改); sqlMapper.update(updateUser, user); /删除用户的信息 sqlMapper.delete(deleteUser, 6);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1