社区
Java SE
帖子详情
动态生成类并加载到内存
yunzhongyu
2011-02-21 10:35:56
动态生成类 让后根据类的内容生成数据库(hibernate)。
怎样做
...全文
263
19
打赏
收藏
动态生成类并加载到内存
动态生成类 让后根据类的内容生成数据库(hibernate)。 怎样做
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hp0632
2011-06-07
打赏
举报
回复
#16楼 得分:0回复于:2011-02-22 19:06:13已生成hibernate(class)实体bean了。现在怎样不在重启tomact情况下,把class加载到jvm并生成相应的表(目前只有重启tomact才回重新生成表)。
我也是遇到了同样的问题,如果有答案,发我,谢谢 hp0632
pauliuyou
2011-02-28
打赏
举报
回复
动态编译吧 导入tools.jar, 然后再Class.forName().
yunzhongyu
2011-02-22
打赏
举报
回复
[Quote=引用 15 楼 humanity 的回复:]
引用楼主 yunzhongyu 的回复:
动态生成类 让后根据类的内容生成数据库(hibernate)。
怎样做
以前 Codehaus.org 上有一个开源项目,名字忘记了,被 Drools 2.1 - 2.5 使用了它其中一个包,这个包里面就有一个类能给一个 String 它去编译到当前你指定的类加载器中,不产生临时磁盘文件,我们直接用这个类加载器.loadClass 就能得到……
[/Quote]
我下载后里面没有你说的jar包啊
yunzhongyu
2011-02-22
打赏
举报
回复
已生成hibernate(class)实体bean了。现在怎样不在重启tomact情况下,把class加载到jvm并生成相应的表(目前只有重启tomact才回重新生成表)。
消息都是
2011-02-21
打赏
举报
回复
想怎么做就
树成
2011-02-21
打赏
举报
回复
是这样,例如,我是说例如,表结构肯定不是这样。
你建立三个表,一个表(sys_table)里面存放表,一个表(sys_columns)里面存放列,另一个表(sys_rows)里面存放数据。
当你在业务上,也就是页面上操作生成一张表的时候,你就往那个sys_table表里面插入一条数据,建立列的时候你往(sys_columns)里面存放数据,如果是今后有这些业务数据增删改,你可以对sys_rows进行维护。
这样,你实际的数据库表结构就稳定了下来,不用执行表生成语句,那么hibernate的modle也稳定了下来,那么在业务上的建表与建列其实都是insert或者update。数据库中不存在物理表。
yunzhongyu
2011-02-21
打赏
举报
回复
[Quote=引用 9 楼 spiniper 的回复:]
那就设计一个表结构,虚拟一套表,列,行 的关系,实现业务上存在建表,数据库中物理上,表,列,数据 都是数据。
[/Quote]
不是太明白,这不还得生成类 让后加载这个类?
树成
2011-02-21
打赏
举报
回复
那就设计一个表结构,虚拟一套表,列,行 的关系,实现业务上存在建表,数据库中物理上,表,列,数据 都是数据。
yunzhongyu
2011-02-21
打赏
举报
回复
因为工程都是hibernate+Spring,如果只用sql建表,没有hibernate实体bean,没办法查询、添加等。
树成
2011-02-21
打赏
举报
回复
但是过于频繁的建表语句其实是不好的。
你可以设计一个表结构,虚拟出表、行、列的关系映射,然后对其进行维护,从业务上看是生成了这些表,但是从数据库上,并不存在这些物理表。
树成
2011-02-21
打赏
举报
回复
你这没有必要生成类吧,用单纯的sql语句就能完成。
yunzhongyu
2011-02-21
打赏
举报
回复
数据库方面先暂不考虑,常用的几种就行,
我的业务是这样的,请教各位还有别的思路没?
前端拖拽生成业务数据表单,根据表单能容生成相应的业务数据表。
有啥好的思路和办法?
树成
2011-02-21
打赏
举报
回复
有个变通的做法,你可以自己实现一个类装载器来装载你生成的类。你可以读入或者在程序里面生产java源文件,用System.exec方法调用javac命令进行编译成class,然后用类装载器装载此class。不过实现一样很麻烦
想喝咖啡的貓
2011-02-21
打赏
举报
回复
这个 还是很有难度的,先不说别的,数值型在不同的数据库中定义都不完全相同,市场上大小小的几十种数据库得多少个实现啊,hibernate也没全实现。
yunzhongyu
2011-02-21
打赏
举报
回复
有啥好的办法吗?
树成
2011-02-21
打赏
举报
回复
研究一下class文件的结构就好。
hibernate也不是自己实现这个功能的,它使用的好像是CGLIB
虽然我不想打击你,但是你不太可能实现这个功能的。
humanity
2011-02-21
打赏
举报
回复
[Quote=引用楼主 yunzhongyu 的回复:]
动态生成类 让后根据类的内容生成数据库(hibernate)。
怎样做
[/Quote]
以前 Codehaus.org 上有一个开源项目,名字忘记了,被 Drools 2.1 - 2.5 使用了它其中一个包,这个包里面就有一个类能给一个 String 它去编译到当前你指定的类加载器中,不产生临时磁盘文件,我们直接用这个类加载器.loadClass 就能得到编译生成的结果,这个参数字符串就是 java 源文件内容。
不过我忘记了这个开源 API 的名字。或许打开 drools 2.x 的下载后的第三方 jar 列表能找到其中一个 j..no.jar 的文件。
焙焙龙
2011-02-21
打赏
举报
回复
动态生成类加载到内存是可行的,不过代价么,呵呵
1,让程序在运行过程中拼凑源码字符串(可以使用文件模版),然后调用Tools.jar包里有个编译的工具类,javac也会调用这个类的,所以,没必要再绕个弯子调用javac.exe程序,不利于移植。编译完成后在进行加载
2,还有一种就是直接在内存中构造.class类型信息,这个比较高深,你可以尝试使用CGLIB,当然,它也依赖于ASM,也就是JAVA的汇编。
性能上自然是有一定的消耗的。
JAVA
类
:我是如何被ClassLoader
加载
到
内存
的
工作这么久,还不知道一个JAVA
类
如何被
加载
到
内存
并运行起来的有点羞愧。不懂但是会搜索啊,这篇文章就这样诞生了。本文主要总结了JAVA的
类
加载
模型(classLoader),一个
类
的
加载
过程。 ClassLoaderr定义 ...
JVM
动态
类
加载
深度剖析:Java程序员的高效编程秘诀
JVM(Java虚拟机)中的
动态
类
加载
是一种在运行时
加载
类
的机制,它允许应用程序在不重新启动的情况下
加载
新的
类
。它对Java应用程序的灵活性和扩展性至关重要。
JVM
类
的
加载
机制
类
的
加载
指的是将
类
的.class文件中的二进制数据读入到
内存
中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装
类
在方法区内的数据结构。
类
的
加载
的最终产品是位于堆区中的Class...
什么是
类
加载
器,
类
加载
器如何分
类
③ 在
内存
中
生成
一个代表这个
类
的java.lang.Class对象,任何
类
被使用时,系统都会为创建一个java.lang.Class对象,即
加载
完毕创建一个class对象。链接阶段的第一步,这一阶段为了确保Class文件字节流中包含的信息...
十一、
类
加载
器的作用
将class文件字节码内容
加载
到
内存
中,并将这些静态数据转换成方法区的运行时数据结构,然后
生成
一个代表这个
类
的java.lang.Class对象,作为方法区中
类
数据的访问入口。 2、
类
缓存 标准的JavaSE
类
加载
器可以按要求...
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章