`

NamingStrategy浅析

阅读更多

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接口,根据当前月份映射到对应的数据表。

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

分享到:
评论
1 楼 DCX903170332 2013-11-07  
讲的非常好,谢谢留住的分享

相关推荐

    newtonsoft.json.dll 4.5

    - **NamingStrategy**: 控制JSON键的命名规则,如驼峰式或下划线分隔等。 **6. .NET Framework 4.5 支持** Newtonsoft.Json 4.5版本是专为.NET Framework 4.5设计的,它充分利用了.NET 4.5的新特性,如异步操作。...

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

    1. **命名策略(NamingStrategy)**:Hibernate默认使用一种命名策略来转换实体类属性名到数据库列名。如果希望自定义这种映射规则,可以通过实现`NamingStrategy`接口来自定义命名策略。 2. **拦截器(Interceptor...

    learn-netjson.zip

    例如,可以创建一个`JsonSerializerSettings`实例,然后设置`NamingStrategy`属性来处理属性名的转换。以下是一个简单的例子,展示了如何使用`CamelCaseNamingStrategy`: ```csharp using NetJSON; using System....

    随即点名java

    在“随即点名java”项目中,可能会有多个类实现`NamingStrategy`接口,如`RandomNamingStrategy`用于随机选择学生,`AlphabeticalNamingStrategy`按照名字顺序进行点名。每个实现类会提供接口中定义的方法的具体实现...

    springboot整合mybatis-plus代码生成器的配置解析.docx

    接下来,我们需要指定代码生成的策略,包括命名策略(NamingStrategy)、实体字段策略(EntityColumnRuleConfig)、填充策略(TableFill)等: ```java // 配置策略 StrategyConfig strategy = new StrategyConfig...

    hibernate详解

    8. **NamingStrategy**:NamingStrategy允许自定义数据库表名和列名的生成规则,以适应不同的命名规范或避免名称冲突。 总之,Hibernate2为Java开发者提供了一种强大的工具,将复杂的数据库操作转换为面向对象的API...

    hibernate+中文api

    前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 ...3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory

    MyBatis代码生成器.pdf

    strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 列名转换策略 strategy.setEntityTableFieldAnnotationEnable(true); // 是否在实体类字段添加@TableField注解 strategy.setInclude(new ...

    SpringBoot集成MyBatis-Plus-Join

    strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityTableFieldAnnotationEnable(true); strategy.setInclude(new String[]{"your_table_name"}); // 需要生成的表名 new ...

    typeorm-model-generator:从现有数据库生成TypeORM模型

    类型生成器 :warning: 该项目处于维护阶段。 有关详情,请参见 。 从现有数据库生成TypeORM的模型。 支持的数据库引擎: Microsoft SQL服务器 PostgreSQL MySQL 玛丽亚数据库 Oracle数据库 ...

    JsonInMvc.zip

    这里,我们创建了一个`JsonSerializerSettings`实例,并设置了`NamingStrategy`为`CamelCaseNamingStrategy`,这将确保在序列化时属性名转换为驼峰格式。 3. 处理AJAX请求: 前端通常使用jQuery或其他类似的库...

    SpringBoot整合MyBatis-Plus

    mpg.setStrategy(new StrategyConfig().setNaming(NamingStrategy.underline_to_camel)); // 配置输出路径 mpg.setOutputDir("src/main/java"); // 执行生成 mpg.execute(); } } ``` 运行主程序,根据提示...

    mybaties逆向工程

    strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 表名转换策略 strategyConfig.setInclude(new String[]{"your_table_name"}); // 需要生成的表 configBuilder.setStrategy(strategyConfig); ...

    mybatis-plus-code-generate.zip

    strategy.setNaming(NamingStrategy.underline_to_camel); // 表名生成策略 strategy.setInclude(new String[]{"your_table_name"}); // 需要生成的表名,多个用逗号分隔 // 执行生成 mpg.setGlobalConfig(gc);...

    jpa-schema-maven-plugin:Maven插件,用于从JPA实体生成数据库架构或DDL脚本

    jpa-schema-maven-plugin Maven插件,用于使用模式生成器从JPA实体生成模式或DDL脚本。... 删除了属性namingStrategy和dialect导致Hibernate 4.x到5.x成为大灾变。 请改用properties 。 在0.2.x上,

    使用mybatis-plus-generator进行代码自动生成的方法

    strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); mpg.setStrategy(strategy); mpg.execute(); } } ``` 最后,我们可以使用以下命令来生成代码: ``` ...

    fastSpring 手冊

    如果不需要表头编码功能,`NamingStrategy`可以不配置。 接下来,密码加密对象`PasswordProvider`的配置,类型为`FastSpring.PasswordProvider,FastSpring.Net`,其`PasswordProviderType`属性被设置为`MD5`,表明...

    mybatisplus3.5.3.1基础生成代码完整步骤(超详细)

    strategy.setNaming(NamingStrategy.underline_to_camel); // 表名转换策略 strategy.setTablePrefix("t_"); // 设置表前缀 strategy.setInclude(new String[]{"user"}); // 需要生成的表名,多个表名用逗号分隔 ...

Global site tag (gtag.js) - Google Analytics