从 Mybatis-Plus 回归 Mybatis-Spring专区论坛-技术-SpringForAll社区

从 Mybatis-Plus 回归 Mybatis

之前写项目一直习惯使用MyBatisPlus,单表查询很方便;两张表也很方便,直接业务层处理两张表的逻辑。但什么都图方便只会害了你。

但连接的表比较复杂的时候,还是要使用MyBatis 写 SQL,这对于一个Plus选手,无疑是遇到了一些障碍的。

SQL的一些问题

分页的问题

当习惯使用了MybatisPlus的分页,再回到Mybatis写SQL,分页容易出点问题.

select t1.id,
       title,
       content,
       t2.id,
       t2.publication_id,
       t2.tag_name
from publication t1
         inner join publication_tag t2 on t1.id = t2.publication_id

id为1的文章有两个标签,id分别为1,2;

image

这个时候很容易写出这样的sql

select t1.id,
       title,
       content,
       t2.id,
       t2.publication_id,
       t2.tag_name
from publication t1
         inner join publication_tag t2 on t1.id = t2.publication_id
limit 1,2

这个很明显是错误的:

image

正确的SQL应该是类似这样的:

select t1.id,
       title,
       content,
       t2.id,
       t2.publication_id,
       t2.tag_name
from (select * from publication limit 1,2) t1
         inner join publication_tag t2 on t1.id = t2.publication_id

映射的问题

有些复杂的查询映射会在resultMap中嵌套一些映射(如:association,collection),当autoMappingBehavior使用PARTIAL的时候,如果有嵌套映射,则这个嵌套映射不会进行自动映射了。按照一般开发来说,这时候驼峰映射就失效了。这个时候应该设置将其设置成FULL

当这个解决了之后,你在application.yml写下以下配置:

mybatis:
  configuration:
    auto-mapping-behavior: full
    
mybatis-plus:
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志

这个时候,你感觉问题解决了,实际上还是映射不了,mybatis的配置未生效,具体原因我也还在探究,目前先留下正确的配置:

mybatis-plus:
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
    auto-mapping-behavior: full


只需要将配置都放在mybatis-plus下。

来源:https://www.cnblogs.com/flyleixin/p/17611612.html#/c/subject/p/17611612.html

请登录后发表评论

    没有回复内容