从MybatisPlus回归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;
这个时候很容易写出这样的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
这个很明显是错误的:
正确的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下
标签:MybatisPlus,publication,映射,回归,t2,t1,mybatis,Mybatis,id From: https://www.cnblogs.com/flyleixin/p/17611612.html