数据集外键关联

最后更新:2024-10-18 09:28:23 | 状态:未完成
应用场景如

订单集合中有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);

首页 最近更新 搜索 提交 回复