冰浪

哥已不再年轻 - 坚定梦想,毕生追求!
posts - 85, comments - 90, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

[转]Ibatis开发Demo

Posted on 2007-04-11 16:08 冰浪 阅读(1500) 评论(2)  编辑  收藏 所属分类: Frameworks

iBatis是又一个O/R Mapping解决方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,iBatis是能满足你的要求又足够灵活的最简单的解决方案。


第一步:
package com.ibatis;

public class Author {
 private int id;
 private String name;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
}
第二步:author.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="Author">
<!--模块配置-->
<!--设置本映射文件中的别名-->
<typeAlias alias="author" type="com.ibatis.Author" />
<!--
<cacheModel type="LRU" id="authorCache">
 设置缓存有效期,如果超出这个时间,则会清空缓存
 <flushInterval hours="24"></flushInterval>
 指定执行特定的statement时,清空缓存
 <flushOnExecute statement="updateAuthor"/>
 SIZE:本cacheModel最大容纳数据对象的数量
 <property value="1000" name="size"/>
</cacheModel>
需要使用模块配置,如:<select id="getAllAuthor" resultClass="author" cacheModel="authorCache">
把记录使用cacheModel“authorCache”进行缓存,以后程序再使用statement进行数据查询,就直接
去缓存中取数据,而不是去数据库中取数据
-->
<!--Statement配置-->
<!--修改-->
<update id="updateAuthor" parameterClass="author">
 <![CDATA[UPDATE author SET name=#name# WHERE id=#id#]]>
</update>
<!--删除-->
<delete id="deleteAuthor" parameterClass="author">
  delete from author WHERE id = #id#
</delete>
<!--查询所有的记录-->
<select id="getAllAuthor" resultClass="author">
 <![CDATA[SELECT * FROM author]]>
</select>
<!--添加-->
<insert id="insertAuthor" parameterClass="author">
 <![CDATA[INSERT INTO author(id,name) VALUES(#id#,#name#)]]>
</insert>
</sqlMap>
第三步:SqlMapConfig.properties
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=ibatis
username=sa
password=
第四步:SqlMapConfig.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">
<!-- Ibatis配置文件-->
<sqlMapConfig>
<!-- 加载连接数据库属性文件 -->
<properties resource="com/ibatis/SqlMapConfig.properties" />
<!--
cacheModelsEnabled:是否启动SqlMapClient的缓存机制。
enhancementEnabled:是否针对POJO启用字节码增加机制以提升geter/seter的调用效用,为延迟
     加载带来了及大的性能提升。
lazyLoadingEnabled:是否启用延迟加载机制。
maxRequests:最大并大请求数。
maxSessions:最大Session数,即当前最大允许的开发SqlMapClient数
maxTransactions:最大并发事务数。  
-->
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>

<!-- datasource -->
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<!--JDBC驱动-->
<property name="JDBC.Driver" value="${driver}"/>
<!--数据库URL-->
<property name="JDBC.ConnectionURL" value="${url}"/>
<!--数据库用户名-->
<property name="JDBC.Username" value="${username}"/>
<!--数据库密码-->
<property name="JDBC.Password" value="${password}"/>
<!--不知道,在网站上查不出来,有时间再研究-->
<property name="JDBC.DefaultAutoCommit" value="true" />
<!--数据库连接池可维持的最大容量-->
<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 author"/>
<!--是否允许检查连接状态-->
<property name="Pool.PingEnabled" value="false"/>
<!--对持续连接超过设定值的连接进行检查-->
<property name="Pool.PingConnectionsOlderThan" value="1"/>
<!--对空闲超过设定值的连接进行检查-->
<property name="Pool.PingConnectionsNotUsedFor" value="1"/>
</dataSource>
</transactionManager>
<!--加载SqlMap文件-->
<sqlMap resource="com/ibatis/author.xml" />
</sqlMapConfig>
第五步:
package com.ibatis;

import java.io.IOException;
import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class SqlMapConf {
 //初始化SqlMapClient
 private static SqlMapClient sqlmapclient;
 static{
  //定义ibatis配置文件的路径
  String resource="com/ibatis/SqlMapConfig.xml";
  try {
   //读取ibatis配置文件
   Reader reader=Resources.getResourceAsReader(resource);
   //通过SqlMapClientBuilder创建SqlMapClient
   sqlmapclient=SqlMapClientBuilder.buildSqlMapClient(reader);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   System.out.println("找不到SqlMapConfig.xml文件~~");
  }
 }
 public static SqlMapClient getInstance(){
  //返回sqlmapclient,SqlMapClient是ibatis的核心主建,提供数据操作的基础平台
 
  return sqlmapclient;
 }
 /**
  * SqlMapClient的另一种创建方式
  * XmlSqlMapClientBuilder xmlbuilder=new XmlSqlMapClientBuilder();
  * SqlMapClient sqlmapclient=xmlbuilder.builderSqlMap(reader);
  * XmlSqlMapClientBuilder是ibatis2.0之后版本新引入的组件,用以取代1.X版本中的
  * XmlSqlMapBuilder,其作用就是创建SqlMapClient。
  */
}
第六步:
package com.ibatis;

import java.sql.SQLException;
import java.util.List;
import java.util.*;
import com.ibatis.sqlmap.client.SqlMapClient;
/**
 * ibatis的事务管理器,目前只支持三种:JDBC,JTA,EXTERNAL
 * JDBC:通过传统的JDBC CONNECTION.COMIT/rollback实现事务支持
 * JTA:使用容器提供的JTA服务实现全局事务管理
 * EXTERNAL:外部事务管理,如EJB中使用IBATIS,通过EJB的部署配置即可实现自动的事务管理机制
 * 。此时IBATIS将把所有的事务委托给外部容器进行管理
 */
public class IbatisClient {
 private static SqlMapClient sqlmapclient=SqlMapConf.getInstance();
 //根据主健ID修改NAME
 public static void updateAuthor(int id,String name){
  Author author=new Author();
     author.setId(id);
     author.setName(name);
     try {
      //事务开始,用的是JDBC的事务管理
      sqlmapclient.startTransaction();
   sqlmapclient.update("updateAuthor",author);
   sqlmapclient.commitTransaction();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println("修改错误~~");
  }
  finally{
   try {
    sqlmapclient.endTransaction();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 //查询所有的记录,返回一个集合
 public static List findAll(){
  List list=null;
  try {
   sqlmapclient.startTransaction();
   //0:设置从第几条记录开始
   //1:设置显示记录记录
   //list=sqlmapclient.queryForList("getAllAuthor",null,0,1);
   list=sqlmapclient.queryForList("getAllAuthor",null);
   sqlmapclient.commitTransaction();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println("查询错误~~");
  }
  finally{
   try {
    sqlmapclient.endTransaction();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return list;
 }
 //添加操作
 public static boolean insert(int id,String name){
  boolean bool=false;
  Author author=new Author();
  author.setId(id);
  author.setName(name);
  try {
   sqlmapclient.startTransaction();
   sqlmapclient.insert("insertAuthor",author);
   bool=true;
   sqlmapclient.commitTransaction();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   bool=false;
   e.printStackTrace();
   System.out.println("添加错误~~");
  }
  finally{
   try {
    sqlmapclient.endTransaction();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return bool;
 }
 //删除操作
 public static boolean delete(int id){
  boolean bool=false;
  Author author=new Author();
  author.setId(id);
  try {
   sqlmapclient.commitTransaction();
   sqlmapclient.delete("deleteAuthor",author);
   bool=true;
   sqlmapclient.startTransaction();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   bool=false;
   e.printStackTrace();
   System.out.println("删除错误~~");
  }
  finally{
   try {
    sqlmapclient.endTransaction();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return bool;
 }
    public static void main(String str[]){
     //删除
     //boolean bool=IbatisClient.delete(3);
     //添加
     //boolean bool=IbatisClient.insert(3,"wanwu");
     //修改
     //IbatisClient.updateAuthor(3,"jj");
     //查询所有的记录
     List list=IbatisClient.findAll();
     Iterator iterator=list.iterator();
     while(iterator.hasNext()){
      Author author=(Author)iterator.next();
      System.out.println("ID ="+author.getId());
      System.out.println("NAME ="+author.getName());
     }
    }
}
以上是一个简单的Ibatis的增,删,改查的例子


 


评论

# re: [转]Ibatis开发Demo  回复  更多评论   

2007-08-17 14:26 by b
bbbbbbbbbbbbbb

# re: [转]Ibatis开发Demo  回复  更多评论   

2008-05-09 12:11 by haix
xml文件去哪里了

只有注册用户登录后才能发表评论。


网站导航: