ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Hiberate 注解与映射 – 优缺点 > 原文: [https://howtodoinjava.com/hibernate/pros-and-cons-of-hibernate-annotations-vs-mappings/](https://howtodoinjava.com/hibernate/pros-and-cons-of-hibernate-annotations-vs-mappings/) 您可能知道,在内联注解之前,创建 Hiberate 映射的唯一方法是通过 XML 文件。 尽管来自 Hibernate 和第三方项目的各种工具允许部分或全部映射从 Java 源代码自动生成。 如今,注解是定义映射的最新方法,但并不是自动的最佳方法。 让我们先讨论 Hiberate(或我应该说 JPA)注解的缺点和好处,然后再讨论何时应用它们。 ## Hiberate 注解的缺点 让我们一一列出所有可能的缺点。 * 如果要从 Hibernate 2 环境升级或使用现有的 Hibernate 3 环境,则您将已经具有基于 XML 的映射文件来支持您的代码库。 在所有其他条件都相同的情况下,您不希望仅出于注解目的而使用注解重新表达这些映射。 您将要坚持使用映射,因为它们仍然可以正常运行并且运作良好。 * 因此,如果您要从旧版环境迁移,则可能不希望更改现有的 POJO 源代码,换句话说,您将不会注入可能存在错误的已知良好代码。 * 如果您没有 POJO 的源代码(因为它是由自动化工具或类似的代码(例如旧版代码)生成的),则与反编译类文件以获得 Java 源代码相比,您可能更喜欢使用基于 XML 的外部映射 更改代码。 * 通过将映射信息保留为外部 XML 文件,可以修改映射信息以反映业务更改或架构更改,而不必强制您重新构建整个应用。 ## Hiberate 注解的优点 考虑了缺点之后,使用注解会有一些强大的好处。 * 首先,也许是最有说服力的是,我们发现基于注解的映射比基于 XML 的替代更加直观,因为它们与相关的属性一起直接出现在源代码中。 大多数编码人员倾向于使用注解,因为必须保持较少的文件同步。 * 部分原因是,注解不如 XML 等效项那么冗长。 让我们看一下比较 ```java import javax.persistence.* ; @Entity public class Sample { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Integer id; public String name; } ``` 并将其与等效的映射文件进行比较。 ```java <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd "> <hibernate-mapping default-access="field"> <class name="Sample"> <id type="int" column="id"> <generator class="native"/> </id> <property name="name" type="string"/> </class> </hibernate-mapping> ``` 后者的一些冗长是 XML 本身的本质(标记名和样板文档类型声明),而某些是由于注解与源代码的紧密集成所致。 * 另一个主要的好处是 Hiberate 使用并支持 JPA2 持久化注解。 如果选择不在代码和注解中使用特定于 Hibernate 的功能,则可以使用支持 JPA2 的其他 ORM 工具将实体部署到环境中。 * 最后,也许是次要的一点,因为注解被直接编译到适当的类文件中,因此丢失或陈旧的映射文件在部署时引起问题的风险较小。 ## 选择使用哪个 通常,更喜欢注解; 注解本身可以在 JPA 实现中移植,并且众所周知。 工具可以直接从数据库中创建带注解的源代码,因此,即使使用预先存在的模式,同步也没有多少麻烦。 XML 映射既可以采用 Hibernate 的专有格式,也可以采用 JPA 的标准 XML 配置,它们相似但不相同; 如果您以某种方式发现 XML 是首选的配置格式,则最好使用行业标准 JPA 配置中的 XML 格式。 让我知道您的想法,您更喜欢哪种,为什么? **祝您学习愉快!**