188 Star 767 Fork 170

GVPNutz / nutz

 / 详情

请教 Dao 关联操作类设计思想

待办的
任务
创建于  
2019-12-06 12:31

DoInsertLinkVisitor,中 36 行为什么要用 Lang.each 递归操作,同理 DoDeleteLinkVisitor 也是这样,我用测试用例发现 这样会生成多条语句,去掉 Lang.each 递归操作 只会保留两条语句本体和依赖。
请问作者是基于什么考虑设计需要递归?

public class DoInsertLinkVisitor extends AbstractLinkVisitor {

    public void visit(final Object obj, final LinkField lnk) {
        final Object value = lnk.getValue(obj);
        if (Lang.eleSize(value) == 0)
            return;

        // 从宿主对象更新关联对象
        opt.add(Pojos.createRun(new PojoCallback() {
            public Object invoke(Connection conn, ResultSet rs, Pojo pojo, Statement stmt) throws SQLException {
                lnk.updateLinkedField(obj, value);
                return pojo.getOperatingObject();
            }
        }).setOperatingObject(obj));

        // 为其循环生成插入语句 : holder.getEntityBy 会考虑到集合和数组的情况的
        final Entity<?> en = lnk.getLinkedEntity();
//==========================================
// 此处有疑问?是否可以去掉 Lang.each
//==========================================
        Lang.each(value, new Each<Object>() {
            public void invoke(int i, Object ele, int length) throws ExitLoop, LoopException {
            	if (ele == null)
            		throw new NullPointerException("null ele in linked field!!");
                // 执行插入
                opt.addInsert(en, ele);
                // 更新字段
                opt.add(Pojos.createRun(new PojoCallback() {
                    public Object invoke(Connection conn, ResultSet rs, Pojo pojo, Statement stmt)
                            throws SQLException {
                        lnk.saveLinkedField(obj, pojo.getOperatingObject());
                        return pojo.getOperatingObject();
                    }
                }).setOperatingObject(ele));
            }
        });

    }

}

评论 (7)

errorone 创建了任务

应该是为了赋值到关联字段的对象上吧? 你想改一改? 欢迎pr的

@Wendal 目前Dao层是没有自动关联对象依赖查询和插入(多条数据)的,我这边在做这个功能。
已经补全了one、many的插入、修改、删除多个对象自动加上依赖,实现插入的过程(多个记录)中发现遍历是多余的,由于代码改动比较大,而且manymany目前还没有实现,后续完工后我会提交分支,请您审核的。本着尽量少修改的原则(毕竟我可能没考虑那么全名),我想弄明白,作者的设计原理,便于更好的实现功能。

"自动加上依赖"???

@Wendal 目前查询对象获取关联对象需要手动 fetchLinks 而且只有一层,无法递归下去

哦, 这是要改Dao接口, 可选的操作吧?

@Wendal 接口改了,实现类也改了,Cnd 改成 lambda 表达式,字符串列名避免在修改实体对象编译检查不出来

那放到Dao2之类的接口里面就好啦

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
4674 wendal 1578914274
Java
1
https://gitee.com/nutz/nutz.git
git@gitee.com:nutz/nutz.git
nutz
nutz
nutz

搜索帮助