>>分享JPA、Hibernate、Mybatis对象持久化技术,对《精通JPA与Hibernate:Java对象持久化详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23636 个阅读者 刷新本主题
 * 贴子主题:  用注解和XML描述对象-关系映射的区别,和优缺点 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-02-11 10:00:14     消息  查看  搜索  好友  邮件  复制  引用

  • 注解:是一种分散式的元数据,与源代码紧绑定。
  • xml:是一种集中式的元数据,与源代码无绑定。
因此注解和XML的选择上可以从两个角度来看:分散还是集中,源代码绑定/无绑定。

注解的缺点:

1、很多朋友比如在使用spring注解时,会发现注解分散到很多类中,不好管理和维护;这个其实要借助工具,我目前使用的是IDEA,它在这方面表现的非常好;当然现在还有Spring的STS,也是不错的; 所以借助工具,能解决这个问题;

2、注解的开启/关闭必须修改源代码,因为注解是源代码绑定的,如果要修改,需要改源码,这个有这个问题,所以如果是这种情况,还是使用XML配置方式;比如数据源;

3、注解还一个缺点就是灵活性,比如在之前翻译的Spring Framework 4.0 M1: WebSocket 支持;在实现复杂的逻辑上,没有XML来的更加强大;注解就是要么用,要么不用,比如之前的jpa bean validation,要么全,要么没;遇到这种情况很痛苦;

4、还一种就是约定大于配置,但是在处理一些复杂的情况下,注解还是需要的(如Spring的数据验证/数据绑定注解很强大);

5、通用配置还是走XML吧,比如事务配置,比如数据库连接池等等,即通用的配置集中化,而不是分散化,如很多人使用@Transactional来配置事务,在很多情况下这是一种太分散化的配置;

6、XML方式比注解的可扩展性和复杂性维护上好的多,比如需要哪些组件,不需要哪些;在面对这种情况,注解扫描机制比较逊色,因为规则很难去写或根本不可能写出来;

注解的好处:

1、XML配置起来有时候冗长,此时注解可能是更好的选择,如jpa的实体映射;注解在处理一些不变的元数据时有时候比XML方便的多,比如springmvc的数据绑定,如果用xml写的代码会多的多;

2、注解最大的好处就是简化了XML配置;其实大部分注解一定确定后很少会改变,所以在一些中小项目中使用注解反而提供了开发效率,所以没必要一头走到黑;

3、注解相对于XML的另一个好处是类型安全的,XML只能在运行期才能发现问题。

总结

注解也好,XML也好,我们还是需要一些开关/替换机制来控制特殊需求,以改变那种要么全部 要么没有的方案。

还一种呼声就是约定大于配置,这种方案可能在某些场景下是最优的,但是遇到一些复杂的情况可能并不能解决问题,所以此时注解也是一个不错的方案。尤其在使用springmvc时,好处是能体会的出的。

不管使用注解还是XML,做的事情还是那些事情,但注解和XML都不是万能的,满足自己的需求且已一种更简单的方式解决掉问题即可。
————————————————
转自:https://blog.csdn.net/dreamweaver_zhou/article/details/77511745


程序猿的技术大观园:www.javathinker.net

[这个贴子最后由 flybird 在 2020-02-23 11:34:41 重新编辑]
  Java面向对象编程-->集合(下)
  JavaWeb开发-->开发JavaMail Web应用
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->组合(Composition)API
  Vue3开发-->绑定表单
  孙卫琴的《精通JPA与Hibernate》的读书笔记: 用JPQL批量处理...
  Hibernate使用中防止SQL注入的几种方案
  JPA EntityManager详解
  好消息:孙卫琴老师制作的最新JPA与Hibernate视频教程出炉了
  Hibernate中通过FetchProfile的方式实现动态数据获取
  分析hibernate中table per class hierarchy映射方式容易出现...
  Hibernate的二级缓存
  Session的refresh()方法与事务隔离级别的关系
  JPA/Hibernate:基于版本的乐观锁并发控制
  Hibernate的八种对象标识符生成策略
  Hibernate 对象-关系映射: @注解与xml 配置方式比较
  Hibernate配置文件中的hibernate.hbm2ddl.auto属性详解
  JPA (Java Persistence API)2.2 的一些新特性
  解决运行Hibernate时的NoClassDefFoundError: javax/xml/bin...
  总结Hibernate5的新特性
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。