hibernate3.5与spring2.5.5整合最佳实践

这个是个人的一些看法,随着时间的关系,会进行修改,如果有什么错误也请提出!

首先确认一下准则,就是预定大于配置,尽量减少配置文件的编写,加快开发效率

其实说一下使用的框架的版本,hibernate3.5以上,spring 2.5.5以上,因为用到的注解,

本例使用的hibernate为3.5.5,spring 3.0.4,数据库使用mysql

这里只贴出关键部分的配置,其他细节自己补充

 

<!--因为spring要使用注解,所以添加如下代码-->
<context:component-scan base-package="com.公司名.项目名" />
<!--配置hibernate SessionFactory属性-->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
       <property name="dataSource" ref="dataSource" />
      <!--这里设定了数据库与java类中的映射规则,javabean按java规范定义,数据库按加下划线的形式定义-->
       <property name="namingStrategy">
              <bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
       </property>
       <property name="hibernateProperties">
              <props>
                     <!--数据库方言-->
                     <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                     <!--是否显示执行的sql语句-->
                     <prop key="hibernate.show_sql">false</prop>
                     <!--同步Javabean与数据库表结构-->
                     <prop key="hibernate.hbm2ddl.auto">update</prop>
             </props>
       </property>
       <property name="packagesToScan" value="com.公司名.项目名..*" />
</bean>
<!--配置事务-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory">
              <ref local="sessionFactory" />
       </property>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="get*" read-only="true" />
            <tx:method name="find*" read-only="true" />
            <tx:method name="*" />
        </tx:attributes>
 </tx:advice>
 <aop:config>
        <aop:pointcut id="interceptorPointCuts" expression="execution(* com.公司名.项目名..service.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />        
  </aop:config>
 

这样再加上一些附加的配置,比如DataSource等配置就搭好基本架构了

之后建议的包名结构如下:

DAO层:com.公司名.项目名.模块名.dao

Service层:com.公司名.项目名.模块名.service

Action层:com.公司名.项目名.模块名.action

Pojo层:com.公司名.项目名.模块名.pojo

自己写的工具类层:com.公司名.项目名.模块名.utils

然后说一下开发的流程,

1.先确定实体,以及实体与实体的关系,建立好模型,个人倾向于hibernate中推荐的开发流程,就是先写javabean以及配置信息,之后生成数据库

具体hibernate开发事项请参考另一篇文章

http://finallygo.iteye.com/blog/1040377

2.之后写DAO:在DAO的类上加@Repository注解,表示这个组件是持久化的

查询的时候优先使用Criteria配合Example的模式,因为这样便于不容易出错,且便于修改,如果复杂一些的用HQL,再复杂的用SQL

3.再写Service:在Service的类上加@Service注解,表示这个组件是业务层的,同时对于依赖的组件(DAO或者其他Service)添加@Resource注解

@Resource注解默认以ByName的形式注入,如果找不到就ByType,如果还是找不到就会抛异常,说至少要有一个满足条件的组件被注入

4.最后写Action,这里涉及到使用的MVC框架,以及整合的方式了,暂时不讨论

另外暂时把我临时配置的一个文件上传吧

猜你喜欢

转载自finallygo.iteye.com/blog/1040373
今日推荐