Myeclipse10搭建SSH框架自动建立数据表3

本文介绍如何使用XDoclet与Hibernate框架自动创建数据表,包括配置实体类、生成映射文件、构建SQL脚本及通过Java代码直接创建表的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3 Ant-XDoclet数据表自动产生

3.1 创建XDoclet标记的数据表实体类

在包dbApp下新建实体类Recorder.java,不选择“生成注释”。进而构造持久化项:idnamearticlesbooks。然后点击工具栏上的源代码(S)”,选择其中的生成GetterSetter”,不选择生成方法注释

以注释的方式添加XDoclet标签,说明即将形成的数据表名称、主键及其各个列的名称、类型、宽度、可否空置等属性:

package dbApp;

/**

 *@authorkaizq

 *@hibernate.class table="Recorder"

 */

publicclassRecorder

{       publicintid;

        public Stringname;

        publicintarticles;

        publicintbooks;

   /**

    *@hibernate.id                        generator-class="native"

    *@hibernate.column             name="ID" type="int"not-null="true"

    */ 

        publicintgetId() {returnid; }

        publicvoidsetId(int id) {this.id = id; }

        /**

    *@hibernate.propertycolumn="Name"type="string" length="20" not-null="true"

    */

        public String getName() {returnname; }

        publicvoidsetName(String name) {this.name = name; }

   /**

    *@hibernate.propertycolumn="Artcles"type="int" not-null="true"

    */ 

        publicintgetArticles() {returnarticles; }

        publicvoidsetArticles(int articles) {this.articles =articles; }

   /**

    *@hibernate.propertycolumn="Books"type="int" not-null="true"

    */ 

        publicintgetBooks() {returnbooks; }

        publicvoidsetBooks(int books) {this.books = books; }

}

3.2 Hibernate-XDoclet自动产生映射文件

在项目“SSH_SQLServerA”上右击,引出下拉菜单,选择属性,弹出项目属性窗口,选择“MyeclipseàXDoclet”,切换到XDoclet窗口页面,在“Configuration”中点击“AddStandard …”弹出实体选择窗口,选择“Standard Hibernate”,为发生器定义配置:

对于XDoclet窗口的“Build”页面采用默认选项“JDK5.0”和“Use dynamic build specification”:

在项目“SSH_SQLServerA”上右击,引出下拉菜单,选择“MyeclipseàRun XDoclet”,集成开发环境自动为实体类产生 “.hbm.xml” 映射文件:Recorder.hbm.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEhibernate-mapping PUBLIC"-//Hibernate/HibernateMapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

   <class name="dbApp.Recorder"table="Recorder">

       <id name="id"column="id"type="int">

           <generatorclass="native" />

       </id>

       <property name="id"type="int"column="ID"not-null="true"/>

       <property name="name"type="string"column="Name"length="20"not-null="true"/>

       <property name="articles"type="int"column="Artcles"not-null="true"/>

       <property name="books"type="int"column="Books"not-null="true"/>

   </class>

</hibernate-mapping>

3.3 hbm2ddl自动产生SQL文件与数据表

采用集成开发环境自带的Hibernate工具hbm2ddl及其SchemaExport,编写build.xml文件:

<?xmlversion="1.0" encoding="UTF-8"?>

<!DOCTYPEproject [ ]>

<projectname="project"default="generator-schema"> 

        <propertyname="xdoclet.basedir"value="/D:/hxht/MyEclipse/MyEclipse10/configuration/org.eclipse.osgi/bundles/142/1/.cp/"/>

        <propertyname="src.dir"value="../src"/>

        <propertyname="class.dir"value="../bin"/>

        <propertyname="lib.dir"value="../WebRoot/WEB-INF/lib"/>

   <pathid="build.lib">

       <filesetdir="${lib.dir}">

           <includename="*.jar"/>

       </fileset>

                  <filesetdir="${xdoclet.basedir}">

                           <includename="*.jar"/>

                           <excludename="*xjavadoc*.jar"/>

                           <includename="jdk5/*.jar"/>

                  </fileset>

                  <pathelementlocation="${class.dir}"/>

   </path>

   <targetname="generator-schema"description="生成schema文件">

           <taskdefname="schemaexport"classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"classpathref="build.lib">

                           </taskdef>

           <echomessage="生成schema文件..."></echo>

                       <propertyname="hibernate.dialect"value="org.hibernate.dialect.SQLServerDialect"/>

                        <propertyname="hibernate.format_sql"value="true"/>

                       <propertyname="hibernate.show_sql"value="true"/>

                       <propertyname="hibernate.use_sql_comments"value="true"/>

           <schemaexportquiet="no"text="true"drop="no"delimiter=";"output="../src/Recorder.sql">

               <filesetdir="../src">

                   <includename="**/*.hbm.xml"/>

               </fileset>

           </schemaexport>

     </target>

</project>

其中,<!DOCTYPE project [ ]>是编写的简单DTD约束,现代XML文件需要遵守“DTDXML Schema”约束,没有这一句,编译时会产生警告。xdoclet.basedir要根据Myeclipse的实际安装位置确定。

运行build.xml任务,可以右击“build.xml” ->“运行,有“Ant构建“Ant构建...”两个菜单,“Ant构建直接运行缺省任务,如果要运行其它任务,可用“Ant构建...”菜单选择。还有一种更好的方法:点击窗口->显示视图->Ant”,调出了Ant视图窗口,在该视图窗口的空白处,右击,在弹出菜单中选择添加构建文件,选择“SSH_SQLServerA/src/build.xml”文件载入即可。这样,想运行某个任务,直接双击Ant视图中的任务即可。执行build.xml的任务“generator-scema”,产生“Recorder.sql”文件,效果图如下:

打开“Recorder.sql”文件,选择连接到数据库“MS_SQLServer”,运行,即可在专用数据库“study”中产生数据表“Recorder”。得到的“Recorder.sql”文件如下:

   droptable Recorder;

   createtable Recorder (

       id intidentitynotnull,

       Namevarchar(20)notnull,

       Artcles intnotnull,

       Books intnotnull,

       primarykey (id)

   );

4 数据表访问操作测试

编写java代码运行数据表的操作访问,以测试和检验建立的数据表。要用到hibernate.cfg.xml配置文件和“会话工厂”,前面已经建立“会话工厂”,因此需求特别建立hibernate.cfg.xml配置文件。如果前面没有建立HibernateSessionFactory.java文件,也需要特别建立。

4.1 建立Hibernate.cfg.xml配置文件

新建à其它àMyeclipseàHibernateàHibernate Configuration File,指定文件名称和位置,通常为/src/hibernate.cfg.xml,如前述设置数据库配置:

自动得到的hibernate.cfg.xml配置文件,需要加入

l  <propertyname="javax.persistence.validation.mode">none</property>”,避免应用时Hibernate产生“Errorapplying BeanValidation relational constraints”

l  “<mapping resource="./dbApp/Recorder.hbm.xml" />”,指明具体的实体类映射文件;

l “<propertyname="show_sql">true</property>”“ <propertyname="format_sql">true</property>”,可选,以便在控制台观察相应的SQL语句及其操作过程。

修正后的hibernate.cfg.xml配置文件如下:

<?xmlversion='1.0'encoding='UTF-8'?>

<!DOCTYPEhibernate-configuration PUBLIC "-//Hibernate/HibernateConfiguration DTD 3.0//EN"

         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!--Generated by MyEclipseHibernate Tools. -->

<hibernate-configuration>

   <session-factory>

   <propertyname="javax.persistence.validation.mode">none</property>

       <propertyname="hbm2ddl.auto">update</property>

       <propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property>

       <propertyname="connection.url">jdbc:sqlserver://localhost:1433;databaseName=study</property>

       <propertyname="connection.username">sa</property>

       <propertyname="connection.password">kzq666</property>

       <propertyname="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>

       <propertyname="myeclipse.connection.profile">MS_SQL_Server</property>

       <propertyname="show_sql">true</property>

       <propertyname="format_sql">true</property>

                  <mappingresource="./dbApp/Recorder.hbm.xml"/>

   </session-factory>

</hibernate-configuration>

4.2 建立HibernateSessionFactory.java会话工厂

新建à其它àMyeclipseàHibernateàHibernate Session Factory,指定名称、位置及其所属,通通常为/src/dbApp/HibernateSessionFactory,建立及其文件完善与前述完全一样,不再多述。

4.3数据表访问操作测试文件的编写与处理

在包dbApp下编写一个测试类dbTest.java:向数据表加入一行数据,然后将数据表全部读出显示在控制台,代码如下:

package dbApp;

import org.hibernate.*;

import dbApp.Recorder;

import dbApp.HibernateSessionFactory;

import java.util.*;

publicclassdbTest

{      publicstaticvoid main(String[] args)

        {       // 调用HibernateSessionFactorygetSession方法创建Session对象

                  Session session = HibernateSessionFactory.getSession(); 

                  Transactionts = session.beginTransaction();                               // 创建事务对象

                  Recorder rcd = new Recorder();                                                       // 创建POJO类对象

                  rcd.setId(1);                                                                                         // 设置ID

                  rcd.setName("kzq");                                                                          // 设置名字

                  rcd.setArticles(32);                                                                             // 设置密码

                  rcd.setBooks(5);                                                                                 // 设置密码

                  session.save(rcd);                                                                              // 保存对象

                  ts.commit();                                                                                        // 提交事务

                  Query query =session.createQuery("fromRecorder");

                  @SuppressWarnings("rawtypes")

                  List list = query.list();

                  @SuppressWarnings("rawtypes")

                  Iterator it=list.iterator();

                  while(it.hasNext())

                  {       rcd = (Recorder)it.next();

                           System.out.println("ID:"+rcd.getId()+"Name:"+rcd.getName()+"Articles:"+rcd.getArticles()+"Books:"+rcd.getBooks());

                  }

                  HibernateSessionFactory.closeSession();                                      // 关闭Session

        }

}

其中,@SuppressWarnings("rawtypes")为对下面语句警告的处理。

作为应用程序运行dbTest.java文件,即可在控制台看到相关数据表操作访问过程,也可打开SQLServer数据库观察结果。

应用时在控制台会看到有关log4j.prtoperties的红色警告,虽然不影响大局,但是非常缺憾。可以从集成开发环境中找到一个通用的log4j.prtoperties,如:

D:\hxht\MyEclipse\Common\plugins\org.apache.axis_1.4.0.v201005080400\lib\log4j.properties

拷贝到/src下既可消除警告,也可以记录调试或运行信息。

5 通过应用程序自动产生数据表

根据Hibernate的特点,通过java代码编制也可以自动形成数据库表,前提是需要先设置好Hibernate配置文件hibernate.cfg.xml和会议工厂HibernateSessionFactory.java

在包dbTest下建立数据表构造文件BuilderTable.java

package dbApp;

import org.hibernate.cfg.Configuration;

import org.hibernate.tool.hbm2ddl.SchemaExport;

publicclassBuildTable

{       publicstaticvoid main(String[] args)

         {       Configurationcfg =new Configuration().configure();

                  SchemaExport ex   = new SchemaExport(cfg);

               ex.create(true,true);

   }

}

作为应用程序运行BuilderTable.java,即可形成study下的数据表Recorder,并在控制台看到形成

SQL语句。

参考

1搭建Eclipse+MyEclipse+Tomcat开发环境

2 MyEclipse10连接SQL Server 2012/2005

3 Myeclipse10搭建SSH框架Struts2.1+Spring3.0+Hibernate3.3

4XDoclet2生成hibernate映射文件进而生成数据库ddl脚本

5 Eclipse快速上手Hibernate--1入门实例

6 Eclipse快速上手Hibernate--2利用Hbm映射文件开发

7 Eclipse快速上手Hibernate--3利用XDoclet开发

8八步详解Hibernate的搭建及使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值