`
sunsy
  • 浏览: 37822 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

hibernate映射时表名与列名前缀的设置

阅读更多
h2.hibernate映射时对于cofing的一些扩展
h3.改变表名与列名的映射
  继承NamingStrategy接口,实现其中的表名与列名命名函数,完成自己的命名策略设定。当然可以根据实际需要做其他扩展。下面的例子仿造hibernate的DefaultNamingStrategy和ImprovedNamingStrategy实现的一个命名策略。可以设置的字段在类代码中的前几个属性,有注释说明。这个策略不影响用标注已经申明的table和column的标注命名(及标注命名优先级高)。
{code}
package com.test.commos;
import org.hibernate.AssertionFailure;
import org.hibernate.cfg.NamingStrategy;
import org.hibernate.util.StringHelper;
/**
 * 仿造DefaultNamingStrategy实现一个自己的table和column的整体命名策略。
 * 
 *
 */
public class LocalNamingStrategy implements NamingStrategy {
 /**
  * 设置表名前缀。
  */
 private String _tablePrefix = "";
 /**
  * 设置列名前缀。
  */
 private String _columnPrefix = "";
 /**
  * 设置是否转换className与propertyName为分词后加下划线的形式。如:AaaBbb->aaa_bbb;
  * aaaBbb->aaa_bbb。
  */
 private boolean _addUnderScores = false;
 public void setTablePrefix(String tablePrefix) {
  if (StringHelper.isNotEmpty(tablePrefix))
   _tablePrefix = tablePrefix;
 }
 public void setColumnPrefix(String columnPrefix) {
  if (StringHelper.isNotEmpty(columnPrefix))
   _columnPrefix = columnPrefix;
 }
 public void setAddUnderScores(boolean addUnderScores) {
  _addUnderScores = addUnderScores;
 }
 /**
  * A convenient singleton instance
  */
 public static final NamingStrategy INSTANCE = new LocalNamingStrategy();
 /**
  * Return the unqualified class name, mixed case converted to underscores
  */
 public String classToTableName(String className) {
  return addPrefixes(StringHelper.unqualify(className), _tablePrefix);
 }
 /**
  * Return the full property path with underscore seperators, mixed case
  * converted to underscores
  */
 public String propertyToColumnName(String propertyName) {
  return addPrefixes(StringHelper.unqualify(propertyName), _columnPrefix);
 }
 /**
  * Convert mixed case to underscores
  */
 public String tableName(String tableName) {
  return addPrefixes(tableName, "");
 }
 /**
  * Convert mixed case to underscores
  */
 public String columnName(String columnName) {
  return addPrefixes(columnName, "");
 }
 private String addPrefixes(String name, String prefix) {
  StringBuffer buffer = new StringBuffer();
  buffer.append(prefix);
  if (_addUnderScores) {
   buffer.append(addUnderscores(name));
  } else {
   buffer.append(name);
  }
  return buffer.toString();
 }
 private String addUnderscores(String name) {
  StringBuffer buf = new StringBuffer(name.replace('.', '_'));
  for (int i = 1; i < buf.length() - 1; i++) {
   if (Character.isLowerCase(buf.charAt(i - 1))
     && Character.isUpperCase(buf.charAt(i))
     && Character.isLowerCase(buf.charAt(i + 1))) {
    buf.insert(i++, '_');
   }
  }
  return buf.toString().toLowerCase();
 }
 public String collectionTableName(String ownerEntityTable,
   String associatedEntityTable, String propertyName) {
  return tableName(ownerEntityTable + '_' + propertyName);
 }
 /**
  * Return the argument
  */
 public String joinKeyColumnName(String joinedColumn, String joinedTable) {
  return columnName(joinedColumn);
 }
 /**
  * Return the property name or propertyTableName
  */
 public String foreignKeyColumnName(String propertyName,
   String propertyTableName, String referencedColumnName) {
  String header = propertyName != null ? StringHelper
    .unqualify(propertyName) : propertyTableName;
  if (header == null)
   throw new AssertionFailure("NammingStrategy not properly filled");
  return columnName(header + "_" + referencedColumnName); // + "_" +
  // referencedColumnName
  // not used for
  // backward compatibility
 }
 /**
  * Return the column name or the unqualified property name
  */
 public String logicalColumnName(String columnName, String propertyName) {
  return StringHelper.isNotEmpty(columnName) ? columnName : StringHelper
    .unqualify(propertyName);
 }
 /**
  * Returns either the table name if explicit or if there is an associated
  * table, the concatenation of owner entity table and associated table
  * otherwise the concatenation of owner entity table and the unqualified
  * property name
  */
 public String logicalCollectionTableName(String tableName,
   String ownerEntityTable, String associatedEntityTable,
   String propertyName) {
  if (tableName != null) {
   return tableName;
  } else {
   // use of a stringbuffer to workaround a JDK bug
   return new StringBuffer(ownerEntityTable).append("_").append(
     associatedEntityTable != null ? associatedEntityTable
       : StringHelper.unqualify(propertyName)).toString();
  }
 }
 /**
  * Return the column name if explicit or the concatenation of the property
  * name and the referenced column
  */
 public String logicalCollectionColumnName(String columnName,
   String propertyName, String referencedColumn) {
  return StringHelper.isNotEmpty(columnName) ? columnName : StringHelper
    .unqualify(propertyName)
    + "_" + referencedColumn;
 }
}
{code}
h3.在spring的配置中加入命名策略的申明。
{code}
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="namingStrategy">
   <bean
    class="com.test.commons.LocalNamingStrategy">
    <property name="tablePrefix" value="crm_" />
    <property name="columnPrefix" value="crm_" />
   </bean>
  </property>
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     ${hibernate.dialect}
    </prop>
    <prop key="hibernate.show_sql">false</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property name="annotatedClasses">
   <list>
    ......
   </list>
  </property>
  <property name="annotatedPackages">
   <list>
    ......
   </list>
  </property>
  
 </bean>
{code}
分享到:
评论

相关推荐

    生成hibernate映射文件工具

    Hibernate映射文件(通常为`.hbm.xml`格式)是这个桥梁,它定义了Java类与数据库表之间的映射规则,包括字段对应、主键设置、关联关系等。 映射文件中通常包含以下几个关键元素: 1. `&lt;class&gt;`:表示一个Java类,...

    自动生成hibernate映射文件和实体类

    4. 在使用 MyEclipse 自动生成 Hibernate 映射文件和实体类时,需要创建数据库连接和相应的表,然后选择需要添加 Hibernate 映像文件的工程,最后进行反转工程操作。 使用 MyEclipse 自动生成 Hibernate 映射文件和...

    hibernate映射和查询

    **hibernate映射与查询** Hibernate 是一个流行的 Java 应用程序开发框架,它提供了一个持久层解决方案,简化了数据库操作。对于初学者来说,理解 Hibernate 的映射和查询机制是至关重要的,因为它们构成了 ...

    hibernate映射文件生成数据库

    映射文件中,你需要指定表名、列名、数据类型以及主键生成策略等。例如: ```xml &lt;hibernate-mapping package="com.example"&gt; &lt;/hibernate-mapping&gt; ``` 3. 配置Hibernate:在Hibernate的配置文件(如...

    java根据实体类生成Hibernate映射文件

    // 可以用来配置生成的映射文件,如表名前缀等 String className = entityClass.getSimpleName(); String tableName = props.getProperty("tableNamePrefix") + className.toLowerCase(); StringBuilder ...

    Myeclipse生成Hibernate映射文件

    在IT行业中,开发Java应用程序时,常常需要使用到ORM(对象关系映射)框架,比如Hibernate,它能够帮助我们把数据库中的数据与Java对象进行映射,从而简化数据操作。而MyEclipse作为一款强大的Java集成开发环境,...

    常用 Hibernate 映射配置说明.doc

    ### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...

    Hibernate映射笔记

    #### Hibernate映射文件与配置关系 Hibernate映射是ORM(对象关系映射)框架中的一项关键技术,它允许开发者在数据库表和Java对象之间建立映射关系,从而简化了数据访问层的开发工作。映射文件通常是`.hbm.xml`格式...

    Hibernate 映射文件自动生成

    Hibernate通过XML或注解方式将Java类与数据库表进行映射,使得开发者可以使用面向对象的方式来处理数据库。然而,手动编写这些映射文件可能会耗费大量时间,因此“Hibernate 映射文件自动生成”是一个非常实用的功能...

    hibernate实体映射文件字段设置默认值

    ### Hibernate实体映射文件字段设置默认值 在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...

    myeclipse自动生成hibernate映射文件

    这两个文件一起构成了Hibernate与数据库交互的基础。 通过以上步骤,开发者可以快速地基于现有数据库表创建出完整的Hibernate配置,减少了手动编写代码的工作量,使得开发过程更加高效。在实际开发中,这种自动化...

    深入理解hibernate映射文件

    - `column`: 设置标识属性所映射的数据列的列名。 - `access`: 指定Hibernate访问该标识属性的访问策略。 - **主键生成器**(`&lt;generator/&gt;`) 主键生成器用于生成数据表记录的主键。Hibernate提供了多种主键...

    spring hibernate实现动态替换表名(分表)的方法

    Spring Hibernate 实现动态替换表名(分表)的方法 随着数据库的发展,分表操作变得越来越重要。今天,我们将讨论如何使用 Spring Hibernate 实现动态替换表名(分表)。 概述 ---- 在实现动态替换表名时,我们...

    hibernate映射枚举类型

    - 当使用自定义属性映射时,确保枚举实例的属性值与数据库中的值一致。 ### 总结 Hibernate通过`@Enumerated`和`@Type`注解为枚举类型提供了灵活的映射机制,允许开发者根据项目需求选择合适的方式。正确地映射...

    build.xml 手写自动生成Hibernate映射文件和配置文件源代码

    build.xml 手写自动生成Hibernate映射文件和配置文件源代码

    用MyEclipse自动生成hibernate映射文件和实体类

    在使用Hibernate框架进行对象关系映射(ORM)时,MyEclipse提供了自动生成映射文件和实体类的功能,极大地简化了数据库与Java类之间的绑定工作。以下是详细步骤和相关知识点: 1. **DB Browser视图**:在MyEclipse...

    hibernate多对多关联映射

    `@JoinTable`注解用于定义中间表的相关信息,包括表名、外键列名等。`mappedBy`属性则指定反向关联的字段,表明`Course`实体中的`students`列表是主关联方。 三、多对多关联的增删改查 1. 插入关联 在添加关联时,...

    Hibernate映射配置实例大全(详细总结)

    综上所述,"Hibernate映射配置实例大全"涵盖的内容广泛,包括基本的配置文件设置、实体类的XML和注解映射、集合映射、加载策略、事务管理和缓存配置等。通过深入学习和实践这些实例,开发者可以熟练地运用Hibernate...

    Hibernate映射集合属性List

    Hibernate通过ORM(对象关系映射)技术将Java对象与数据库表关联起来。在映射集合属性时,我们需要在实体类中定义一个List类型的字段,并使用注解或XML配置文件来指定其映射规则。 1. **注解映射:** 使用`@...

Global site tag (gtag.js) - Google Analytics