数据集外键关联
最后更新:2024-10-18 09:28:23
|
状态:未完成
应用场景如
如果需要全局统一处理的,可以配合【拦截器】在查询成功后根据DataSet.metadata属性(列名称、数据类型、表名等信息)统一调用foreign方法
因为是逐行调用所以这里应该使用【缓存】
订单集合中有user_id,需要根据user_id到users集合中关联中user_name
如果通过SQL实现大概是这样
SELET O.*, U.NAME AS USER_NAME
FROM MM_ORDER AS O
LEFT JOIN CRM_USER AS U ON M.USER_ID = U.ID
1.如果通过关联查询可以这样实现
RunPrepare prepare = TableBuilder.init("HR_USER").foreign("TYPE_CODE", "HR_TYPE", "CODE", "NAME", "TYPE_NAME").build(); ServiceProxy.querys(prepare); //SQL: SELECT HR_TYPE.NAME AS TYPE_NAME, HR_USER.* FROM HR_USER LEFT JOIN HR_TYPE ON HR_USER.TYPE_CODE = HR_TYPE.CODE prepare = TableBuilder.init("HR_USER AS U").foreign("TYPE_CODE", "HR_TYPE AS T", "CODE", "NAME", "TYPE_NAME", "U.ID > 0").build(); ServiceProxy.querys(prepare); //SQL: SELECT T.NAME AS TYPE_NAME, U.* FROM HR_USER AS U LEFT JOIN HR_TYPE AS T ON (U.TYPE_CODE = T.CODE AND U.ID > 0)2.如果已经有了orders与user集合的可以调用DataSet的foreign方法,把user_name存入orders相应的条目中
如果需要全局统一处理的,可以配合【拦截器】在查询成功后根据DataSet.metadata属性(列名称、数据类型、表名等信息)统一调用foreign方法
因为是逐行调用所以这里应该使用【缓存】
/** * 外键关联<br/> * 如果要合并条目(如把对应user的全部数据合并到当前集合条目)应该调用join<br/> * 如果要把set中的条目作为一个整体放到当前集合条目中应该调用dispatch(如果需要一对多关系调用dispatchs) * @param fk 关联列 如 user_id * @param set 关联数据集 如 users * @param pk 关联数据集.关联列 如 id * @param intent 关联数据集.关联结果列 如 name * @param alias 关联结果存储列 如 user_name * @return this */ public DataSet foreign(String fk, DataSet set, String pk, String intent, String alias) orders.foreign("user_id", users, "id", "name", "user_name") //如果需要从user中提取多列 Map<String,String> intents = new HashMap(); intents.put("name", "user_name"); intents.put("tel", "user_tel"); orders.foreign("user_id", users, "id", intents);