Hibernate开发实例
目前广泛使用的数据库系统都是关系型数据库系统,而我们平时开发的应用程序都是采用面向对象的思想进行开发。程序每次对数据库操作都要将对象数据转换成繁琐的SQL语句后才能进行数据库访问、操作。这导致程序大量代码重复,程序开发效率降低。另外SQL作为一门独立的语言拥有自己的精髓,并非所有程序员都可以像操作自己熟悉的开发语言一样操作数据库。一般的项目都需要有专门的数据库开发人员对数据进行管理。针对这些问题,目前市场上已经出现了一些数据库管理软件,但他们都各有优劣,还没有完善的解决方案。
(1)普通的关系数据库管理软件,如Navicate等:
优点:这类软件可以对关系数据库数据进行各种操作,能够方便修改数据表结构和数据。
缺点:这类软件只适合专门的关系数据库设计人员,而且设计的数据表在面向对象的程序中使用不方便,程序中会有大量的重复代码用在对数据库表的操作,软件更不支持面向对象建模。
(2)面向对象的数据库管理软件,如Hibernate Synchronizer插件等:
优点:可以从数据库中生成面向对象的类,然后在程序中直接操作数据表;
缺点:只能将设计好的数据库转化为面向对象的类,然后操作数据表,无法直接对数据表结构修改,不支持面向对象建模。
(3)支持面向对象建模的数据库管理软件,如PowerDesiner等
优点:支持面向对象建模、支持代码生成。
缺点:非开源产品,价格昂贵,软件庞大,功能主要体现在建模上对数据管理支持不好,不方便程序设计过程中对数据的调试。
综合以上介绍可见虽然目前国内外已有相当多的数据库管理软件但是没有一款适合我们平台需要的。所以我们融合当今国内外各种数据库管理软件的优点,弥补它们的不足设计了我们自己的数据库管理插件。我们的插件支持面向对象的数据库建模,并且可以适时对模型进行修改。插件支持代码自动生成,设计好模型后可以自动生成Java类、对象关系映射文件和Hibernate配置文件等以便其他程序可以通过Hibernate插件直接访问数据库。另外插件还支持数据库数据管理。选中设计的对象可以直接查看该对象映射到数据库中的数据表中的数据,并且支持对数据的各种操作。本插件作为ERP系统构建平台的数据层管理插件,从ERP系统设计人员的角度出发,充分地简化了系统的构建过程。开发人员不需要任何关系数据库知识,可以直接面向对象建模。开发人员甚至不需要会一句SQL语句就可以直接对数据表结构和数据进行各种可视化的管理,一切对关系数据库的操作都由系统后台完成。另外,完成建模后可以自动生成代码和相关文件给其他程序开发使用。其他工程只需导入数据库建模部分生成的Java类、映射文件和Hibernate配置文件等就可以直接用Hibernate访问数据库。本插件让整个项目的数据库设计的难度大大减小,效率大大提高。
下面开始介绍一个简单的实例
【这篇文章承接(【ERP系统设计】【数据模块】3 使用Eclipse插件DB viewer进行MySQL数据库操作)这篇文章 .
约定
Hibernate Synchronize:简写为HS
要点
步骤:
一 准备工作
v 下载Hibernate框架【本实例使用的是3.2.6版本】,然后解压到某个文件夹下
v Eclipse下Hibernate开发环境的配置
为了以后方便在eclipse中正常使用Hibernate,我把Hibernate包中的jar包添加到Eclipse中的java的构建路径中去
启动eclipse,选择"窗口"→"首选项",然后在弹出窗口中选择"java"→"构建路径"→"用户库"选项,点击"新建"按钮。
以后需要用Hibernate时,就可以直接使用新建的用户库。
v 安装Hibernate Synchronizer插件
二 在Eclipse中使用Hibernate Synchronize进行开发
v 新建一个数据表 test
v 新建一个java项目
新建一个java项目然后输入工程名,点击下一步【不要直接点击完成】
然后通过右边的按钮添加工程所需要的包,添加完毕后然后再点击完成
v 创建Hibernate Configuration File文件
点击项目下的src文件夹,然后新建,如下图
点击你所需要创建的文件然后点击下一步,在弹出的对话框中选择数据库的类型mysql,然后设置其他属性,其中Driver Class选择为com.mysql.jdbc.Driver,Database URL设置为jdbc:mysql://localhost:3306/数据库名,我自己的数据库名为stu,其他的不再做解释,因为很是简单明了。
<hibernate-configuration> <session-factory> <!-- local connection properties --> <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/stu </property> <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <!-- property name="hibernate.connection.pool_size"></property --> <!-- dialect for MySQL --> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="hibernate.show_sql">false</property> <property name="hibernate.transaction.factory_class"> org.hibernate.transaction.JDBCTransactionFactory </property> <mapping resource="nba/Test.hbm.xml" /> </session-factory> </hibernate-configuration>
v 创建mapping文件
为数据库创建相应的映射文件,映射文件不能放在默认包中,所以首先建立一个新的包。然后点击新创建的包,新建Hibernate mapping文件
输入相对应的密码,然后点击Refresh,数据库中的表就会列在table右边的列表框,选择你要操作的数据表,再选择该文件所在的Package
生成代码如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="nba"> <class name="Test" table="test" > <meta attribute="sync-DAO">false</meta> <id name="Id" type="integer" column="id" > <generator class="vm"/> </id> <property name="Title" column="title" type="string" not-null="true" length="100" /> <property name="Content" column="content" type="string" not-null="true" /> </class> </hibernate-mapping>
三 使用HS进行同步
使用HS进行同步,这样可以自动生成Hibernate持久类。
选中Test.hbm.xml文件,点击鼠标右键,在弹出的菜单中选择Hibernate Synchronize→Synchronize Files命令,同步结束后,该项目的目录结构如下
【目录中的TestHibernate.java文件是之后测试文件,不是自动生成的】
在同步产生了Test.java和BaseTest.java文件
接下来还有重要的一步,就是建立映射关系,选中Test.hbm.xml,点击右键,在弹出的菜单中选择Hibernate Synchronize→Add Mapping Reference命令即可
四 创建实例并运行
代码如下:
package nba; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.classic.*; public class TestHibernate { public static void main(String[] args){ try{ SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session session=sf.openSession(); Transaction tx=session.beginTransaction(); for(int i=0;i<10;i++){ Test TestData=new Test(); TestData.setContent("this is a test"); TestData.setTitle("kycool"); session.save(TestData); } tx.commit(); session.close(); } catch(HibernateException e){ e.printStackTrace(); } } }
运行结果:
控制台中的错误提示我,配置文件不正确,后来发现是头部信息丢失了
然后加入以下代码
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
再次运行
这个提示和id有关,在源代码中可以发现,generator对应的class是vm,mysql不支持这种操作,改为naive,然后保存再次运行
运行成功,但不是很完美,因为有两个warn
查看数据库