spring+hibernate多层web开发eclipse下的开发模板

  • 1. xdoclet生成hbm配置文件和sql语句。
    2. xdoclet生成spring的配置文件applicationContext.
    3. 容器管理事务并解决延迟加载问题.
    4. 解决国际化和中文问题.
    5. bo、dao、business service、controller、view(jstl或jsp),一共五层结构。
    6. 表单绑定、表单验证。能绑到bo的尽量使用bo来绑定,不能绑到bo就要自己做command(类似于struts 的ActionForm)。
    7. Dao测试用例的设计技巧。Dao测试用例的设计要做到(我总结的经验,对错否还望指正):

    • (1) 独立性: 测试使用的数据记录由测试程序自己生成.
      (2) 可移植性:通过CVS check out到另外机器也能通过。--公司领导在其机器上check out 后运行测试看到绿色也开心。
      (3) 对数据库无入侵性:测试程序生成的数据记录最后也由自己删除。
      (4) 测试完全性:尽力保证测完所有方法且当然希望是通过的,要做到这点有点难,特别是涉及多表查询时,所以我只说是“尽力”。

    Service层的测试用例也应该这样设计的,但有时需要初始化的数据量太大,最后要删除的数据也太多,我感觉得不偿失,大家可量力而行。
    8. 使用Hibernate映射解决树形数据结构的例子--Cat.java,在这里面也包含使用version乐观锁定的xdoclet tag的书写格式。
    9. 使用继承策略简化Dao的编写.这点很重要,使用继承,有些dao接口和接口实现里面的方法是空的。

--------------------------------
^_^以下说明写地有点乱,我有时间再改。^_^
--------------------------------

环境说明:

spring+hibernate是轻量级的解决方案,在任何j2ee容器都能运行.
我使用的mysql4+tomcat5,配置文件也是针对mysql的.为了让初学者能很快上手,也建议你使用mysql4+tomcat5,这样你就不用修改里面配置啦!

项目说明:

  • 1. 该项目是一个hibernate+spring+xdoclet的eclipse3++myeclipse下的配置模板:
    从bo、dao interface、dao implement、daoTest、bussiness interface、bussiness implement、bussiness test、command(类似于ActionForm)、Controller(类似于Action)、Validator(类似于struts的validator)、jsp&jstl view都包含,自己慢慢看吧。2. hibernate的配置文件、sql语句生成使用xdoclet,spring bean的配置文件也用xdoclet生成,完全自动化呀,很酷!
    3. 这是一个小型宠物管理,猫下面有孩子猫,所以是一个用ibernate实现树形的猫的数据结构,很强的hibernate啊!


运行说明:

安装eclipse3+myeclipse(配套eclipse3的版本的myeclipse)先,在eclipse里面建立一个名为pet的工程,把这个工程拷贝粘贴覆盖过去,再刷新工程绝对ok!
  • 1. 修改根目录下的hibernate.properties文件,本人用mysql,如果你也用mysql,改userName和password就可以了--默认的配置是userName=root,password为空,假如你安装mysql没有设置root的密码,那就什么都不用改。
    2. 下载spring、hibernate2.x、xdoclet2.1、ant、mysql_jdbc_driver(我用这个driver:mysql-connector-java-3.0.14-production-bin.jar),把它们lib目录下所有的jar文件都放入到WebRoot/WEB-INF/lib目录下--初学者这样最省事,哪些jar是需要的也别管。
    3. 运行src/build.xml,然后右键点击工程pet,刷新,生成src/org/ggyy/bo/*.hbm.xml文件;再运行src/build.xml,再刷新工程,生成src/sql.ddl文件(这是eclipse3.0+myeclipse下的毛病,不能自动刷新,其它ide我没试过,我只喜欢eclipse!^_^).
    4. 运行org.ggyy.util.DataBaseTask(这是我写的一个类),读取src/sql.ddl文件,然后往mysql数据库里面(使用mysql内置的test数据库)发送sql语句.
    5. 运行springBuild.xml(也是ant脚本,eclipse不能自动刷新,我干脆把每个target分开!这样运行ant,郁闷ing),生成spring的配置文件WebRoot/WEB-INF/applicationContext.xml. 额外的bean声明写在src/spring-beans.xml,由spring的xdoclet将其合并到aplicationContext.xml里面去--自己看看就明白了.
    6. 发布到tomcat5,启动tomcat服务器,浏览器键入:http://localhost:8080/pet/db/listCat.sf


国际化和中文问题解决说明:


  • 1. messages_zh_CN.properties文件必须使用JDK提供的转码工具native2ascii.exe进行转换:
    native2ascii messages_zh_CN.properties msg.txt
    把生成的目标文件msg.txt拷贝粘贴替换掉Messages_zh_CN.properties里面的内容,这样就不会乱码了.
    2. 中文问题我是这样解决的:
    (1) src/spring-beans.xml有如下声明(spring-beans.xml实际上经sprng的xdcolet处理最终合并到applicationContext.xml里面):
    java代码: 


          <bean id="dataSource" class="org. springframework. jdbc. datasource. DriverManagerDataSource">
                    <property name="driverClassName"><value>com. mysql. jdbc. Driver</value></property>
                    <property name="url"><value>jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=GB2312</value></property>
                    <property name="username"><value>root</value></property>
                    <property name="password"><value></value></property>
               </bean>
               


    这里使用mysql里面的test数据库,请注意url中的useUnicode=true&characterEncoding=GB2312.这是mysql特有的,其它数据库环境我没试过,使用其它数据库的朋友要注意.
    (2) WebRoot/WEB-INF/web.xml有编码的fillter声明,也是gb2312,自己看吧.
    (3) 每一个jsp头文件, <%@ page contentType="text/html; charset=gb2312"%>,当然也gb2312也!
    3.其它语言我没试过.


    用容器管理事务来解决Hibernate的延迟加载问题:


    • 1.在spring里面解决延迟加载的问题很简单,只要给方法配置一个事务,有事务上下文,就有HibernateSession上下文,就不存在延迟加载的问题.这个问题用AOP来解决可能好一些,可惜这样的拦截器我不会^_^.
      2.容器管理的事务只在Dao层和Service层进行管理(在Controller层也管理事务我感觉很变态),由于没有使用OpenSessionInView 的filtter,在view层就有延迟加载的问题.为了避免这种现象,在Service或Dao层事先就把view层所需要的数据传递给Controller层,再由Controller层传给view层;同时约定,除非Controller层已经明确地把从表的数据加载,否则在view层不要试图取得从表类的数据!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值