jdk8, spirngboot ,mysql,mybatis ,mybatis-plus
问题
例如:mysql 一张表,a,b,c,d,e,f,g 这几个字段,然后有一个实体类 demoEntity 跟数据库表对应
需求: 我现在一个接口,我只需要 a,b,c 三个字段就足够了,然后我返回给前端,也只想返回这三个,如果不用 mybatis-plus 我可以把 a b c 封装成一个 vo ,mapper 里直接返回 vo , 如果用 Mybatis-plus , 可以先用实体类接到数据,然后再 set 给 vo ,这太鸡肋了,还有就是 封装一下 mp ,让他能够兼容 vo 返回,也可以; 但是我现在又有一个接口 只需要 d,e,f,g 这四个字段,那么我就得在封装个 vo,这时候 之前封装的 mp 返回的 vo 就不能用了,就得在建一个 server 类 在去继承另个 vo ;
解决:我能想的就是 用一个 vo ,但是接口返回可能会存在冗余字段,不想存在,就得手写 sql 查,完全用不到了 mp ,我想问问大家怎么解决这种问题
问题 2
例如 我同样一个 sql:
select * from user where rid in (1,2,3,4....); rid 可能有上万个,但 rid 不是主键;
然后我用 mp 手写一个批量查方法
LambdaQueryWrapper[U] lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.in(User::getRid, Arrays.stream(new Integer[]{1, 2, 3, 4, ....}));
userMapper.list(lambdaQueryWrapper);
我执行下来发现,打印的 sql 是一样的,但是 mp 的查询时间就很快; 这是为啥;
大家在去批量差一个表里的非主键字段的时候 会用什么方法提高效率,mysql 用 in 应该不会走索引吧
问题 3
spring cloud 项目,例如有 A B 两个服务,每个服务有自己的库;
需求: 我现在 A 服务里一个接口,我需要关联查 B 服务的数据,并且合并以后分页 按照 B 库里的时间字段倒序 返回,这类大家会怎么做;
我百度搜了很多方法,用远程调用,拿到数据在合并,或者用 mq 解耦,或者数据仓库, 是能解决,我想问问大家都是在用什么方法?