以前项目中有一步获取默认值,是全部通过批量执行select查询的,建立了一个defautValue表(有code,field字段),和一个存储sql表,两个表通过一个code字段关联。就是通过code来获取哪些field需要对应哪些sql。有的需要根据传参数查询数据库,有的其实是定值,为了方便写成了select 常量 from dual。然后在set默认值时,就批量的查询,把值set到对应的field。现在给默认值表加了一个默认值字段,如果有默认值,那么code为空,如果没有,就要有code。这样用join连接时就会出现
code field defaultValue sql
code1 field1 null SELECT *** FROM
null field2 1 null
code2 field3 null SELECT XX FROM
以前就直接批量执行sql,然后得到一个Map就set到对应的field了。现在这么做怎么处理呢?
join的时候不要直接join表,而是join一个子查询,子查询中加上判断
select if(code = null, defaultvalue, code) as code, ... from table
如果是oracle建议你用序列来实现,这个最方便,不会重复
那也没用啊,其实不用IFNULL或者NVL,直接连表,defaultValue字段也是有值的。问题就在于,以前的做法是批量执行select,每个field都对应一个select最后返回一个map。现在这样查询出来显然是不能批量执行sql查询的。