浏览 5351 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-04
最后修改:2010-03-26
这种结构作为家庭作业可以,作为工具可以,作为项目/产品不行。原因有2: 1.项目框架的组织要求扬长避短。Swing的优势在于定制界面的灵活性和作为JAVA基类(鸡肋)的简单性, 辅以socket和多线程也有好的作为。而hibernate用来实现数据持久,是解决重量级容器的一种缓冲方法,达到程序的相对轻重平衡。这点没做到。 2.数据持久化从另一个方面可以理解为长期的大量内存占有。尤其峰值数据不通过专门的应用服务器去管理,很难保证程序健壮。而java的JVM只能管理1-2G的内存(根据版本不同 ),而且内存越大反应越慢。这点又PASS了。 这里是为什么故事的一个分支。今天的答案是struts + hibernate/ibats + spring就是一盘炒菜,各个食材的味道参杂在一起,模糊了彼此自己的特色。今天重点只在hibernate环境上,他的事务处理介绍会另作一份菜。 闲话少说,开始搭环境。 需要的环境: IDE:eclipse; db:mysql; lib包:hibernate和mysql相关的lib包; 第三方工具:ultraEdit,mysql-front; mysql-front资源在附件中。 目标: 通过swing按钮进行hibernate连接数据库测试。测试成功状态更新为连接成功; 否则状态更新为连接失败。 hibernate机制: 1.config加载db连接属性和需要持久化类的配置XML及持久化类本身(Menu); 2.根据config生成sessionFactory的线程,数据库表和java的持久化类之间的一一对应关系被sessionFactory持有; 3.sessionFactory生成一个新的session线程; 4.session线程读取sessionFactory加载的db连接属性通过db表和持久化类的映射进行数据库操作,并持有该结果;这里起事务,提交或回滚。 5.关闭session和sessionFactory,返回结果。 操作步骤如下: 1.生成java工程、相应的目录结构和swing界面; 目录结构如上图。目录结构说明如下: 1.1/dbvisit/src/com/toolstorage/example/dto/xml目录:存放JAVABEAN(DTO)和DB相关联的XML文件。 1.2/dbvisit/src/com/toolstorage/example/dto目录:存放JAVABEAN(DTO) 1.3/dbvisit/src/com/toolstorage/example/frame目录:存放界面和事件处理 1.4/dbvisit/src/com/toolstorage/example/opt目录:存放操作数据库的类。 1.5和SRC同级的CONFIG目录存放hibernate加载配置文件(动态变更数据库的关键) 2.引入hibernate和mysql需要的lib包。 3.构建JAVABEAN(DTO)和DB及两者的配置关系。 说明:其实就是写javabean、建数据库表、构建hibernate的关联配置XML。 3.1(图一)建立一个Menu类用来存放菜谱(getxxx,setxxx); 3.2(图三)建立数据库和menu表; 3.2(图一)建立Menu.hbm.xml,映射Menu类和menu表字段的映射关系。 4.构建hibernate.hbm.xml文件和hibernate.properties文件。 4.1文件hibernate.hbm.xml放在src目录下,session-factory中只存放 <mapping resource="com/toolstorage/example/dto/xml/Menu.hbm.xml"/> 4.2文件hibernate.properties放在config目录下,里面存放数据库连接配置相关的信息。 程序运行: 1. 运行Dbvisit里面的main方法生成如下界面: 2. 点击db test按钮,输入参数正确的话查到结果(图六);错误的话提示为成功并报出异常(图七)。如果要连接不同的数据库,就可以在这里修改参数。 小插曲1:DB或JAVA命名的时候需要注意关键字的规避。起先在DB中定义了explain作为菜单的解释说明字段,但在测试中怎么去连接怎么报错。按报错信息一步一步排查的时候发现是字段名用成关键字了,之后把explain改为explain2就好了。 小插曲2:javabean、数据库表、hibernate的关联配置XML三者任何一个先完成,剩余两个都可以用工具生成。但我这例子一来简单二来练练手,所以这些文件都是自己敲代码敲出来的。这种学习的方法推荐给大家,加深理解和增加经验都不错的。 小插曲3:开始的时候使用new Configuration().configure(String resource),希望可以加载 Hibernate.properties文件。但后来发现这个resource必须是hibernate特定的XML格式的文件。于是只好用new Configuration().setProperties(properties).configure()进行加载。 小插曲4:如果在hibernate.cfg.xml中配置了<mapping resource=”xxx”/>,那么Configuration对象在进行config.addClass(xxx)操作后,会报hibernate.cfg.xml中mapping的xxx找不到异常。(原因很简单看图一,Menu.hbm.xml和Menu.java不在同一个路径,如果用config.addClass(xxx)操作,hibernate的config会在和Menu.java相同目录下去找Menu.hbm.xml文件。找不到就报错。) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-05
有源码吗?
|
|
返回顶楼 | |
发表时间:2010-01-05
wuliupo 写道 有源码吗?
开始阶段暂不提供家庭作业可抄袭功能。。。 |
|
返回顶楼 | |
发表时间:2010-01-06
wooffen 写道 wuliupo 写道 有源码吗?
开始阶段暂不提供家庭作业可抄袭功能。。。 呵呵呵 |
|
返回顶楼 | |
发表时间:2010-01-06
wooffen 写道 wuliupo 写道 有源码吗?
开始阶段暂不提供家庭作业可抄袭功能。。。 哈哈 |
|
返回顶楼 | |
发表时间:2010-01-06
prowl 写道 wooffen 写道 wuliupo 写道 有源码吗?
开始阶段暂不提供家庭作业可抄袭功能。。。 哈哈 看来真的没法完成家庭作业了 |
|
返回顶楼 | |