在项目开发中关于Hibernate注解的配置的一些说明

      在项目开发中采用Hibernate3注解方式实现关于一些配置和可扩展的总结:在Hibernate中配置中使用的SessionFactory中AnnotationSessionFactoryBean而不在使用HibernateTemplate模版类。

     在非注解类中必须实现必须在配置对HibernateTemplate进行配置然后在DAO中使用时注入HibernateTemplate对象。但是在注解中就不在使用而是使用AnnotationSessionFactoryBean配置即可不必在每一个类中配置。

 

在配置文件中必须配置的数据源和AnnotationSessionFactoryBean类。

 在注解的DAO中Dao层类继承HibernateDaoSupport通过创建抽象的类封装注解SessionFactory类,实现基础的接口不需要在每一个类中添加同样的注入

 @Autowired
 public final void setSessionFactoryExtend(SessionFactory sessionFactory) {
  setSessionFactory(sessionFactory);
 }

减轻底层类的代码编写量!!

 

AnnotationSessionFactoryBean 如下:

public class AnnotationSessionFactoryBean extends LocalSessionFactoryBean implements ResourceLoaderAware ;

通常使用只需配置中添加datasource和packagesToScan即可

<bean id="sessionfactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
  <ref bean="datasource"/>
</property>
<property name="packagesToScan">com.XX.xx</property>
</bean>

 

   在AnnotationSessionFactoryBean 源代码中三个属性:

 private Class[] annotatedClasses;  //注解的类

 private String[] annotatedPackages; //注解的类包

 private String[] packagesToScan;  //扫描的类包

 private TypeFilter[] entityTypeFilters = new TypeFilter[] {
   new AnnotationTypeFilter(Entity.class, false),
   new AnnotationTypeFilter(Embeddable.class, false),
   new AnnotationTypeFilter(MappedSuperclass.class, false)};

 

 

可选的选由:

 
 private Resource[] configLocations;

 private String[] mappingResources;

 private Resource[] mappingLocations;//Hibernate的额外的配置如:自定义数据类型,枚举类型的应用等配置

 private Resource[] cacheableMappingLocations;

 private Resource[] mappingJarLocations;

 private Resource[] mappingDirectoryLocations;

 

 private Properties hibernateProperties;//Hibernate的属性设置:如show_sql=true,hibernate.dialect,format_sql hibernate.default_batch_fetch_size,hibernate.cache.use_query_cache等

 

 private TransactionManager jtaTransactionManager; //事务管理器

 private CacheProvider cacheProvider;//缓存提供器的应用

 private LobHandler lobHandler;    //lob数据处理器

 private Interceptor entityInterceptor;  //实体拦截器

 private NamingStrategy namingStrategy; //表名称的命名策略

 private TypeDefinitionBean[] typeDefinitions;

 private FilterDefinition[] filterDefinitions;

 private Properties entityCacheStrategies;

 private Properties collectionCacheStrategies;

 private Map eventListeners;

 private boolean schemaUpdate = false; //schemaUpdate

 private ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader();

 private Configuration configuration;

 

 

Spring中lob处理器

 <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"/>

缓存提供处理者:
    <bean id="hibernate.cacheProvider" class="org.hibernate.cache.HashtableCacheProvider"/>

 

如果你想让项目中注解生成的类的名称以特殊的前缀必须重写ImprovedNamingStrategy中某些方法实现:

ImprovedNamingStrategy 如下:

public class ImprovedNamingStrategy implements NamingStrategy, Serializable ;

重写中重点方法如下:

@Override
 public String classToTableName(String className) {
  return prependPrefix(super.classToTableName(className));
 }
 
 @Override
 public String tableName(String tableName) {
  return prependPrefix(super.tableName(tableName));
 }
 
 @Override
 public String logicalCollectionTableName(
   String tableName,
   String ownerEntityTable,
   String associatedEntityTable,
   String propertyName) {
  return prependPrefix(
   super.logicalCollectionTableName(
     tableName,
     ownerEntityTable,
     associatedEntityTable,
     propertyName
   )
  );
 }

在项目中通过对针对AnnotationSessionFactoryBean 的扩展使其支持正则表达式匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值