hibernate 命名策略
来源:互联网 发布:网络大电影摄影收入 编辑:程序博客网 时间:2024/04/28 00:22
在Java对象里面, 偶们知道一个良好的命名规范会采用大写单词的首字母, 比如订单项这个对象, 偶们会起名为OrderItem, 这样很容易就看出来这个对象是由Order和Item 2个单词组成的, 断词就很容易了, 而属性也是如此, 比如maxPrice, totalPrice等等.但是如果按照同样的命名规范运到数据库的时候, 由于很多数据库对于表名, 字段名是大小写不敏感的, 所以最常见的策略是加下划线作为断词的依据:OrderItem -> order_itemmaxPrice -> max_price这样运用Hibernate的时候, 偶们就得手工在mapping文件里面指明:<class name="OrderItem" table="order_item"><property name="maxPrice" column="max_price"/>每个mapping关系都得手工这样写, 是不是很不爽? 现在来介绍一下net.sf.hibernate.cfg.NamingStrategy的用处, 看看它是怎么修理这个问题的, 代码如下:Java代码 1.import net.sf.hibernate.cfg.NamingStrategy; 2.import net.sf.hibernate.util.StringHelper; 3. 4./** 5.* An improved naming strategy that prefers embedded underscores to mixed case6.* names, base on DefaultNamingStrategy and ImprovedNamingStrategy7.* 8.*/ 9. 10.public class UnderscoreNamingStrategyimplements NamingStrategy { 11. 12. public staticfinal NamingStrategy INSTANCE = new UnderscoreNamingStrategy();; 13. 14. protected UnderscoreNamingStrategy(); { 15. } 16. 17. public String classToTableName(String className); { 18. return addUnderscores(StringHelper.unqualify(className););; 19. } 20. 21. public String propertyToColumnName(String propertyName); { 22. return addUnderscores(StringHelper.unqualify(propertyName););; 23. } 24. 25. public String tableName(String tableName); { 26. return tableName; 27. } 28. 29. public String columnName(String columnName); { 30. return columnName; 31. } 32. 33. public String propertyToTableName(String className, String propertyName); { 34. return classToTableName(className); +'_' + propertyToColumnName(propertyName);; 35. } 36. 37. private String addUnderscores(String name); { 38. StringBuffer buf = new StringBuffer(name.replace('.','_'););; 39. for (int i =1; i < buf.length(); - 1; i++); { 40. if ('_' != buf.charAt(i -1); && Character.isUpperCase(buf.charAt(i);); && !Character.isUpperCase(buf.charAt(i +1););); { 41. buf.insert(i++, '_');; 42. } 43. } 44. return buf.toString();.toLowerCase();; 45. } 46. 47.} 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加上:Java代码 1.Configuration config = new Configuration();; 2.config.setNamingStrategy(UnderscoreNamingStrategy.INSTANCE);; 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 表 命名策略
- hibernate 表命名策略
- hibernate 命名策略
- Hibernate之注解表的命名策略
- Hibernate中实体映射时的命名策略(1)
- Hibernate中实体映射时的命名策略(2)
- Hibernate命名策略自动改变表名或字段名的问题
- 博为峰JavaEE技术文章 —— Hibernate域模型(3)物理命名策略
- hibernate3命名策略
- 64. JPA命名策略
- JPA命名策略
- 64. JPA命名策略
- 文件命名策略工具类
- 关于Hibernate命名空间
- hibernate sql命名查询
- Hibernate命名查询
- Hibernate-命名SQL查询
- hibernate命名查询
- LV在系统重启后不能自动激活(boot.lvm&after.loca)
- 修改设置Tomcat内存
- LeetCode-Palindrome Partitioning II
- Android开发中如何解决加载大图片时内存溢出的问题
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
- hibernate 命名策略
- C#代码清单
- 基本二叉树
- C 语言 南阳理工ACM 122.Triangular Sums
- serviceMix https
- Ichimoku日本云(一目平衡表)使用方法详细介绍
- android属性中的px,sp,dip,pt
- 新老软件系统项目开发过程
- Java html 练习小记