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映射上了,当然除了对象和表名称的对应,还可以做
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映射上了,当然除了对象和表名称的对应,还可以做
相关文章推荐
- Hibernate 动态表名映射(数据库分表) NamingStrategy
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- 使用MiddleGen 产生hibernate的数据库表映射文件
- 数据表/字段名称和数据库关键字冲突在Hibernate映射中的处理办法
- 使用MiddleGen 产生hibernate的数据库表映射文件
- 使用MiddleGen 产生hibernate的数据库表映射文件
- 关于Hibernate不能自动生成数据库表-POJO和映射文件正确但是访问对应表出错-的原因
- HIBERNATE映射数据库表
- hibernate 映射无主键的数据库表
- iBATIS与Hibernate数据库映射框架
- Hibernate配置及数据库映射建立流程
- hibernate映射数据库表如何使表中字段默认值生效(如更新当传来的值为null时不替换表中值)
- hibernate 映射无主键和复合主键的数据库表
- hibernate映射数据库表如何在不插入值的情况下使表中字段默认值生效
- Hibernate之 对象/关系数据库映射基础(Basic O/R Mapping)
- 使用MiddleGen 产生hibernate的数据库表映射文件
- 疯了的Hibernate(4) -- 由数据库生成映射文件