http://oldboy-bj.taobao.com/

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
iBATIS , 又是一个O/R Mapping的解决方案(例如 hibernate的ORM 也是解决方案之一.)
网上很多人便将其称为ORM , 但是用过的人, 应该都会觉得并不恰当.
与其称之为一个OR Mapping , 倒不如叫它SQL Mapping...

iBATIS 的特点是小巧, 简单. 但是要求需要熟悉SQL , 不像hibernate那样, 可以让你一句sql 都不用写
同时, 我觉得要写挺多的配置文件的. 可能会比较繁琐.
Java代码

  • public
    class User {  
  •     private
    int id;  
  •     private String username;  
  •     private String userpwd;  
  •     private String userdesc;  
  •         //Sets and Gets...
  • }  

public class User {        private int id;        private String username;        private String userpwd;        private String userdesc;        //Sets and Gets...}
接下来... 马上看看... dao里面的一个方法有多简单~~ UserDao.java


Java代码

  • public
    static List getAllUsers() throws SQLException {  
  •                SqlMapClient sqlMap = Utils.getSqlmap();  
  •         try {  
  •             List li = sqlMap.queryForList("getAllUsers");  
  •         } catch (SQLException e) {  
  •                 e.printStackTrace();  
  •         }  
  •         return li;  
  • }  

public static List getAllUsers() throws SQLException {                               SqlMapClient sqlMap = Utils.getSqlmap();                try {                        List li = sqlMap.queryForList("getAllUsers");                                        } catch (SQLException e) {                                e.printStackTrace();                }                return li;}

是的, dao里面的一个方法只需要这么几句话.
看看怎么实现的吧...

首先, 我们需要一个跟 User 类对应的 配置文件 User.xml(名字相同并不是硬性规定, 只是方便管理)


Xml代码

  • <?xml
    version="1.0"
    encoding="UTF-8"
    ?>
  • <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"  
  •    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  • <sqlMap
    namespace="User">
  •         <typeAlias
    alias="user"
    type="pojo.User"/>
  •     <select
    id="getAllUsers"
    resultClass="user">
  •         select * from user order by id;   
  •     </select>
  • </sqlMap>


<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"   "http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap namespace="User">        <typeAlias alias="user" type="pojo.User"/>        <select id="getAllUsers" resultClass="user">                select * from user order by id;         </select></sqlMap>
接下来, 需要一个另一个配置文件, 将User.xml 加入 其中, 同时还要在里面配置数据源---- 即数据库的连接等等...   SqlMapConfig.xml

Xml代码

  • <?xml
    version="1.0"
    encoding="UTF-8"?>
  • <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"  
  •     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
  • <sqlMapConfig>
  •     <properties
    resource="sqlmap.properties"/>
  •     <transactionManager
    type="JDBC">
  •         <dataSource
    type="SIMPLE">
  •             <property
    name="JDBC.Driver"
    value="${jdbc.driverClassName}"
    />
  •             <property
    name="JDBC.ConnectionURL"
    value="${jdbc.url}"
    />
  •             <property
    name="JDBC.Username"
    value="${jdbc.username}"
    />
  •             <property
    name="JDBC.Password"
    value="${jdbc.password}"
    />
  •         </dataSource>
  •     </transactionManager>
  •     <sqlMap
    resource="sql/User.xml"
    />
  • </sqlMapConfig>


<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"><sqlMapConfig>                <properties resource="sqlmap.properties"/>                        <transactionManager type="JDBC">                <dataSource type="SIMPLE">                            <property name="JDBC.Driver" value="${jdbc.driverClassName}" />                        <property name="JDBC.ConnectionURL" value="${jdbc.url}" />                        <property name="JDBC.Username" value="${jdbc.username}" />                        <property name="JDBC.Password" value="${jdbc.password}" />                </dataSource>        </transactionManager>        <sqlMap resource="sql/User.xml" /></sqlMapConfig>

在这里, 我们把数据库的相关参数保存在了另一个文件中, sqlmap.properties

Java代码

  • jdbc.driverClassName=com.mysql.jdbc.Driver  
  • jdbc.url=jdbc:mysql://localhost:3306/myblog
  • jdbc.username=root  
  • jdbc.password=netjava  

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/myblogjdbc.username=rootjdbc.password=netjava
这样做的好处, 相信大家也明白..  下次我们再写一个项目的时候, 只需要把这个文件copy 过去, 改掉其中的数据库连接就ok啦 ,  也算是资源的充分利用吧..

至此, 所有的配置文件 都已经上场, 当然上面写的都是最简单的测试, 看起来比较没有那么繁琐, 实际应用时候, 可能最麻烦的地方就是在 配置文件的 sqlmap 的编写...
前面 UserDao.java 的方法中, 有这么一句

Java代码

  • SqlMapClient sqlMap = Utils.getSqlmap();  

SqlMapClient sqlMap = Utils.getSqlmap();
Utils 类 就是我们抽取其中的初始化的代码, 单独写成一个类, 当然还是方便重用哈.同时采用的是单实例模式, 相当环保.
  Utils.java

Java代码

  • public
    class Utils{  
  •     private
    static SqlMapClient sqlMapper;   
  •     public
    static
    synchronized SqlMapClient getSqlmap()   
  •     {     
  •           if(sqlMapper==null)   
  •           {   
  •               try {   
  •                   Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");   
  •                   sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);   
  •                   reader.close();   
  •                 } catch (IOException e) {   
  •                     e.printStackTrace();   
  •                 }   
  •           }   
  •             return sqlMapper;   
  •     }   
  • }  

public class Utils{                private static SqlMapClient sqlMapper;     public static synchronized SqlMapClient getSqlmap()     {             if(sqlMapper==null)           {               try {                   Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");                   sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);                   reader.close();                 } catch (IOException e) {                     e.printStackTrace();                 }           }             return sqlMapper;     } }

好了,  所有的相关文件都已经上场..  当然, 加上 iBATIS的 jar包是前提 , 还是提醒下, 要注意版本问题...
项目的结构如下图所示:



最后, 整理一下思路吧!


UserDao 是怎样操作数据库的???
首先 , Utils 通过SqlMapConfig.xml里面的配置, 连接到数据库, 取得SqlMap , 同时User.xml 将Sql查询映射成java中可以调用的bean, 通过SqlMap 调用这些bean 就是在执行想对应的sql语句...

本文转自www.35java.com

posted on 2010-12-31 21:35  老男孩咖啡  阅读(190)  评论(0)    收藏  举报