📜  Spring Boot Hibernate 去掉下划线命名策略——随便(1)

📅  最后修改于: 2023-12-03 14:47:32.667000             🧑  作者: Mango

Spring Boot Hibernate 去掉下划线命名策略——随便

当使用Hibernate和Spring Boot进行开发时,通常情况下,使用下划线命名策略来与数据库中的表字段进行映射。例如,Java类中的属性名为first_name,则对应数据库中的字段名为first_name。然而,对于某些开发者来说,这种命名方式可能不太符合他们的喜好,而希望使用其他的命名方式,例如驼峰命名法。

那么,在这种情况下,我们应该如何去掉下划线命名策略呢?下面,我们将为您提供详细的步骤介绍。

1. 配置命名策略

首先,我们需要配置Hibernate的命名策略,以便使其能够识别我们所使用的命名方式。在application.properties中添加以下配置:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

这里我们使用了Hibernate官方提供的PhysicalNamingStrategyStandardImpl类来作为命名策略。

2. 自定义命名策略

接着,我们需要自定义一个命名策略,并将其配置到Hibernate中。这里我们选择实现PhysicalNamingStrategy接口来创建一个自定义的命名策略类。以下是一个例子:

package com.example.demo.hibernate;

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;

public class MyNamingStrategy implements PhysicalNamingStrategy {

    @Override
    public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment) {
        return name;
    }

    @Override
    public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment) {
        return name;
    }

    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
        return name;
    }

    @Override
    public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment) {
        return name;
    }

    @Override
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment) {
        String converted = convert(name.getText());
        return Identifier.toIdentifier(converted);
    }

    private String convert(String name) {
        // 将带下划线的字段名转换为驼峰命名法
        String[] tokens = name.split("_");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < tokens.length; i++) {
            String token = tokens[i].toLowerCase();
            if (i != 0) {
                token = token.substring(0, 1).toUpperCase() + token.substring(1);
            }
            sb.append(token);
        }
        return sb.toString();
    }
}

上述代码中,我们重写了toPhysicalColumnName方法,该方法用于将Java类中的属性名转换为数据库中的字段名。在这个方法中,我们使用了一个convert方法来将带下划线的字段名转换为驼峰命名法。

最后,在application.properties中添加以下配置即可将自定义的命名策略配置到Hibernate中:

spring.jpa.hibernate.naming.physical-strategy=com.example.demo.hibernate.MyNamingStrategy
3. 测试

好了,现在我们已经完成了Hibernate去掉下划线命名策略的所有配置工作,接下来我们需要进行测试以确保一切正常。以下是一个例子:

@Entity
@Table(name = "my_table")
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "my_column")
    private String myColumn;

    // getters and setters
}

在这个例子中,我们使用了自定义的命名策略,将数据库表名my_table中的字段my_column映射到了Java类中的属性myColumn中,而不是使用下划线命名策略。

总结

通过上面的介绍,我们已经学习了如何去掉Hibernate的下划线命名策略,使用自定义的命名方式。希望这篇文章对您有所帮助,谢谢!