论坛首页 Java企业应用论坛

一个ActiveRecord的简单实现(没有配置,没有注解,只有约定)

浏览 7983 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (17) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-06-20  
finallygo 写道
建议楼主考虑下一对多和多对多的情况,还有就是联合主键的情况,还有查询的时候如果是单表的最好把查询条件封装对象


表关联目前不想考虑。

联合主键现在我已经支持了。

查询的时候我不认为把查询条件封闭为对象是一件好事情,我和我的同事们还是更喜欢直接使用sql.
我觉得User.findByWhere("whereSql", new Object[]{params})很好。

还有,注意到我insert,update,delete都是直接使用的数据库的操作名字,没有像一些orm一定要取一些听起来感觉更对象化的名字,比如create,store,remove,destory等等等等,我就是要让会使用jdbc,sql的人,拿到了就能用,而且能得到一些基础的orm功能,而不喜欢花一段时间学习。
0 请登录后投票
   发表时间:2010-06-20   最后修改:2010-06-20
ironsabre 写道
finallygo 写道
建议楼主考虑下一对多和多对多的情况,还有就是联合主键的情况,还有查询的时候如果是单表的最好把查询条件封装对象


表关联目前不想考虑。

联合主键现在我已经支持了。

查询的时候我不认为把查询条件封闭为对象是一件好事情,我和我的同事们还是更喜欢直接使用sql.
我觉得User.findByWhere("whereSql", new Object[]{params})很好。

还有,注意到我insert,update,delete都是直接使用的数据库的操作名字,没有像一些orm一定要取一些听起来感觉更对象化的名字,比如create,store,remove,destory等等等等,我就是要让会使用jdbc,sql的人,拿到了就能用,而且能得到一些基础的orm功能,而不喜欢花一段时间学习。

你考虑到的查询条件都是针对一个查询条件的吧,如果查询条件有多个呢?
还有联合主键的时候,我对象中的主键要设置成对象,还是针对多个主键,在类中设置多个属性呢?
0 请登录后投票
   发表时间:2010-06-20  
finallygo 写道
ironsabre 写道
finallygo 写道
建议楼主考虑下一对多和多对多的情况,还有就是联合主键的情况,还有查询的时候如果是单表的最好把查询条件封装对象


表关联目前不想考虑。

联合主键现在我已经支持了。

查询的时候我不认为把查询条件封闭为对象是一件好事情,我和我的同事们还是更喜欢直接使用sql.
我觉得User.findByWhere("whereSql", new Object[]{params})很好。

还有,注意到我insert,update,delete都是直接使用的数据库的操作名字,没有像一些orm一定要取一些听起来感觉更对象化的名字,比如create,store,remove,destory等等等等,我就是要让会使用jdbc,sql的人,拿到了就能用,而且能得到一些基础的orm功能,而不喜欢花一段时间学习。

你考虑到的查询条件都是针对一个查询条件的吧,如果查询条件有多个呢?
还有联合主键的时候,我对象中的主键要设置成对象,还是针对多个主键,在类中设置多个属性呢?


多个查询条件sql怎么写我就怎么写啊。
User user = (User)User.findByWhere("user_name = ? and password = ?", new Object[]{"sean.zhou","test"});

关于联合主键我是这样处理的,我根据类找到表,然后从数据库中找到表上的主键定义。
不需要做任何设定,也不需要将主键设置成对象。

我们现在设表t_user的主键为联合主键,user_name + password;

实现如下:
1. 在查询时目前我还是让直接写sql,那么查找时还是使用上面的findByWhere来查找。

2. 在update, delete时自动使用表上的主键定义,发现表上定义的为user_name+password,那么我们把他们组合起来挂到条件里去。

user.update()和user.delete()的时候,我会自动生成如下语句。
这时的where后面的条件,是由数据表上的联合主键定义找到的。应该明白了吧。

update t_user t set t.xxx = xxx, ..... where t.user_name = "sean.zhou" and t.password = "test";
delete from t_user t where t.user_name = "sean.zhou" and t.password = "test";




0 请登录后投票
   发表时间:2010-06-20   最后修改:2010-06-20

我知道你的处理方式了,就是我说的第二种的情况,但是我们生成对象一般都是用hibernate的反向工程来做吧,这个时候它在处理联合主键的时候是会把主键封装成一个独立的对象的,还有就是查询条件我说有多个的情况,指的是查询条件有多个而且是不固定的情况,就是说可能有2个,也可能有三个的,这个时候你这样处理就比较麻烦了吧
0 请登录后投票
   发表时间:2010-06-21  
finallygo 写道

我知道你的处理方式了,就是我说的第二种的情况,但是我们生成对象一般都是用hibernate的反向工程来做吧,这个时候它在处理联合主键的时候是会把主键封装成一个独立的对象的,还有就是查询条件我说有多个的情况,指的是查询条件有多个而且是不固定的情况,就是说可能有2个,也可能有三个的,这个时候你这样处理就比较麻烦了吧


不固定条件的,要怎么样处理才不麻烦?
0 请登录后投票
   发表时间:2010-06-22  
ironsabre 写道
finallygo 写道

我知道你的处理方式了,就是我说的第二种的情况,但是我们生成对象一般都是用hibernate的反向工程来做吧,这个时候它在处理联合主键的时候是会把主键封装成一个独立的对象的,还有就是查询条件我说有多个的情况,指的是查询条件有多个而且是不固定的情况,就是说可能有2个,也可能有三个的,这个时候你这样处理就比较麻烦了吧


不固定条件的,要怎么样处理才不麻烦?

将查询条件封装成对象,再查考hibernate的criteria来实现
0 请登录后投票
   发表时间:2010-06-22  
finallygo 写道
ironsabre 写道
finallygo 写道

我知道你的处理方式了,就是我说的第二种的情况,但是我们生成对象一般都是用hibernate的反向工程来做吧,这个时候它在处理联合主键的时候是会把主键封装成一个独立的对象的,还有就是查询条件我说有多个的情况,指的是查询条件有多个而且是不固定的情况,就是说可能有2个,也可能有三个的,这个时候你这样处理就比较麻烦了吧


不固定条件的,要怎么样处理才不麻烦?

将查询条件封装成对象,再查考hibernate的criteria来实现


直接这样不也一样吗?
String whereSql = getWhereSql();
Object[] params = getObjectParams();
get方法里做好条件判断,组装好sql和params.
然后后面还是一样的,User.findByWhere(User.class,whereSql,params);
0 请登录后投票
   发表时间:2010-06-22   最后修改:2010-06-22
getWhereSql(),getObjectParams()这两个方法是怎么实现的,我想看一下
0 请登录后投票
   发表时间:2010-06-22   最后修改:2010-06-22
finallygo 写道
getWhereSql(),getObjectParams()这两个方法是怎么实现的,我想看一下


我没有说明白?

我的意思是,如果你的sql和参数都是不定的,那么你先准好这两个参数好了。
然后调用的时候直接把这两个参数传进去。
例:
String getWhereSql{
   if xxx
      return yyy;
   else
      return zzz;
}

然后User.findByWhere(User.class,getWhereSql(),getWhereObjectParams[]);
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics