Ibatis初学的一个例子,新手可以尽快上手。

    IBATIS是优秀的半ORM框架,原先一直在用HIBERNATE,不过对HIBERNATE过于强大但问题多多的ORM方案十分反感。遂翻阅了一下IBATIS。自己写了一个例子,不用SPRING+STRUTS。

    首先去ibatis.apache.org下载最新的2.X的ibatis包,我用的是JAR包,没有用ibator插件调试安装。本地环境,ORACLE数据库,JDK1.6。

    ibatis的核心是sqlmap框架。
   
    新建一个JAVA工程即可,导入ibatisJAR包。我的是ibatis2.3.4-768.jar。新建一个XML文件,sql-map-config.xml,这个文件用于配置配置JDBC事务管理。

    sql-map-config.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>
        <settings
          cacheModelsEnabled="true"    <!--全局性地启用或禁用SqlMapClient的所有缓存model。调试程序时使用-->
          enhancementEnabled="true"   <!--全局性地启用或禁用运行时字节码增强,以优化访问Java Bean属性的性能,同时优化延迟加载的性能。-->
          lazyLoadingEnabled="true"  <!--全局性地启用或禁用SqlMapClient的所有延迟加载。调试程序时使用。-->
          maxRequests="32"    <!--同时执行SQL语句的最大线程数-->
          maxSessions="10"    <!--同一时间内活动的最大session数-->
          maxTransactions="5"   <!--同一时间内允许的最大SqlMapClient.startTransaction()的线程数-->
          useStatementNamespaces="false"
        />
        <transactionManager type="JDBC" >    <!--JDBC事务管理器-->
        <dataSource type="SIMPLE">
      <propertyname="JDBC.Driver"                                     value="oracle.jdbc.driver.OracleDriver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.0.16:1521:orcl"/>
      <property name="JDBC.Username" value="procczg"/>
      <property name="JDBC.Password" value="procczg"/>
    </dataSource>
  </transactionManager>
  <sqlMap resource="ibatis/Taxpayer.xml" />    <!--这是引用所有的SQL配置文件,ibatis在此处声明要调用到的SQL文件-->
</sqlMapConfig>

    



    我们在表里有一张数据表 :
        create table TAXPAYER
(
  ID       NUMBER(10),
  NSR_NAME VARCHAR2(256),
  ORG_ID   NUMBER,
  NSRSBH   VARCHAR2(20),
  GXSJ     VARCHAR2(20)
)

数据请自行录入。


taxpayer对应的JAVABEAN:
   
        public class Taxpayer {


	/** 业务字段 */
	private int id;
	private String nsr_name;
	private String org_id;
	private String nsrsbh;
	private String gxsj;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNsr_name() {
		return nsr_name;
	}
	public void setNsr_name(String nsr_name) {
		this.nsr_name = nsr_name;
	}
	public String getOrg_id() {
		return org_id;
	}
	public void setOrg_id(String org_id) {
		this.org_id = org_id;
	}
	public String getNsrsbh() {
		return nsrsbh;
	}
	public void setNsrsbh(String nsrsbh) {
		this.nsrsbh = nsrsbh;
	}
	
	public String getGxsj() {
		return gxsj;
	}
	public void setGxsj(String gxsj) {
		this.gxsj = gxsj;
	}

}

    



    接下来,我们新建一个taxpayer.xml,所有对taxpayer表的SQL操作,全部写在这个文件里,
     taxpayer.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="Taxpayer">
	
   
      <statement id="getTaxpayer"  resultClass="ibatis.Taxpayer">
		select * from taxpayer where id = #id#  
    and org_id = #org# and nsr_name like '%$nsrmc$%'
      </statement>

</sqlMap>

    
 

    这里写了一个需要有3个条件的查询,并且把条件适当复杂一下,用个LIKE条件。注意,这个SQL配置里面,我们用到了3个参数。下面我们要在调用该SQL的时候,分别给这3个参数赋值。阅读了一下ibatis的中文手册,我们可以采用MAP的方式赋值。下面开始写测试类,需要调用ibatis库下的sqlMap框架类来实现:
   
    
    import java.io.IOException;
    import java.io.Reader;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import com.ibatis.common.resources.Resources;
    import com.ibatis.sqlmap.client.SqlMapClient;
    import com.ibatis.sqlmap.client.SqlMapClientBuilder;


    public class IbatisTest {

	/**
	 * @param args
	 * author by 刘峰
	 * 2010-6-22下午04:47:21
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		SqlMapClient s = null;
		try {
			Reader reader = Resources.getResourceAsReader("ibatis/sql-map-config.xml");
			s = SqlMapClientBuilder.buildSqlMapClient(reader);
			
			Map mParameter = new HashMap();
			mParameter.put("id", new Integer(10533));
			mParameter.put("org", new Integer(16));
			mParameter.put("nsrmc", "纳税人名称");
			Taxpayer t = (Taxpayer)s.queryForObject("getTaxpayer", mParameter);
						
			System.out.println(t.getId());
			System.out.println(t.getNsr_name());
			System.out.println(t.getNsrsbh());
			System.out.println(t.getOrg_id());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

    


    赋值时候,Integer,String, Character等常用的对象类型写到MAP里面去即可。不过Ibatis对Long的支持并不太好。本人是初学,望有知情者告知一下Long的支持情况。

    新增,修改,删除操作请自行完成。

    使用后感想,个人用下来,ibatis等于把业务中的代码部分和数据库操作部分完好地分离开来。使开发过程中的层次清晰。避免了在JAVA里出现SQL语句这样维护极其麻烦的处理方式。同时很好的支持存储过程,动态拼SQL等一些在实际应用中经常碰到的情况。
    缺点:由于是半orm的东西,对于一张表的操作,定义非常繁琐,JAVABEAN和IBATIS里SQL的配置文件其实是没有任何关系。导致的问题是,如果客户在表里新增一个字段,并且要把这个字段作为查询字段,我们不光要改JAVA文件,添加属性,同时还要去改IBATIS的相应SQL文件,相应的查询、新增、修改,只要涉及到的,全部都要统一地做修改。这对开发人员来说,工作量极其繁琐,而且很容易报错。HIBERNATE不存在这个问题,但是HIBERNATE的性能实在有待商榷。

   

你可能感兴趣的:(java,sql,xml,Hibernate,ibatis)