之前用hiberate,写配置,写代码,建数据库都是手工。

也知道有辅助工具来自动完成上面的工作。

这次用Hibernate tools来实现hbm2ddl和hbm2java.

首先准备下。

确认你有以下环境。

jdk1.5以上

ant环境

hibernate。我下的是3.3版

hibernate tools包,到hibernate官网下最新的吧。

mysql jdbc包,我用的是mysql5.0 到http://www.mysql.com下

我用eclipse,在eclipse建一java工程sample

结构如下:

sample

--src

--java

--conf

--webapps

--WEB-INF

--lib

把下载的hibernate zip包解压。比如解压到hibernate3.3目录。把hibernate.jar copy到的lib目录下,还有hibernate3.3/lib/required下的所有jar都copy到工程lib目录下。

hibernate tools解压,把hibernate-tools.jarcopy到工程lib目录下。

mysql jdbc的jar包copy到工程lib目录下。

新建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="develop.business.model"> <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="develop.business.model"> <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>

src/conf目录下的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> <mapping resource="develop/business/model/User.hbm.xml"/> <mapping resource="develop/business/model/Address.hbm.xml"/> </session-factory> </hibernate-configuration>

src/conf目录下的hibernate.properties

hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect hibernate.connection.driver_class com.mysql.jdbc.Driver hibernate.connection.url jdbc:mysql://localhost/sample?useUnicode=true&characterEncoding=UTF-8 hibernate.connection.username root hibernate.connection.password root

至此,准备工作已完成。接下来要写ant脚本来实现hbm2ddl和hbm2java

工程下建一build.xml文件,内容如下:

<?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/java" /> <property name="src.conf" value="src/conf" /> <property name="lib.dir" value="webapps/WEB-INF/lib" /> <property name="classes.dir" value="webapps/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}"> <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>

接下来就是运行脚本了,在eclipse下用ant试图分别运行hbm2ddl和heb2java。

这时候会报java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder的错。下载的hibernate.zip里只有slf4j-api-1.5.8.jar,没有这个类。

到www.slf4j.org/  去下载一个zip包,解压后把slf4j-nop-1.5.10.jar copy到lib目录

说一下slf4j

SLF4J(Simple Logging Facade for Java)作为commons-logging的替代,为各种logging APIs提供了一个简单的统一接口,使得最终用户能够在部署的时候配置所希望的logging APIs的实现。

SLF4J会根据classpath中所存在的适配器的jar来决定将使用的日志实现库。

没用它也没去看。有兴趣的朋友自己看一下吧。了解了记得告诉我一下。呵呵。

再次运行会报java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader的错。

没有freemaker.jar,去下载一个 copy到lib目录

再次运行,成功了,hbm2java生成了User.java和Address.java

hbm2ddl会在控制台生成这样的sql语句。

[hbm2ddl] create table address (addressId integer not null auto_increment, country varchar(128), city varchar(128), zipcode varchar(12), userId integer not null, primary key (addressId)) type=MyISAM;
  [hbm2ddl] create table user (userId integer not null auto_increment, account varchar(64), name varchar(128), nickName varchar(128), status integer, phones varchar(128), emails varchar(128), primary key (userId)) type=MyISAM;
  [hbm2ddl] alter table address add index FKBB979BF4EBA71B93 (userId), add constraint FKBB979BF4EBA71B93 foreign key (userId) references user (userId);

用上面的方法减少我们的一些代码量。。。

Hibernate tools的hbm2ddl和hbm2java相关推荐

  1. hibernate3 hbm2java_hibernate3下hbm2ddl和hbm2java的配置

    最近一段时间在学习hibernate3,最初在生成持久化和数据库语句(ddl)的时候都是采用手工生成的,这些工作很繁琐,而且很容易出错.后来在网上查找了一些资料,利用hibernate-tools.j ...

  2. hibernate tools for eclipse plugins在线怎么安装

     1.启动eclipse 2.选择Help > Install New Software...> 3.添加如下地址: http://download.jboss.org/jbossto ...

  3. Hibernate Tools for Eclipse的使用

    Hibernate Tools的官方网站: http://hibernate.org/tools/ Step1. 安装好Hibernate Tools,建立一个Dynamic web project, ...

  4. Eclipse 用Hibernate Tools 生成 .hbm cfg.xml等文件

    建立好数据库后,点击一个键,代码就生成了,这实在是份十分惬意的事情,前面有介绍Hibernate Tools就可以生成代码,那么我们怎么利用它来生成代码呢. 下面就把详细步骤贴出来,同样,有图有真相. ...

  5. eclipse怎样在线安装hibernate tools插件并使用

    不知不觉,小Alan已经将近3个月没有上班了,最近在复习一些知识,随时准备回到代码世界的战场,今天复习到了Hibernate,记录一下一点点小知识,那就是eclipse下hibernate Tools ...

  6. Hibernate Tools 学习总结

    Hibernate Tools for Eclipse的使用 http://blog.csdn.net/gaojinshan/article/details/39502509 Hibernate To ...

  7. 用Hibernate Tools生成Hibernate Mapping映射文件

    用Hibernate Tools生成Hibernate Mapping映射文件 Eclipse中要集成安装Hibernate Tools组件 如果没有,请查看:Eclipse juno 中安装 JBo ...

  8. (转)Eclipse在线配置Hibernate Tools

    http://blog.csdn.net/yerenyuan_pku/article/details/52733403 查看Eclipse版本 Eclipse针对程序开发有很多发行版本,除了开发语言的 ...

  9. eclipse下使用hibernate tools实现hibernate逆向工程

    一  安装hibernate tools插件 1 在线安装 通过Eclipse的Help->Install New Software 在线安装插件,插件连接为: eclipse helios(3 ...

最新文章

  1. linux服务器root的密码修改
  2. 使用SD-WAN策略与传统路由器的OFFICE 365配置
  3. linux知识(二)互斥量、信号量和生产者消费者模型
  4. 【OpenJ_Bailian - 4117】简单的整数划分问题(dp)
  5. 从治疗癌症到预测犯罪,细数数据科学在各领域的神奇应用
  6. oracle itl解析,oracle数据块dump文件中ITL详解
  7. Node.js「四」—— 路由 / EJS 模板引擎 / GET 和 POST
  8. Linux基本命令(三)-----Linux常用命令(按功能分类)
  9. 昆仑通态复制的程序可以用吗_昆仑通态触摸屏如何做时间记录
  10. as3中强制垃圾回收
  11. ieda使用 在jsp页面中,有时候会出现不能智能显示方法 idea pageContext.setAttribute...
  12. 谷歌断网小游戏代码粗略解析
  13. 与孩子一起学编程04章
  14. android mpandroidchart渐变曲线,MPAndroidChart 线条颜色渐变
  15. postman:Tests模块之断言
  16. 红葡萄酒质量影响因素分析
  17. Caused by: io.netty.resolver.dns.DnsNameResolverTimeoutException: [/192.168.1.1:53] query via UDP ti
  18. 思科ISR4400交换机查看光模块光功率
  19. 几个javascript框架对比(vue,react,Angular等),如何选择?
  20. 微信朋友圈分享链接的【图片】设置

热门文章

  1. 知己知己,JAVA不待!
  2. Pycharm 如何将背景设置成自己喜欢的图片详文
  3. Photoshop(PS)制作牛年红包
  4. android 黑白屏问题
  5. 最新 2022中国大学排名发布~
  6. 非主流闪图头像教程:扩散粒子效果
  7. 使用canvas画三角形,圆形,半圆,八卦
  8. 信息安全工程师学习笔记《第四章》
  9. php简写是哪个国家的货币,世界197个国家的180种货币列表、数字符号、名称及对应国家简称...
  10. qq邮箱如何在win10邮箱连接到服务器,win10自带邮箱如何使用?win10自带邮箱如何同步qq邮箱邮件?...