MyBatis 用注解好还是用 XML 好?

本贴最后更新于 2284 天前,其中的信息可能已经时移世改

mybatis 支持注解 sql 语句,如:

package com.iandtop.jxy.mapper; import com.iandtop.saas.smartpark.vo.UserVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; /** * @author andyzhao */ @Mapper public interface LoginMapper { @Select("select count(*) from sm_user") Integer retrieveAllCount() throws RuntimeException; @Select("select * from sm_user WHERE user_password = #{password} and user_code = #{code}") List<UserVO> retrieveByCodeAndPwd(@Param("code") String code, @Param("password") String password) throws RuntimeException; @Select("select * from sm_user WHERE user_code = #{code}") List<UserVO> retrieveByCode(@Param("code") String code) throws RuntimeException; @Select("SELECT * FROM SM_USER WHERE pk_user = #{pk_user}") UserVO findByPK(@Param("pk_user") String pk_user); }

但是常用的还是 xml 方式,比如:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.iandtop.jxy.mapper.LoginMapper"> <select id="retrieveAllCount" resultType="java.lang.Integer"> select count(*) from sm_user </select> <select id="retrieveByCodeAndPwd" resultType="com.iandtop.saas.smartpark.vo.UserVO"> select * from sm_user WHERE user_password = #{password} and user_code = #{code} </select> <select id="retrieveByCode" resultType="com.iandtop.saas.smartpark.vo.UserVO"> select * from sm_user WHERE user_code = #{code} </select> </mapper>

到底选哪一种呢?我选 xml:

  1. 首先官方也是推荐使用 xml
  2. 注解方式拼接动态 sql 功能有限
  3. java 又和 sql 搞到一起了感觉很不爽

网上有说“按需使用",大致意思就是说如果”复杂“就用 xml,剩下的就用注解。那为什么这么复杂,干嘛不干脆用 xml 就得了?

网上有说“注解和 xml 的一起使用”,大致就是一个工程一会用注解一会用 xml。那为什么这么复杂,干嘛不干脆用 xml 就得了?

总结:

  1. 注解也许有很多优点,但是哪位同胞可以好心告诉我下?
  2. Java 各个框架太多,能简洁干嘛要复杂?我就奇了怪了。如果整天只是满脑子的各种框架的使用和配置方法那真是弱爆了。
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 364 关注
  • 注解
    10 引用 • 22 回帖
  • XML
    28 引用 • 59 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    赞同,我也觉得统一用 XML 最好!

  • lijp

    项目中一直用的 xml

  • xiaomogu

    xml、维护方便。

  • Eddie

    XML

  • eddy

    习惯 xml,一般使用 xml。
    但有人认为使用注解可以做到抽象 base sql。
    个人喜欢分开

  • yangyujiao via macOS

    我也觉得 xml 好,方便,而且复杂 sql 也好处理。
    可是现在项目他们偏偏要用注解,,,搞的乱七八糟的。
    而且我问他们注解比 xml 的好处在哪里???告诉我说有些简单的 sql 可以不用写了。。。关键是 哪有那么多简单的,多数都是多表查询,本来我们就是做后台管理系统。。。
    另外,xml 也可以先自动把 sql 都生成呀,,,那些简单的 基本也可以用。 对不。

  • vickllny

    xml 好呀 当面对很长的 sql 的时候 拼接 sql 会爆炸的

  • ny53676314

    XML 好维护

  • javmain

    本人感觉也是 xml 好吧。

  • ql562482472

    可是我还是喜欢用注解
    项目不使用任何关联查询,所有的逻辑都放在 java 处理
    不喜欢配置文件到处都是
    如果非要一个理由 大概就是简洁把

请输入回帖内容 ...

推荐标签 标签

  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    182 引用 • 408 回帖 • 490 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 529 关注
  • OneNote
    1 引用 • 3 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 2 关注
  • 印象笔记
    3 引用 • 16 回帖
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 290 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 552 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 7 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    733 引用 • 1280 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 815 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 4 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    133 引用 • 1124 回帖 • 109 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 760 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 447 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • OpenCV
    15 引用 • 36 回帖 • 5 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 504 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖 • 1 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注