网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.toUTCString 方法.
.[JAVA100例]071、使用JDOM操作XML.
.wait()和notify()的简单调用程序.
.Java中类似于C语言中Sizeof功能实.
.利用Java实现zip压缩/解压缩.
.设计心得——用 XDoclet 减少代码.
.J2SE简介.
.继承:重新使用接口.
.为RMI实现类Jini的发现机制.
.Java中鲜为人知的缺点(中).
.JBuilder 7 WebLogic 6.X 详细配.
.struts构建文件上传(2).
.谈谈TCP和UDP的一些简单应用.
.初学Java要注意什么.
.问题解决分析:String Buffer的小.
.在咖啡里加糖 论Java世界的Ruby.
.使用JWhich工具管理CLASSPATH.
.Java程序设计基础入门之慨述.
.jdk1.4_01实现Applet的数字签名认.
.关于Java编程语言中EJB最新技术的.

使用Annotation设计持久层

发表日期:2008-1-5


    这篇文章的想法来自于过去的两篇文章:《设计自己的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.     }


上一篇:JVM技术,反射与动态代理 人气:679
下一篇:Eclipse中报错的解决方案 人气:599
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐