论坛首页 Java企业应用论坛

根据select sql中的字段名生成一个JavaBean,bean中包含所有字段的Get方法

浏览 16259 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (6)
作者 正文
   发表时间:2010-04-01   最后修改:2010-04-01
181054867 写道
用Hibernate的朋友帮忙看看

ibatis才行。

List<Map<String,String>>
0 请登录后投票
   发表时间:2010-04-01  
DbUtils中BeanHandler就可以实现
0 请登录后投票
   发表时间:2010-04-01  
CGLIB
0 请登录后投票
   发表时间:2010-04-01  
aaa5131421 写道
你这种编码的随意性就太大了,开发前就不需要完整的实体模型设计,开发者想用什么字段整合成一个对象都可以,让后期其他人怎么去维护呢?
这样的情况好hibernate做的比较好,开发前有个固定的模型设计,你查出来的都是固定结构化了对象,更何况你要是在一对多的情况下你怎么生成一个bean呢?难道还要查出多个不同的对象出来?本来通过hibernate的关系就可以用。导航出来的东西,你会多出好多的代码

您不能理解随意性,我认为,为数据库的每个表写一个JavaBean,在执行select sql后,还要写代码new这个Bean,然后在ResultSet中getString(XX),把值一个一个地赋给Bean,这样属于硬编码。
事实是,一些以显示为主的网站,对ResultSet结果集的操作只是单纯的显示出来,所以,我相信可能通过优化,避免我前面说的:写很多很多枯燥无用的代码,通过对ResultSet进行封装,产生一个Bean,然后在页面通过column name直接获得值,这样我们要写的代码会大大减少,缩短我们的开发时间,也让我们觉得,现在做的只是为了写代码更方便,当作一种享受,不要重复发明轮子而已。
至于你说的什么一对多,请不要把Hibernate的理念搬到这里回复,因为我并不使用Hibernate,也不存在什么一对多,这个Bean的产生,只是跟你写的sql有关系,你sql怎么写,你返回什么字段,这个Bean就生成相应字段的Get方法,sql你已经确定,至于什么一对多,多对多,是在你写sql前的事
我这样做是为了写更少的代码
0 请登录后投票
   发表时间:2010-04-01  
感谢大家的热烈评论,让这篇文章推首页啦,哈哈,感谢!
0 请登录后投票
   发表时间:2010-04-01  
有图为证,哈哈

  • 大小: 102.1 KB
0 请登录后投票
   发表时间:2010-04-02   最后修改:2010-04-02
有个土鳖的办法~
先自己写个classloader用来加载生成的java类
然后获得元数据 通过元数据生成一个java类文件
编译
反射new
反射set值

至于数据库里的数据类型怎样对应java的类型
自己查jdbc标准吧
0 请登录后投票
   发表时间:2010-04-02  
直接el输出resultset不可以吗?为什么还要封装一次呢?
<h1>UserName:${resultset[i][0]}<h1>
<h1>Password:${resultset[i][1]}<h1>

181054867 写道

例如我有一个这样的sql:

select username, password from users

 我想在select结束后,通过ResultSet中的字段名生成一个JavaBean,其代码大概如下:

public class Record{
   //生成这个方法,get后返回sql中结果集的username字段值
   public String getUsername(){}
   //生成这个方法,get后返回sql中结果集的password字段值
   public String getPassword(){}
}

关键在于:这个JaveBean是动态的,Get方法因应sql字段不同而不同

曾经记得在Hibernate中广泛使用这种生成字节码,动态化Class的应用,敢问各位高手,是否知道如何实现,请赐教!!

 

补充一下应用场景:

select 后,生成的这个Record,我是用在Jsp的 el 表达式中:

<h1>UserName:${record.Username}<h1>
<h1>Password:${record.Password}<h1>

 这样就避免每个数据库表都写一个JavaBean了,不知我这样的想法是否可行,如有什么性能问题或其他担心,敬请指正!

感谢!!

 

0 请登录后投票
   发表时间:2010-04-02  
181054867 写道
aaa5131421 写道
你这种编码的随意性就太大了,开发前就不需要完整的实体模型设计,开发者想用什么字段整合成一个对象都可以,让后期其他人怎么去维护呢?
这样的情况好hibernate做的比较好,开发前有个固定的模型设计,你查出来的都是固定结构化了对象,更何况你要是在一对多的情况下你怎么生成一个bean呢?难道还要查出多个不同的对象出来?本来通过hibernate的关系就可以用。导航出来的东西,你会多出好多的代码

您不能理解随意性,我认为,为数据库的每个表写一个JavaBean,在执行select sql后,还要写代码new这个Bean,然后在ResultSet中getString(XX),把值一个一个地赋给Bean,这样属于硬编码。
事实是,一些以显示为主的网站,对ResultSet结果集的操作只是单纯的显示出来,所以,我相信可能通过优化,避免我前面说的:写很多很多枯燥无用的代码,通过对ResultSet进行封装,产生一个Bean,然后在页面通过column name直接获得值,这样我们要写的代码会大大减少,缩短我们的开发时间,也让我们觉得,现在做的只是为了写代码更方便,当作一种享受,不要重复发明轮子而已。
至于你说的什么一对多,请不要把Hibernate的理念搬到这里回复,因为我并不使用Hibernate,也不存在什么一对多,这个Bean的产生,只是跟你写的sql有关系,你sql怎么写,你返回什么字段,这个Bean就生成相应字段的Get方法,sql你已经确定,至于什么一对多,多对多,是在你写sql前的事
我这样做是为了写更少的代码

可是最普遍的表结构都是一对多的关系,你不用hibernate只要使用数据库也肯定会碰到一对多关系。怎么可能会没有呢?
例子:界面需求就是简单的将一个一对多的数据展现出来,可是你的简单的键值对的bean无法满足这个要求,最简单的例子,班级表和学生表,界面上要展示出班级名称和对应学生s的名称,用你的方法,怎么用一条sql查询出来然后整合到一个bean中去呢?你是不是要拆开来用两个方法去查呢,分别得到班级名称和学生数据集合呢?
而hibernate直接可以简单写一个查出班级的代码,之后直接在界面导航出学生列表。
你觉得哪个省代码呢?想要省代码应该先从宏观上,上层上去考虑。
0 请登录后投票
   发表时间:2010-04-02  
181054867 写道
aaa5131421 写道
你这种编码的随意性就太大了,开发前就不需要完整的实体模型设计,开发者想用什么字段整合成一个对象都可以,让后期其他人怎么去维护呢?
这样的情况好hibernate做的比较好,开发前有个固定的模型设计,你查出来的都是固定结构化了对象,更何况你要是在一对多的情况下你怎么生成一个bean呢?难道还要查出多个不同的对象出来?本来通过hibernate的关系就可以用。导航出来的东西,你会多出好多的代码

您不能理解随意性,我认为,为数据库的每个表写一个JavaBean,在执行select sql后,还要写代码new这个Bean,然后在ResultSet中getString(XX),把值一个一个地赋给Bean,这样属于硬编码。
事实是,一些以显示为主的网站,对ResultSet结果集的操作只是单纯的显示出来,所以,我相信可能通过优化,避免我前面说的:写很多很多枯燥无用的代码,通过对ResultSet进行封装,产生一个Bean,然后在页面通过column name直接获得值,这样我们要写的代码会大大减少,缩短我们的开发时间,也让我们觉得,现在做的只是为了写代码更方便,当作一种享受,不要重复发明轮子而已。
至于你说的什么一对多,请不要把Hibernate的理念搬到这里回复,因为我并不使用Hibernate,也不存在什么一对多,这个Bean的产生,只是跟你写的sql有关系,你sql怎么写,你返回什么字段,这个Bean就生成相应字段的Get方法,sql你已经确定,至于什么一对多,多对多,是在你写sql前的事
我这样做是为了写更少的代码


可以使用JdbcTemplate来写啊,只要你的字段名和JavaBean符合一定的规则,不用从ResultSet中get数据。

如果动态生成JavaBean,还不如直接生成Map呢,
使用实现定义好的JavaBean,最大的好处就是你知道里面有什么属性,而且知道确切的类型。

0 请登录后投票
论坛首页 Java企业应用版

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