您的位置:首页 > 编程语言 > Java开发

在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,根据hbm文件自动生成pojo和数据库脚本

2015-08-19 23:55 1251 查看
首先,我一定要吐槽下,这个Ant管理部署项目的工具,以及hibernate刚刚学习,导入我这一个简单的问题整了一天多,实在效率有点低下。在这两天中,①了解了Ant,知道了在Ant中很灵活的步骤项目的情况,知道了build.xml文件的一些基本写法。②还学习了在MyEclipse这样的集成工具中完成项目部署。③以及在这两种情况中,利用hibernateTools中的hbm2java和hbm2ddl工具,根据对象关系映射文件,自动生成POJO以及SQL文件(就是数据表)。

一,在web项目中,利用这两个工具生成POJO和SQL

1, 项目的结构:



2,项目需要导入的jar包:



①freemarker.jar一定要导入进来,不然会报异常

② hibernate-tools.jar,提供hbm2java和hbm2ddl工具,利用这两个工具,可以通过映射文件生成POJO和sql。

③log4j.jar

④mysql-connector-java.jar.利用别的数据库驱动也是可以的。

⑤slf4j相关的三个jar包最好全导入进来。相关的了解与学习,可以自己查官方文档。

⑥剩下的全部jar包,是hibernate中lib/required的全部jar。

3,hibernate初始化所用的配置

(配置文件方式,或者xml方式,两者都可以,但是通常选择xml更通用更方面)

在本demo中,这两个文件都用啦。具体看两个文件里面内容:



hibernate.properties(数据库相关信息)

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=root
hibernate.show_sql=true
javax.persistence.validation.mode=none
hibernate.cfg.xml()

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<!-- 提示生成SessionFactory实例所要加载的对象关系映射文件 -->
<mapping resource="java/User.hbm.xml"/><!-- 特别提示,这里是映射文件的完全限定名 -->
<mapping resource="java/Address.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4,对象关系映射文件hbm.xml



hibernateTools中的两个工具,正是参照这两个文件生成POJO和SQL

User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="java">
<!-- 特别注意这里,这里指示POJO对象所在的包,利用hbm2java生成POJO时,会在java文件头加一个package XXX; -->
<class name="User" table="user" dynamic-insert="true" dynamic-update="true">

<id name="userId" type="integer">
<generator class="identity"/>
</id>
<property name="account" type="string" length="64"/>
<property name="name" type="string" length="128"/>
<property name="nickName" type="string" length="128"/>
<property name="status" type="integer" length="1"/>
<property name="phones" type="string" length="128"/>
<property name="emails" type="string" length="128"/>

<set name="addresses" table="address" inverse="true" cascade="all"
sort="unsorted" order-by="zipcode asc">
<key column="userId"/>
<one-to-many class="Address"/>
</set>
</class>

</hibernate-mapping>


Address.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="java">
<class name="Address" table="address" dynamic-insert="false"
dynamic-update="false">
<id name="addressId" type="integer">
<generator class="identity"/>
</id>
<property name="country" type="string" length="128"/>
<property name="city" type="string" length="128"/>
<property name="zipcode" type="string" length="12"/>

<many-to-one name="user" class="User" column="userId" cascade="none"
outer-join="auto" update="true" insert="true" access="property"
not-null="true"/>
</class>

</hibernate-mapping>


5,build.xml文件

(这个文件是ant脚本,编写hbm2ddl和hbm2java任务,可以更灵活的的管理项目)


<?xml version="1.0" encoding="UTF-8"?>
<project name="hibernate" default="compile" basedir=".">
<echo>===========================================================</echo>
<echo>|                       Hibernate                         |</echo>
<echo>===========================================================</echo>
<property name="src" value="src">
</property>
<property name="src.java" value="src" /><!-- 注意这里源代码包位置指定的是根位置,原因下面 -->
<property name="src.conf" value="src/conf" />
<property name="lib.dir" value="WebRoot/WEB-INF/lib" />
<property name="classes.dir" value="WebRoot/WEB-INF/classes" />
<property name="schema.dir" value="db"/>

<!--类路径-->
<path id="classpath">
<pathelement location="${classes.dir}" />
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>

<!--准备目录-->
<target name="prepare">
<mkdir dir="${classes.dir}" />
</target>

<target name="prepare-shcema-dir">
<mkdir dir="${schema.dir}" />
</target>

<!--删除目录,用于重新编译-->
<target name="clean" description="删除所有编译后的文件">
<delete dir="${classes.dir}" />
</target>

<!-- 编译src.java中的源文件 -->
<target name="compile.java" depends="prepare" description="编译java源代码">
<javac srcdir="${src.java}" destdir="${classes.dir}" debug="on">
<classpath refid="classpath" />
</javac>
<copy todir="${classes.dir}">
<fileset dir="${src.conf}">
<include name="**/*" />
</fileset>
<fileset dir="${src.java}">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>

<!-- 编译所有的源文件(src.java) -->
<target name="compile" depends="compile.java" />

<!-- create .java form  *.hbm.xml -->
<target name="hbm2java" depends="compile" description="Generate Java source from the O/R mapping files">
<taskdef name="hbm2java" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="classpath" />
<hbm2java destdir="${src.java}">
<!-- 特别注意:destdir指生成的源代码放在${src.java}文件夹也就是src下,而为何不直接指定在src/java下呢?-->
<!--经测试,发现利用hbm2java通过对象关系映射文件生成POJO时,指定的package属性会在POJO中加上文件所在包,也就是package XXX;-->
<!--如果不指定这个package属性时,则不会加上package XXX;但是事一定要把POJO放于某个包下,所以这里的package一定要指定;  -->
<!--也因此,在这里src.java指定的值只能是src根文件夹,不然指定的话会重复了包,生成的POJO会在错误的类似AA/AA重复层名的包下  -->
<configuration configurationfile="${classes.dir}/hibernate.cfg.xml" />
<!--生成java类-->
<hbm2java />
</hbm2java>
</target>

<!-- create ddl form  *.hbm.xml -->
<target name="hbm2ddl" depends="prepare-shcema-dir" description="Generate DB schema from the O/R mapping files">
<taskdef name="hbm2ddl" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="classpath" />
<hbm2ddl destdir="${schema.dir}">
<configuration configurationfile="${classes.dir}/hibernate.cfg.xml" />
<!--export="true"创建数据库schema export="false"生成sql文件-->
<hbm2ddl export="true" console="true" create="true" update="false" drop="false" outputfilename="db.sql" />
</hbm2ddl>
</target>

</project>


6,运行的过程图



7,运行的结果图:



如上图,POJO和SQL都已经成功生成。

------------------------------------------------------------------------------------------------------------------------------------------

在此特别感谢别的前辈的分享,从他的分享以及我的摸索中,让我知道了如何在一个web项目中利用hibernateTools

的两个工具生成需要的东西。当然这只是入了门,提升还需要后续的学习与实践

------------------------------------------------------------------------------------------------------------------------------------------

二,在java项目中,利用这两个工具生成POJO和SQL

这个方面,前面一篇博文中已经转载。注意事项差不多,只是个别细节的配置需要注意。在此不重复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: