前提:
数据访问使用Mybatis,数据库使用Mysql;
1、现状
首先可以定义了一个类hibernate的sql语句
from (
Select a.* ,b.name as bname,c.name as cname from table_a a
left join table_b b on a.bid=b.id
left join table_c c on a.cid=c.id
)
然后可以通过mybaits的拦截器,根据前端传递的参数 进行字段查询 select id,bname,cname from (.....) ORDER BY bname 进行查询。
此类方式相信很多人在做框架封装都是这样操作。
但是由此却发生了一个很严重的问题。
首先,效率问题,这个问题比较严重,咋EXPLAIN下看到起码有200%性能损耗,主要是因为做了子查询!
其次,查询结果问题,查询结果本来默认会根据a.id 排列(a是一个顺序字段),不过由于子查询,其排列会变得无规则;
2、解决思路
定义一个映射关系集合,根据客户端传入的字段,从映射中直接查询,得到的语句为
Select a.id ,b.name as bname,c.name as cname from table_a a
left join table_b b on a.bid=b.id
left join table_c c on a.cid=c.id ORDER BY
注意:上面语句红色部分是从映射中生产的,实际上前端之传入 id,bname,cname三个值;
希望各位能够为我点评!