您的位置:首页 > 数据库

Hibernate 动态表名映射(数据库分表) NamingStrategy

2016-08-28 14:03 281 查看
NamingStrategy接口很有意思,可以作为业务类规范和数据库表规范的桥梁,例如一个数据对象User,对应数据库表是
T_USER,如果所有映射关系都是这样的情况,可以使用NamingStrategy做为一个桥梁衔接,当然你也可以在hbx.xml配置文件中指定
class对应的table.
 
hibernate.cfg.xml代码就省略了...
 
User.hbx.xml代码
[code=xml;toolbar:false"><hibernate-mapping>
    <class name="User">
        <id name="id">
            <generator class="uuid"/>
        </id>
        <property name="firstname"/>
        <property name="age"/>
    </class>
</hibernate-mapping> 默认映射到对象名和元素名称一致的数据表结构。
 
 User.java代码public class User {
 private String id;
 private String firstname;
 private int age;

/**

*省略set,get的方法

*/

}

 
关键TNamingStrategy 代码public class TNamingStrategy implements NamingStrategy{

 @Override
 public String classToTableName(String className) {
  // TODO Auto-generated method stub
  return tableName(StringHelper.unqualify(className).toUpperCase());
 }

 @Override
 public String columnName(String columnName) {
  // TODO Auto-generated method stub
  return columnName;
 }

 @Override
 public String propertyToColumnName(String propertyName) {
  // TODO Auto-generated method stub
  return propertyName.toUpperCase();
 }

 @Override
 public String propertyToTableName(String className, String propertyName) {
  // TODO Auto-generated method stub
  return classToTableName(className) + '_' + propertyToColumnName(propertyName);
 }

 @Override
 public String tableName(String tableName) {
  // TODO Auto-generated method stub
  return "T_"+tableName;
 }

}

最后在Configuration 运行时将命名规则设定Configuration cfg = new Configuration();  
cfg.setNamingStrategy(new TNamingStrategy());
SessionFactory factory = cfg.configure().buildSessionFactory();

这样你的User对象就和数据表T_USER映射上了,当然除了对象和表名称的对应,还可以做
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: