nutzam / nutz

Nutz -- Web Framework(Mvc/Ioc/Aop/Dao/Json) for ALL Java developer
https://nutzam.com
Apache License 2.0
2.53k stars 942 forks source link

需求:求Nutz做ActiveRecord,强烈求 #496

Closed limingwei closed 11 years ago

limingwei commented 11 years ago

其实我也理解不深,但谁管他那么多概念咧,价值观对了才是根本,用更爽的方式写代码!!!

下面这俩做参考吧 https://github.com/limingwei/li/blob/master/framework/li/dao https://github.com/jfinal/jfinal/tree/master/src/com/jfinal/plugin/activerecord

ywmmmw commented 11 years ago

现在的这种方式已经很不错了吧? li我不知道 jfinal目标是像脚本语言那样写 nutz是为了更加平滑的让写惯了ssh的人过渡的阿 两者目的都不一样啊

limingwei commented 11 years ago

我知道,nutz就是ssh模型,但是的确有更好的模型,干嘛不做一个这个模型的实现呢

ywmmmw commented 11 years ago

当然是不重复造轮子的理由....喜欢那样的可以直接去用实现了那样的框架嘛.......jfinal的javabean也不需要写啥嘛

limingwei commented 11 years ago

干嘛又来 重复造轮子 这句话呢 唉

limingwei commented 11 years ago

干嘛又来 重复造轮子 这句话呢

wendal commented 11 years ago

慢慢来, 先把api什么的定下了, 然后实现

ywmmmw commented 11 years ago

并不是说,完全不能重复造,只不过怎么说呢,如果没有也很简便不是么,当然了,如果真的很需要!自己搞!

ywjno commented 11 years ago

ActiveRecord在约定大于配置的情况用着才最爽,当数据库模型跟java的bean没有一一对应关系时写起来也是很麻烦的

limingwei commented 11 years ago

楼上:Ar并不存在java的Bean,数据放在Map里面的,不存在属性名对应的问题。 楼上的楼上:我倒是觉得的确是是简便了很多,而这正是他的价值。

这是Demo,代码写的丑,只为说明问题 https://github.com/limingwei/li/tree/master/demo/li/people

ywjno commented 11 years ago

只是一个 map 的简单封装的话 nutz 也有一个叫做Record的类来做这个事情啊,不构建 POJO 访问数据库

所以我不太清楚你想干什么,而且给的 demo 也就是单表查询简单,关联查询的时候还是需要靠写 sql 语句来做对吧

    public List<Account> list(Page page, String key) {
        String sql = "SELECT a.*,r.name role_name " + "FROM t_account a " + "LEFT JOIN t_role r ON a.role_id=r.id WHERE 1=1";
        if (!Verify.isEmpty(key)) {
            sql += " AND(a.username LIKE '%" + key + "%' OR a.email LIKE '%" + key + "%')";
        }
        return super.list(page, sql);
    }

并且这样靠 string 来拼接 sql 语句的话不会有SQL注入攻击的危险么?

limingwei commented 11 years ago

首先,楼上好。

第一,关于SQL注入的问题,不属于这次讨论的范畴 第二,Nutz的确有Record,但用起来还是有一些区别。

比如我需要消灭掉所有POJO,需要一个Record的子类对应一个数据表,需要把这个表相关数据访问的代码就放在这个Record类里,需要Record能够像POJO一样save和update,而不是仅仅是查询。

ywjno commented 11 years ago

我那个说的重点是关联查询的时候需要靠写sql来实现而不能通过方法获得,SQL注入只是随口一说罢了

limingwei commented 11 years ago

关联查询的时候需要靠写sql来实现而不能通过方法获得 的确不能,而且Ar里面根本不存在这个需求 但是,然后呢? 我怎么感觉你在说麦当劳里不卖肯德基一样。

crskyp commented 11 years ago

nutz现在的record不够用吗?

在 2013年7月30日下午12:11,limingwei notifications@github.com写道:

关联查询的时候需要靠写sql来实现而不能通过方法获得 的确不能,而且Ar里面根本不存在这个需求 但是,然后呢? 我怎么感觉你在说麦当劳里不卖肯德基一样。

— Reply to this email directly or view it on GitHubhttps://github.com/nutzam/nutz/issues/496#issuecomment-21768642 .

ywjno commented 11 years ago

那做个 ActiveRecord 它的需求是什么? 就仅仅是为了方便快速单表查询了?不用在乎表关联之类的这种客观存在并且会常用使用的情况了

而且在前几个的回复里面已经说了我的观点,就是我不太清楚你想干什么,就是加上这个玩意的用处是干什么, 为了快速方便的进行单表查询, 并且还能直接用它的实例来进行有被SQL注入的危险的 create、update、delete么?

ywjno commented 11 years ago

@crskyp 貌似他想说的是我这个不仅可以进行select,而且还可以直接对它的实例进行create、update、delete

ywjno commented 11 years ago

再来 java 这边的 ActiveRecord 这个提法是从哪个地方冒出来的?有没有什么介绍文档么? 我倒是知道在 ruby on rails 里面这个可是个高级玩意

limingwei commented 11 years ago

算了,这样聊着没意思。

ywjno commented 11 years ago

1)为了消灭 POJO 而采用 Map 来封装一个对象但是需要自己手写SQL语句来实现关联检索的处理 2)为了少写甚至不写SQL语句而是用 POJO 的形式进行数据库检索

白菜萝卜各有所爱

稍微找了一圈,发现 activejdbc 这个是比较跟 ruby on rails 的ActiveRecord 功能接近的类库,不仅能直接对实例化对象进行 create、update、delete,还能直接用这个类进行select操作,并且关联检索也不需要写SQL语句就能实现,这个才用得爽

zozoh commented 11 years ago

关键是要用充血还是贫血 Nutz 选了贫血, 所以不会再做充血了 我不反对充血,只是我的代码里一律是贫血模型,数据对象就是数据对象,尽量不带 IO 相关的东东 这样,我的数据对象才好用在各个地方,比如 Json 弄出一个数据对象交给 Dao ,这个就很自然了