V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
BraveXaiver
V2EX  ›  问与答

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

  •  
  •   BraveXaiver · 274 天前 · 1460 次点击
    这是一个创建于 274 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT ,我在想 resultMap 既然提供了数据库列列名到 POJO 的成员名间的映射,那 mybatis 有没有提供机制以让 insert 语句和 update 语句反过来利用这个 resultMap 自动将成员名映射到数据库列名啊。。。我现在在做一个三十多个列的数据库的 mapper 层,写 SQL 烦死了。而且项目中已经有大量的 mybatis 的 mapper ,这种情况下引入 JPA 会不会冲突啊。。

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

    谢谢!
    第 1 条附言  ·  274 天前
    mybatis-plus:
    global-config:
    db-config:
    capital-mode: true

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

    或者使用注解单独设置:
    @TableField(value = "USER_NAME")
    private String userName;
    Navee
        14
    Navee  
       274 天前
    InkAndBanner
        15
    InkAndBanner  
       274 天前
    mybatisPlus 是个很好用的毒药 简化开发 天然支持多租户 同时侵占 mapper 层甚至 service 层
    JYii
        17
    JYii  
       274 天前
    @BraveXaiver #9 看下 db 是否大小写敏感咯,图省事配置成不敏感就结了
    key0323
        18
    key0323  
       274 天前
    从这个问题的回答量能看出 v 站用户对摸鱼的热衷程度
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1695 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:31 · PVG 00:31 · LAX 09:31 · JFK 12:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.