BraveXaiver
V2EX  ›  问与答

请问 mybatis 可以利用 resultMap,免去我写 insert 语句时手写 SQL 的麻烦吗

  •  
  •   BraveXaiver · Jul 28, 2023 · 2239 views
    This topic created in 1018 days ago, the information mentioned may be changed or developed.
    RT ,我在想 resultMap 既然提供了数据库列列名到 POJO 的成员名间的映射,那 mybatis 有没有提供机制以让 insert 语句和 update 语句反过来利用这个 resultMap 自动将成员名映射到数据库列名啊。。。我现在在做一个三十多个列的数据库的 mapper 层,写 SQL 烦死了。而且项目中已经有大量的 mybatis 的 mapper ,这种情况下引入 JPA 会不会冲突啊。。

    另外再问一下,数据库列的列名,它的格式是全大写英文,中间用下划线分割,比如:USER_NAME ,然后 POJO 内的成员,对应这个列的就是 userName 。我记得是不是有个设置 mapping 方式的配置,可以让 mybatis 自动使用这种对应关系,从而做到不用手写 ResultMap ?

    谢谢!
    Supplement 1  ·  Jul 28, 2023
    mybatis-plus:
    global-config:
    db-config:
    capital-mode: true

    驼峰命名转下划线 mybatis 是自动开启的,然后通过如上配置可以要求转成的列名再全部大写。
    18 replies    2023-07-28 13:43:30 +08:00
    ZGame
        1
    ZGame  
       Jul 28, 2023
    这是 orm 做的事情 ,可以关注一下 mybatis-plus...
    BraveXaiver
        2
    BraveXaiver  
    OP
       Jul 28, 2023
    @ZGame mybatis-plus 也算是久仰大名了,就这个需求,plus 有对应的功能吗?可以给个关键词我搜下吗
    lsk569937453
        3
    lsk569937453  
       Jul 28, 2023
    简单的增删改查一律 mybatis-plus
    litchinn
        4
    litchinn  
       Jul 28, 2023
    不是可以生成吗,然后复制修改,还嫌麻烦就换 mybatis-plus
    insert 直接利用 resultMap 应该不行,但是可以使用<sql>标签来达到复用大量重复内容的目的
    JYii
        5
    JYii  
       Jul 28, 2023   ❤️ 1
    下划线转驼峰:map-underscore-to-camel-case
    VersionGod1
        6
    VersionGod1  
       Jul 28, 2023
    mybatis-plus ,非常方便。你说的 pojo 类和数据库列名的对应关系,按照你的格式 mybatis-plus 可以自动转换对应。
    miaotaizi
        7
    miaotaizi  
       Jul 28, 2023
    service 里面的 saveBatch 满足不了你还是 咋地?
    miaotaizi
        8
    miaotaizi  
       Jul 28, 2023
    @miaotaizi mybatis-plus 里面的 功能
    BraveXaiver
        9
    BraveXaiver  
    OP
       Jul 28, 2023
    @JYii
    @litchinn
    @lsk569937453
    @miaotaizi
    请问下,我用 mybatis-plus 试了下,但当前有个问题,驼峰转英文加下划线,转出来的列名格式是对的,但是列名是小写,数据库里的是大写,这咋整啊
    wxlwsy
        10
    wxlwsy  
       Jul 28, 2023
    我讨厌 xml, 所以我用了动态 SQL,就是 Mybatis-Dynamic-Sql.
    除非个性查询, 一般都是整条数据存储不用额外写什么.
    遇到特殊需求就是需要你去拼写 sql, 这种最方便还是直接写 sql 字符串,没有之一!!!
    但是,就是但是直接写 sql 字符串不优雅,更重要的是不安全.而且如果你数据表结构发生变化,编译时期无法检测错误.
    像 java 这种语言,能编译检测的错误为何要留在运行时去发现对吧?你改个表字段,导出数据库对应的 java 文件,一编译就能发现哪里报错字段不兼容了.
    miaotaizi
        11
    miaotaizi  
       Jul 28, 2023
    用之前不是应该先查阅一下文档吗?
    在这问比较快?
    ljsh093
        12
    ljsh093  
       Jul 28, 2023
    @BraveXaiver #2 USER_NAME 对应 do 的 userName 这种简单的 crud 可以用 mp 自带的实现类实现,就是个.updateById 的事情
    willxiang
        13
    willxiang  
       Jul 28, 2023   ❤️ 1
    配置文件:
    mybatis-plus.configuration.db-column-underline=true

    或者使用注解单独设置:
    @TableField(value = "USER_NAME")
    private String userName;
    Navee
        14
    Navee  
       Jul 28, 2023
    InkAndBanner
        15
    InkAndBanner  
       Jul 28, 2023
    mybatisPlus 是个很好用的毒药 简化开发 天然支持多租户 同时侵占 mapper 层甚至 service 层
    JYii
        17
    JYii  
       Jul 28, 2023
    @BraveXaiver #9 看下 db 是否大小写敏感咯,图省事配置成不敏感就结了
    key0323
        18
    key0323  
       Jul 28, 2023
    从这个问题的回答量能看出 v 站用户对摸鱼的热衷程度
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   948 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 21:29 · PVG 05:29 · LAX 14:29 · JFK 17:29
    ♥ Do have faith in what you're doing.