场景使用高代码后端要去数据库查资料, 除了直接下SQL的方式外, 更可用java物件的方式, 使用DWQueryInfo来进行
优点
以最常见的多租户场景, 使用DWQueryInfo, DAP会自动将租户讯息带入, 如果直接下SQL, 如果没有自行将租户讯息(tenantsid)组进SQL中, DAP会报错
前置准备
要使用DWQueryInfo, 必须要用您的table, 建立table的MataData, 这部分可以使用微服务测试工具来帮助您
工具来源 : 询问与您对接的平台人员/开发顾问 拿取
版本 : 现在最常用的版本为1.6.3及1.6.4, 建议使用1.6.4 , 如您使用MySQL8.0 , 1.6.3登入时会报错(password), 这是因为MySQL8.0针对密码登入有做变更所导致
基本操作 : 在为服务平台测试工具中, 参考文件[测试中心使用说明文件.pptx]
产生MataData
STEP1.进入MataData工具, 填写数据库连线资讯后, 按[连线], 当下方出现连线成功即表示已连线
STEP2.选择要产生MataData的table, 按[产生]
STEP3.在页面最下方, 按下[产生SQL], 则可在下框看到产生的SQL, 将之复制到您的SQL Client执行即可
后端的撰写范例
private static final Logger LOGGER = LoggerFactory.getLogger(ProjectCenterTaskDao.class);
private final static String TABLE_NAME = "pcc_project_center_task";
@Autowired
@Qualifier("dw-dao")
private DWDao dao;
public List<Map<String, String>> getFromSerialNumber(String serialNumber){
DWQueryInfo queryInfo = new DWQueryInfo();
queryInfo.setTableName(TABLE_NAME);
//查询条件
DWQueryCondition condition = queryInfo.getCondition();
condition.addEqualInfo("serialNumber", serialNumber);
DWSqlInfo parse = ((DWDaoImpl) this.dao).getDialect().parse(queryInfo);
LOGGER.info("Get pcc_project_center_task SQL = " + parse.getSql() + ", Parameters:" + com.alibaba.fastjson.JSONObject.toJSONString(parse.getParametersAsList()));
//执行查询
Object data = this.dao.select(queryInfo, new DWDataSetOperationOption());
//整理取得的资料
List<Map<String, String>> result = new ArrayList<>();
DWDataRowCollection rows = ((DWDataSet) data).getTables().getPrimaryTable().getRows();
for (DWDataRow dwDataRow : rows) {
Map<String, Object> tempMap = dwDataRow.getData();
result.add(conversionMap(tempMap));
}
return result;
}
private Map<String, String> conversionMap(Map<String, Object> data){
Map<String, String> result = new HashMap<>();
for (String key : data.keySet()) {
String value = String.valueOf(data.get(key));
result.put(key, value);
}
return result;
}
额外说明
1.查询条件DWQueryCondition, 除了最基本的addEqualInfo, 也就是SQL的等于, 进阶点还可以使用addFieldInfo
例如
condition.addFieldInfo("columnA", DWQueryValueOperator.GreaterThanOrEqualTo, "testValue");
从IDE点进去DWQueryValueOperator看, 即可看到有多种运算式可选, 弹性很大