V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phx13ye
V2EX  ›  Java

MyBatis,求正确使用姿势?

  •  
  •   phx13ye ·
    Alwayswithme · 2015-07-06 23:57:55 +08:00 · 4763 次点击
    这是一个创建于 3456 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有很多非常类似的SQL,应该怎么抽象处理,每一句都要自己写吗?
    比如selectByXXX, deleteByXXX

    二级缓存问题,它是基于每个mapper的命名空间,假设有员工,公司。
    员工mapper中某一个select根据employee_id查询查员工,根据company_id嵌套查询其公司
    这个select被缓存后,
    然后在公司mapper中CUD一番,怎么让员工mapper中那个select清空缓存?

    我使用姿势不对?为什么你们都说mybatis好?
    14 条回复    2015-07-10 22:51:14 +08:00
    phx13ye
        1
    phx13ye  
    OP
       2015-07-07 00:25:05 +08:00
    第一个问题主要想知道你们一般都怎么处理,感觉表多了不是得写疯啊?不想用网上那个通用mapper,它解决的主要还是单表问题,不可能POJO的属性或者说实例变量都是基本类型没有关联关系吧。

    你们有没有DRY一点的方式解决?
    nino789pzw
        2
    nino789pzw  
       2015-07-07 01:01:40 +08:00
    inherit from a common dao, and put the parameter in a map?
    phx13ye
        3
    phx13ye  
    OP
       2015-07-07 01:16:45 +08:00 via Android
    @nino789pzw 但是对于不同表的比如说删除语句,不是还需要自己写吗?你这只是解决了少写接口方法的问题吧,每个命名空间下,对应该方法不是还要写sql吗?
    如果我的数据库大概有30多张表,
    nino789pzw
        4
    nino789pzw  
       2015-07-07 01:26:54 +08:00
    @phx13ye 将hashmap作为参数传入 在命名空间里面loop hashmap的key/value append到SQL
    phx13ye
        5
    phx13ye  
    OP
       2015-07-07 01:51:00 +08:00 via Android
    @nino789pzw 额,请问怎么具体怎么做?
    假如我需要这样一个语句WHERE key = value, ognl表达式不熟
    nino789pzw
        6
    nino789pzw  
       2015-07-07 01:59:10 +08:00
    which version of myBatis r u using?
    If I remember it correctly..it should have <foreach>
    linnchord
        8
    linnchord  
       2015-07-07 08:11:09 +08:00
    thinkmore
        9
    thinkmore  
       2015-07-07 09:50:57 +08:00
    generator自动生成
    vivisidea
        10
    vivisidea  
       2015-07-07 09:52:11 +08:00
    有很多非常类似的SQL,应该怎么抽象处理,每一句都要自己写吗?
    比如selectByXXX, deleteByXXX

    --
    我们项目是用 freemarker 自己写模板文件生成的代码
    顺便还能把基本的dao和service文件(基本的CRUD,其他业务逻辑当然要手写了)也一并生成了
    cnhongwei
        11
    cnhongwei  
       2015-07-07 14:16:02 +08:00
    mybatis 我认为有些麻烦,不过orm也没有太爽。现在使用spring data jpa好一点。不知道Query DSL如果,看样子还可以。但感觉java中,大部分的框架,都要写个bean和column的对应实在不爽,没有办法自己推断吗?不知道其它的语言怎么样。现在有点想学习一下scala 的 slick, 不知道会不会好一些。
    phx13ye
        12
    phx13ye  
    OP
       2015-07-07 14:44:42 +08:00
    @cnhongwei jpa定义多了manytoone 和 manytomany 会关联太多查询,控制不好容易有N+1问题。
    不过小项目用确实爽,那些repo接口强行很规范
    lidiya
        13
    lidiya  
       2015-07-09 15:50:24 +08:00
    Java Web进阶-Mybatis视频资料 http://www.maiziedu.com/course/java/357-4370/
    dongfangshangren
        14
    dongfangshangren  
       2015-07-10 22:51:14 +08:00
    基础SQL比较多可以用mybatis generator,有类似的sql可以使用sql标签重用,或者有一几乎一样的sql只是参数不同可以用动态sql,mybatis自带缓存不太喜欢用,用springcache、aop等其它方式更简单灵活
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.