`

Hibernate中的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"/>

每个mapping关系都得手工这样写, 是不是很不爽? 现在来介绍一下net.sf.hibernate.cfg.NamingStrategy的用处, 看看它是怎么修理这个问题的, 代码如下:
import net.sf.hibernate.cfg.NamingStrategy;
import net.sf.hibernate.util.StringHelper;

/**
 * An improved naming strategy that prefers embedded underscores to mixed case
 * names, base on DefaultNamingStrategy and ImprovedNamingStrategy
 * 
 */
 
public class UnderscoreNamingStrategy implements NamingStrategy {

    public static final NamingStrategy INSTANCE = new UnderscoreNamingStrategy();;

    protected UnderscoreNamingStrategy(); {
    }

    public String classToTableName(String className); {
        return addUnderscores(StringHelper.unqualify(className););;
    }

    public String propertyToColumnName(String propertyName); {
        return addUnderscores(StringHelper.unqualify(propertyName););;
    }

    public String tableName(String tableName); {
        return tableName;
    }

    public String columnName(String columnName); {
        return columnName;
    }

    public String propertyToTableName(String className, String propertyName); {
        return classToTableName(className); + '_' + propertyToColumnName(propertyName);;
    }

    private String addUnderscores(String name); {
        StringBuffer buf = new StringBuffer(name.replace('.', '_'););;
        for (int i = 1; i < buf.length(); - 1; i++); {
            if ('_' != buf.charAt(i - 1); && Character.isUpperCase(buf.charAt(i);); && !Character.isUpperCase(buf.charAt(i + 1););); {
                buf.insert(i++, '_');;
            }
        }
        return buf.toString();.toLowerCase();;
    }

}

在初始化配置的时候, 把这个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可以解决的脏活累活.
http://www.iteye.com/topic/8486?page=1
分享到:
评论

相关推荐

    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上下文)管理 ...

    hibernate+中文api

    3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的...

    HibernateAPI中文版.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 参考文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent ...

    hibernate 教程

    实现NamingStrategy(命名策略) 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. POJO简单示例 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认...

    hibernate3.04中文文档.chm

    4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    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)

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

    Hibernate教程

    4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类(Persistent ...

    Hibernate3+中文参考文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent ...

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

    hibernate实现动态表查询的多种解决方案.自行整理的动太实现方案,总有一个适合你.

    Hibernate Reference Documentation3.1

    3.6. Implementing a NamingStrategy 3.7. XML configuration file 3.8. J2EE Application Server integration 3.8.1. Transaction strategy configuration 3.8.2. JNDI-bound SessionFactory 3.8.3. Current ...

    Hibernate3的帮助文档

    4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类(Persistent ...

    hibernate_reference中文文档.pdf

    3.6. 实现 NamingStrategy .................................................. 44 3.7. XML 配置文件 ......................................................... 45 3.8. J2EE 应用程序服务器的集成 ..............

    hibernate

    实现NamingStrategy(命名策略) 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. POJO简单示例 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认...

    hibernate 框架详解

    实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类(Persistent ...

    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上下文)管理 ...

Global site tag (gtag.js) - Google Analytics