现在 Mybatis 是更多使用注解还是 XML 进行配置? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cwm165
V2EX    Java

现在 Mybatis 是更多使用注解还是 XML 进行配置?

  •  1
     
  •   cwm165 2019-03-14 09:35:08 +08:00 12900 次点击
    这是一个创建于 2444 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人在校生,不知道企业级开发是使用的哪种方式进行配置。

    看过 刘增辉 的书,他推荐的更多是使用 XML 的方式,利于修改和扩展。

    但是我在之前也给学校写过几个大型的项目,类似于预约或者信息录入系统。使用的都是注解的形式,这样看起来整个项目非常清爽。

    各位有丰富实战经验的大佬帮忙解答解答呗,小生在此谢过。

    49 条回复    2019-05-10 01:30:24 +08:00
    zhazi
        1
    zhazi  
       2019-03-14 09:39:37 +08:00 via Android
    xml 是 mybatis 的优势 如果用 mybatis 不用 xml 无疑是自费武功,注解方式有更好的选择
    BCy66drFCvk1Ou87
        2
    BCy66drFCvk1Ou87  
       2019-03-14 09:42:47 +08:00
    注解比 XML 先进
    luoyikang52066
        3
    luoyikang52066  
       2019-03-14 09:44:00 +08:00 via Android
    结合吧,不复杂注解,复杂 xml
    micean
        4
    micean  
       2019-03-14 09:44:24 +08:00   1
    kotlin+注解

    xml 有个 p 的优势
    oKey
        5
    NoKey  
       2019-03-14 09:49:08 +08:00
    其实我觉得是看习惯,我习惯了 xml,就不想写注解,然而有的人习惯注解,就不想写 xml
    这东西,我实在找不出先进不先进的差距
    难道执行效率上有差异?
    AnnieSWonderland
        6
    AnnieSWonderland  
       2019-03-14 09:50:42 +08:00
    xml 更繁琐,复杂的语句用注解简直是灾难
    blackboom
        7
    blackboom  
       2019-03-14 09:53:21 +08:00 via Android   3
    这还用选吗,当然是 JPA 啊
    pelloz
        8
    pelloz  
       2019-03-14 09:56:36 +08:00
    简单的增删改查用 Mapper[https://github.com/abel533/Mapper/wiki]自动化生成,复杂的使用 XML 进行编写。
    XML 有两个功能我们使用比较多。
    1.引用 SQL 片段。
    2.自定义标签语义,实现一些高级功能。
    另外 Java 注解写 SQL 是用字符串拼起来的,不好看也不好修改,我们现在使用的 java8 还不支持 ` ` 反单引号的多行字符串。
    Remote
        9
    Remote  
       2019-03-14 10:01:23 +08:00   1
    我以前也是用xml,然后注解,再后来JPA
    anzu
        10
    anzu  
       2019-03-14 10:01:52 +08:00
    复杂查询 XML,可以在 SQL 编辑器格式化好代码后直接粘贴过来,更易读,方便大家。如果是简单查询,用 JPA 更方便。所以我觉得 mybatis 注解基本没什么优势。
    guoyuchuan
        11
    guoyuchuan  
       2019-03-14 10:02:12 +08:00
    这个看情况,如果全是单表查询,那就使用注解(一般都是些 mybatis 的插件),不用 xml,如果涉及到多表查询,还是得用 xml,而 xml 自己手写配置比较累,可以用逆向工程来构建,然后自己再向 xml 中写自己的 SQL ;
    wucao219101
      &bsp; 12
    wucao219101  
       2019-03-14 10:02:40 +08:00
    MyBatis Generator
    assiadamo
        13
    assiadamo  
       2019-03-14 10:03:57 +08:00
    我习惯在 xml 中配置,不把配置打到包里面,这样改 sql 就不需要重新打包部署了
    chendy
        14
    chendy  
       2019-03-14 10:04:04 +08:00
    一楼说 xml 是 mybaits 的优势…啥优势啊
    TommyLemon
        15
    TommyLemon  
       2019-03-14 10:09:20 +08:00
    有意思,之前有类似的问题,可以看下或许有收获
    现在用 mybatis 都不用 xml 了吗
    t/541755
    br0x
        16
    br0x  
       2019-03-14 10:17:03 +08:00 via Android
    复杂 sql 使用 xml 还是有优势的,尤其遗留业务系统,因为 sql 过长过复杂,使用注解并不够清晰,也可以把 xml 中的 sql copy 到数据库查询工具中一边查询,这样方便理解业务和 debug.遗留系统一般业务较重而且基本是面向数据库编程为指导思想来设计的,所以 mybatis 适合这类系统。
    ghos
        17
    ghos  
       2019-03-14 10:28:40 +08:00
    你想象一下 上百行 sql 写在注解里面是一种什么样的体验
    coang
        18
    coang  
       2019-03-14 10:32:41 +08:00
    用通用 mapper 实现基础得增删改查 复杂得直接 xml
    cwm165
        19
    cwm165  
    OP
       2019-03-14 10:37:26 +08:00 via Android
    @ghos 的确,看来还是我遇到的问题偏简单了
    cwm165
        20
    cwm165  
    OP
       2019-03-14 10:38:40 +08:00 via Android
    @pelloz @coang 这种方式不错,感谢
    cwm165
        21
    cwm165  
    OP
       2019-03-14 10:39:48 +08:00 via Android
    @blackboom Spring Data JPA 听到很多次推荐了,学习一波
    Amit
        22
    Amit  
       2019-03-14 10:48:09 +08:00
    复杂查询用注解的你们开心就好。如果业务简单就用 JPA 了也不会用 mybatis 注解。用 xml 并不丑,java 里写 sql 才是真的丑。
    ahmcsxcc
        23
    ahmcsxcc  
       2019-03-14 11:13:30 +08:00
    这种怎么用注解啊
    BBCCBB
        24
    BBCCBB  
       2019-03-14 11:23:11 +08:00
    当然是配合使用,那种容易理解的一行就能搞定的就注解,复杂点的就 xml
    gejun123456
        25
    gejun123456  
       2019-03-14 11:23:43 +08:00
    @ahmcsxcc #23 这个复杂的 sql 你咋写的.. 配置下 IDEA 的数据库就可以做自动补全了 https://www.jianshu.com/p/d997d278813c

    如何提升 mybatis 开发的效率,可以试试 https://github.com/gejun123456/MyBatisCodeHelper-Pro IDEA 插件
    Raymon111111
        26
    Raymon111111  
       2019-03-14 11:25:49 +08:00
    这都说的是啥

    正确答案是, 看团队习惯, 定下来了之后大家统一用一种.
    ahmcsxcc
        27
    ahmcsxcc  
       2019-03-14 11:27:23 +08:00
    @gejun123456 #25
    专门的 DBA 写的
    micean
        28
    micean  
       2019-03-14 11:43:52 +08:00
    interface OneMapper: AnyMybatisPluginMapper<Entity> {

    @Select("""
    1. Idea inject language -> xxxSQL
    2. 配置数据库,用于 auto complete
    3. 开始写复杂 sql
    """)
    fun querySomething(): List<Entity>

    }


    等 jdk13 出来了,多行字符串都有了,xml 这种早该丢了
    lyog
        29
    lyog  
       2019-03-14 11:48:58 +08:00 via iPhone
    去年底的一个小项目尝试了下注解,难用到爆,回头再用 XML,真香
    serical
        30
    serical  
       2019-03-14 11:50:30 +08:00 via Android
    自动生成的不动,自己增加的用注解,省的数据库增加字段重新生成需要整理 xml
    Shynoob
        31
    Shynoob  
       2019-03-14 11:52:13 +08:00
    当然是根据业务来啊,那些报表类的 你用注解不是给自己找刺激吗?
    serical
        32
    serical  
       2019-03-14 11:53:33 +08:00 via Android
    @ahmcsxcc SelectProvider
    yiyi11
        33
    yiyi11  
       2019-03-14 12:36:42 +08:00 via Android
    经常跳槽用注解,否则用 xml。
    Macolor21
        34
    Macolor21  
       2019-03-14 12:56:14 +08:00
    @ghos
    SelectProvider 了解一下?利用反射还可以生成基本的 SQL 语句
    gejun123456
        35
    gejun123456  
       2019-03-14 12:59:39 +08:00
    @Macolor21 sql 没自动提示,用起来没有 xml 方便
    NoKey
        36
    NoKey  
       2019-03-14 13:26:25 +08:00   1
    @micean 我们这里还大量使用 jdk7,少部分用 8,我感觉就算 jdk 升级到 20,我们这里依然是 7。。。有多少公司是追着 jdk 新版在用的?
    imNull
        37
    imNull  
       2019-03-14 13:42:57 +08:00 via Android
    这个看团队吧 ,目前在用 xml
    glaucus
        38
    glaucus  
       2019-03-14 13:53:56 +08:00
    出于对 xml 的厌恶和偏见,一般用注解+Provider 的形式
    micean
        39
    micean  
       2019-03-14 14:26:23 +08:00
    @NoKey
    kotlin-stdlib 支持 6 以上
    j 调用 k 即可
    woscaizi
        40
    woscaizi  
       2019-03-14 14:38:16 +08:00 via iPhone
    Mybatis-plus 这个 mybatis 增强框架不错。
    简单的 sql 我用注解。
    涉及多表或者复杂条件的用 xml。
    不过大部分 mybatis-plus 的 QueryWrapper 都可以搞定。
    nita22
        41
    nita22  
       2019-03-14 16:41:22 +08:00
    简单的查询就直接用 Mybatis-Generator 生成的 Mapper 搞定,复杂的 SQL 语句都是用 xml
    lurenw
        42
    lurenw  
       2019-03-14 17:41:21 +08:00
    把 sql 这种声明式语言糅杂到代码里让人无法忍受,即便是使用 chain call,也觉得是在破坏代码的简洁美感。
    kiddult
        43
    kiddult  
       2019-03-14 18:22:26 +08:00   1
    @ahmcsxcc 写这种 SQL 的人先拖出去抽一顿,想不开么?
    anyele
        44
    anyele  
       2019-03-14 18:48:54 +08:00 via Android
    肯定是注解
    anyele
        45
    anyele  
       2019-03-14 18:57:17 +08:00 via Android
    @ahmcsxcc 为什么不拆分
    anyele
        46
    anyele  
       2019-03-14 18:59:56 +08:00 via Android
    @ahmcsxcc 不觉得这样写就不对吗
    JohnZorn
        47
    JohnZorn  
       2019-03-14 19:06:37 +08:00 via Android
    需要复杂 sql 和 resultmap 我选择 xml,简单 sql 返回 pojo 直接注解,mapper 中的每个接口方法打好注释
    CFO
        48
    CFO  
       2019-03-15 12:47:17 +08:00 via Android
    xml 有什么优势? xml 能干的注解基本都可以 再不济二者也可混用
    autogen
        49
    autogen  
       2019-05-10 01:30:24 +08:00
    spring 的趋势就是 xml 换成注释
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2670 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 14:21 PVG 22:21 LAX 06:21 JFK 09:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86