数据访问的一些问题及想法

前提:

数据访问使用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三个值;



希望各位能够为我点评!



你可能感兴趣的:(数据访问的一些问题及想法)