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

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

2013-09-21 16:22 211 查看

3 Ant-XDoclet数据表自动产生

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

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



以注释的方式添加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文件需要遵守“DTD或XML
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”;


“<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)
        {      
// 调用HibernateSessionFactory的getSession方法创建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

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

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

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

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

8八步详解Hibernate的搭建及使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: