在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,依据hbm文件自己主动生成pojo和数据库脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,依据hbm文件自己主动生成pojo和数据库脚本相关的知识,希望对你有一定的参考价值。
首先。我一定要吐槽下,这个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=nonehibernate.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>
<?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
这个方面。前面一篇博文中已经转载。
注意事项几乎相同,仅仅是个别细节的配置须要注意。在此不反复。
以上是关于在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,依据hbm文件自己主动生成pojo和数据库脚本的主要内容,如果未能解决你的问题,请参考以下文章