简介: iBATIS 是一个项目,主要用于数据访问对象(data access object,DAO)和对象关系映射(object-relational mapping,ORM)。您可以使用它来轻松处理 Java™ 对象和数据库。对 iBATIS 3 beta 9 的更新在 2010 年 1 月 23 日发布。iBATIS 3 是 iBATIS 的完全重写版并包括了一些重大更新。本文将介绍 iBATIS 3 内的一些新特性。
概念:
iBATIS , 又是一个O/R Mapping的解决方案(例如 hibernate的ORM 也是解决方案之一.)
网上很多人便将其称为ORM , 但是用过的人, 应该都会觉得并不恰当.
与其称之为一个OR Mapping , 倒不如叫它SQL Mapping...
iBATIS 的特点是小巧, 简单. 但是要求需要熟悉SQL , 不像hibernate那样, 可以让你一句sql 都不用写
同时, 我觉得要写挺多的配置文件的. 可能会比较繁琐.
使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统 设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。
以下iBATIS实现:
需要的包有:ibatis jar.jar,Oracle10g.jar
package com;
public class Person {
int id;
String name;
int age;
String sex;
String address;
//setter/getter
}
配置person.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>
<typeAlias alias="person" type="com.Person"/>
<resultMap id="resultmap" class="person">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
<result property="address" column="address"/>
</resultMap>
<statement id="insertPerson" parameterClass="person">
insert into person(id,name,age,sex,address) values(#id#,#name#,#age#,#sex#,#address#)
</statement>
<statement id="findAll" resultMap="resultmap">
select id,name,age,sex,address from person
</statement>
<statement id="deletePerson" parameterClass="int">
delete from person where id=#id#
</statement>
<statement id="updatePerson" parameterClass="person">
update person set name=#name#,#age#=#age#,#sex#=#sex#,#address#=#address# where id=#id#
</statement>
<statement id="findBycount" parameterClass="java.util.Map" resultMap="resultmap">
select * from person where id>#id# and name like #name#
</statement>
</sqlMap>
配置sqlBean.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>
<transactionManager type="jdbc">
<dataSource type="simple">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="JDBC.Username" value="users"/>
<property name="JDBC.Password" value="passwords"/>
</dataSource>
</transactionManager>
<sqlMap resource="person.xml"/>
</sqlMapConfig>
测试类:
public class Client {
public static void main(String[] args){
try {
find();
//delete();
//add();
queryAll();
System.out.println("分页");
pageFind();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static SqlMapClient getSqlMapClient() throws IOException{
Reader reader = Resources.getResourceAsReader("sqlBean.xml");
SqlMapClient sqlmap=SqlMapClientBuilder.buildSqlMapClient(reader);
return sqlmap;
}
public static void queryAll() throws IOException, SQLException{
SqlMapClient sqlmap=getSqlMapClient();
List<Person> list=sqlmap.queryForList("findAll"); //findAll是对应的person.xml里的查询SQL语句id
for (Person person : list) {
System.out.println(person.getId()+" "+person.getName()+" "+person.getAge()+" "+person.getSex()+" "+person.getAddress());
}
}
public static void add() throws IOException, SQLException{
Person p=new Person();
SqlMapClient sqlmap=getSqlMapClient();
System.out.println(sqlmap+"==");
sqlmap.startTransaction();
p.setId(21);
p.setName("啊可");
p.setAge(22);
p.setSex("男");
p.setAddress("深圳");
sqlmap.insert("insertPerson",p);
sqlmap.commitTransaction();
}
public static void delete() throws IOException, SQLException{
SqlMapClient sqlmap=getSqlMapClient();
sqlmap.insert("deletePerson",22);
}
public static void find() throws IOException, SQLException{
SqlMapClient sqlmap=getSqlMapClient();
//模糊查询
Map map=new HashMap();
map.put("id",1);
map.put("name","啊%");
List<Person> bb=sqlmap.queryForList("findBycount",map);
for (Person person : bb) {
System.out.println("模糊查询id:"+person.getId()+"模糊查询name:"+person.getName());
}
}
public static void pageFind() throws IOException, SQLException{
Person p;
SqlMapClient sqlmap=getSqlMapClient();
//分页查询
PaginatedList pagelist=sqlmap.queryForPaginatedList("findAll",3);
do {
System.out.println(pagelist.size()+1);
for (int i = 0; i <pagelist.size(); i++) {
p=(Person)pagelist.get(i);
System.out.println("id:"+p.getId()+"*******"+p.getName());
}
} while (pagelist.nextPage());
}
}