国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用Annotation設計持久層

2019-11-18 15:32:44
字體:
來源:轉載
供稿:網友
    這篇文章的想法來自于過去的兩篇文章:《設計自己的MVC框架》《設計模式之事務處理》
鏈接:
http://java.chinaitlab.com/model/532056.Html
http://java.chinaitlab.com/model/533095.html

代碼下載同樣在www.126.com的郵箱里,用戶名 sharesources 密碼 javafans

    本文只是學習性質的文章,我一開始的想法就是修改《設計模式之事務處理》,提供Annotation來提供事務支持,支持到方法級別。通過引入一個 @Transaction標注,假如被此標注的方法將自動享受事務處理。目的是學習下Annotation和加深下對聲明式事務處理的理解。

    Annotation是JDK5引入的新特性,現在越來越多的框架采用此特性來代替煩瑣的xml配置文件,比如hibernate,ejb3, sPRing等。對Annotation不了解,請閱讀IBM網站上的文章,還有推薦javaeye的Annotation專欄:http: //www.javaeye.com/subject/Annotation

    代碼的示例是一個簡單的用戶治理例子。

    首先,環境是MySQL+jdk5+myeclipse5+tomcat5,在mysql中建立一張表adminusers:
  1.     create table adminusers(id int(10) auto_increment not null primary key,
  2.      name varchar(10) not null,
  3.      passWord varchar(10) not null,
  4.      user_type varchar(10));
 
    然后在tomcat下建立一個數據源,把代碼中的strutslet.xml拷貝到tomcat安裝目錄下的 /conf/Catalina/localhost目錄里,請自行修改文件中的數據庫用戶名和密碼,以及數據庫名稱。另外,把mysql的 jdbc驅動拷貝到tomcat安裝目錄下的common/lib目錄。這樣數據源就建好了。在web.xml中引用:
  1.    <resource-ref>
  2.         <description>DB Connection</description>
  3.         <res-ref-name>jdbctest</res-ref-name>
  4.         <res-type>javax.sql.DataSource</res-type>
  5.         <res-auth>Container</res-auth>
  6.     </resource-ref>
    
    我的例子只是在《設計模式之事務處理》的基礎上改造的,在那篇文章里,我講解了自己對聲明式事務處理的理解,并利用動態代理實現了一個 TransactionWrapper(事務包裝器),通過業務代理工廠提供兩種版本的業務對象:經過事務包裝的和未經過事務包裝的。我們在默認情況下包裝業務對象中的所有方法,但實際情況是,業務對象中的很多方法不用跟數據庫打交道,它們根本不需要包裝在一個事務上下文中,這就引出了,我們為什么不提供一種方式來配置哪些方法需要事務控制而哪些并不需要?甚至提供事務隔離級別的聲明?很自然的想法就是提供一個配置文件,類似spring式的事務聲明。既然JDK5已經引入Annotation,相比于配置文件的煩瑣和輕易出錯,我們定義一個@Transaction的annotation來提供此功能。

    看下Transaction.java的代碼:
 
  1.     package com.strutslet.db;
  2.     import java.lang.annotation.Documented;
  3.     import java.lang.annotation.ElementType;
  4.     import java.lang.annotation.Retention;
  5.     import java.lang.annotation.RetentionPolicy;
  6.     import java.lang.annotation.Target;
  7.     import java.sql.Connection;
  8.     @Target(ElementType.METHOD)
  9.     @Retention(RetentionPolicy.RUNTIME)
  10.     @Documented
  11.     public @interface Transaction {
  12.        //事務隔離級別,默認為read_committed
  13.        public int level() default Connection.TRANSACTION_READ_COMMITTED    ;
  14.     }



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大洼县| 社会| 墨竹工卡县| 兴宁市| 平定县| 蒲城县| 汉沽区| 宝清县| 夏津县| 专栏| 桑植县| 蒙阴县| 尚志市| 楚雄市| 无为县| 玉门市| 灵璧县| 泰来县| 徐汇区| 宜兴市| 乡宁县| 安庆市| 祁阳县| 马龙县| 会东县| 德保县| 商都县| 竹北市| 香港| 德格县| 榆林市| 潞西市| 阳山县| 灯塔市| 资兴市| 台东县| 乌拉特前旗| 同仁县| 栾城县| 图片| 互助|