NamingStrategy浅析

本文介绍了如何通过命名策略接口(NamingStrategy)作为业务类规范和数据库表规范之间的桥梁,实现对象与数据库表的灵活映射,并通过实例展示了如何自定义命名规则,以适应不同业务场景的需求。此外,文章还探讨了命名策略在日志业务、按月份划分的日志表等具体业务场景的应用,以及如何进一步扩展业务逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NamingStrategy接口很有意思,可以作为业务类规范和数据库表规范的桥梁,例如一个数据对象User,对应数据库表是T_USER,如果所有映射关系都是这样的情况,可以使用NamingStrategy做为一个桥梁衔接,当然你也可以在hbx.xml配置文件中指定class对应的table.

 

hibernate.cfg.xml代码就省略了...

 

User.hbx.xml代码

<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映射上了,当然除了对象和表名称的对应,还可以做对象元素和字段的对应。

 

通过这可以做很多业务规则事情,比如日志业务,如果你数据库中是按照月划分日志表的话(像log_01、log_02、log_03等),当前时间是哪个月就插入哪个月的表里情况,你的数据对象就可以只有一个Log对象,封装实现NamingStrategy接口,根据当前月份映射到对应的数据表。

小小的功能可以实现的业务场景还有很多,不妨多想想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值