`
longgangbai
  • 浏览: 7330968 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate中的NamingStrategy

阅读更多

   项目中表名称的统一命名使用的了NamingStrategy的命名策略。

在Java对象里面, 偶们知道一个良好的命名规范会采用大写单词的首字母, 比如订单项这个对象, 偶们会起名为OrderItem, 这样很容易就看出来这个对象是由Order和Item 2个单词组成的, 断词就很容易了, 而属性也是如此, 比如maxPrice, totalPrice等等.

但是如果按照同样的命名规范运到数据库的时候, 由于很多数据库对于表名, 字段名是大小写不敏感的, 所以最常见的策略是加下划线作为断词的依据:
OrderItem -> order_item
maxPrice -> max_price

这样运用Hibernate的时候, 偶们就得手工在mapping文件里面指明:
<class name="OrderItem" table="order_item">
<property name="maxPrice" column="max_price"/>

 

 

NamingStrategy的源代码如下:

 

public interface NamingStrategy {
 /**

 * 返回实体的表名
  * Return a table name for an entity class
  * @param className the fully-qualified class name  参数为类的完整名称的
  * @return a table name
  */
 public String classToTableName(String className);
 /**将一个属性映射为一个表的列明地方法
  * Return a column name for a property path expression
  * @param propertyName a property path
  * @return a column name
  */
 public String propertyToColumnName(String propertyName);
 /**根据表名获取的映射文件名称
  * Alter the table name given in the mapping document
  * @param tableName a table name
  * @return a table name
  */
 public String tableName(String tableName);
 /**
  * Alter the column name given in the mapping document
  * @param columnName a column name
  * @return a column name
  */
 public String columnName(String columnName);
 /**返回相关联的表名称
  * Return a collection table name ie an association having a join table
  *
  * @param ownerEntity
  * @param ownerEntityTable owner side table name
  * @param associatedEntity
  * @param associatedEntityTable reverse side table name if any
  * @param propertyName collection role
  */
 public String collectionTableName(
   String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable,
   String propertyName
 );
 /**
  * Return the join key column name ie a FK column used in a JOINED strategy or for a secondary table
  *
  * @param joinedColumn joined column name (logical one) used to join with
  * @param joinedTable joined table name (ie the referenced table) used to join with
  */
 public String joinKeyColumnName(String joinedColumn, String joinedTable);
 /**
  * Return the foreign key column name for the given parameters
  * @param propertyName the property name involved
  * @param propertyEntityName
  * @param propertyTableName the property table name involved (logical one)
  * @param referencedColumnName the referenced column name involved (logical one)
  */
 public String foreignKeyColumnName(
   String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName
 );
 /**
  * Return the logical column name used to refer to a column in the metadata
  * (like index, unique constraints etc)
  * A full bijection is required between logicalNames and physical ones
  * logicalName have to be case insersitively unique for a given table
  *
  * @param columnName given column name if any
  * @param propertyName property name of this column
  */
 public String logicalColumnName(String columnName, String propertyName);
 /**
  * Returns the logical collection table name used to refer to a table in the mapping metadata
  *
  * @param tableName the metadata explicit name
  * @param ownerEntityTable owner table entity table name (logical one)
  * @param associatedEntityTable reverse side table name if any (logical one)
  * @param propertyName collection role
  */
 public String logicalCollectionTableName(String tableName, String ownerEntityTable, String associatedEntityTable, String propertyName);

 /**
  * Returns the logical foreign key column name used to refer to this column in the mapping metadata
  *
  * @param columnName given column name in the metadata if any
  * @param propertyName property name
  * @param referencedColumn referenced column name (logical one) in the join
  */
 public String logicalCollectionColumnName(String columnName, String propertyName, String referencedColumn);
}

 

 

源码如上必须注意的方法:

classToTableName:将一个类转换为表名

propertyToColumnName:属性转换为列名

tableName:根据表名返回映射文件

columnName:根据列名返回映射列名;

 

在初始化配置的时候, 把这个NamingStrategy加上:

 Configuration config = new Configuration();;  
 config.setNamingStrategy(UnderscoreNamingStrategy.INSTANCE);;
这样mapping文件就变得简单多了:

<class name="OrderItem">
<property name="maxPrice"/>

NamingStrategy还可以用在其他方面, 比如有些数据库设计规范统一要求Table前面加上模块名称 (如, 属于Order模块的统一加上ORDER_ ), 比如还有些恶心规范统一要求表名和字段名采用4码缩写 (如, OrderItem -> orde_item, maxPrice -> max_pric), 这些都是NamingStrategy可以解决的脏活累活.
分享到:
评论

相关推荐

    hibernate 3.2中文手册 中文文档

    - 介绍如何在Servlet中使用Hibernate来处理业务逻辑,并将结果呈现给用户。 - **1.4.3 部署与测试** - 提供部署和测试该web应用的具体步骤。 - **1.5 总结** - 对本章内容进行总结,并强调了理解Hibernate基本...

    hibernate中文官方文档3.6

    - **实现NamingStrategy**:定义命名策略以定制Hibernate生成的SQL语句中的表名和字段名。 - **XML配置文件**:解释如何使用XML文件来配置Hibernate。 - **J2EE应用程序服务器的集成**:介绍Hibernate与J2EE应用程序...

    Hibernate+中文文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    Hibernate中文详细学习文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    hibernate3.2中文文档(chm格式)

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    Hibernate 中文 html 帮助文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    hibernate4.1中文api

    - **构建与Maven**: 使用Maven作为项目构建工具,添加Hibernate依赖到`pom.xml`文件中。 - **启动和助手**: 创建SessionFactory实例,并通过它打开Session进行数据库操作。 - **加载和存储对象**: 使用Session的`...

    Hibernate中文参考文档

    - **1.3.3 使关联工作**:解释如何确保关联关系在 Hibernate 中正确运行。 - **1.3.4 值类型的集合**:讲解如何处理 Java 类中的集合属性。 - **1.3.5 双向关联**:介绍双向关联的概念和实现方法。 - **1.3.6 使...

    hibernate_reference使用指南全

    Hibernate 是一个开源的对象关系映射 (ORM) 框架,它为 Java 应用程序提供了一种将 Java 对象映射到关系型数据库表中的机制。本章节将详细介绍如何从零开始创建一个简单的 Hibernate 应用程序。 **1.2 第一个 ...

    hibernate实现动态表查询的多种解决方案

    1. **命名策略(NamingStrategy)**:Hibernate默认使用一种命名策略来转换实体类属性名到数据库列名。如果希望自定义这种映射规则,可以通过实现`NamingStrategy`接口来自定义命名策略。 2. **拦截器(Interceptor...

    Hibernate 中文手册

    - **实现 NamingStrategy**:解释如何自定义 Hibernate 的命名策略,以符合特定的应用场景。 - **XML 配置文件**:深入分析 Hibernate 的 XML 配置文件格式及其组成部分。 - **J2EE 应用程序服务器的集成**:说明...

    hibernate中文教材

    此外,还涉及日志、NamingStrategy的实现、XML配置文件的使用,以及在J2EE应用服务器中的集成,包括事务策略、JNDI绑定的SessionFactory、JTA环境下Current Session context管理和JMX部署。 持久化类部分讲解了如何...

    hibernate_reference中文文档.pdf

    - **3.6 实现 NamingStrategy**:解释如何自定义 Hibernate 的命名策略,以适应特定的应用场景。 - **3.7 XML 配置文件**:讲解如何通过 XML 文件来配置 Hibernate。 - **3.8 J2EE 应用程序服务器的集成** - **...

Global site tag (gtag.js) - Google Analytics