IBATIS

简介: 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());
 }
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值