• HibernateTools实现pojo类 数据库schma mapping映射的相互转换


    核心

    利用HibernateTools,从POJO类,Mapping映射文件,数据库表有其中的一项,就能生成其他两项。

     

    概述

    在使用Hibernate开发系统持久层时,按照一般开发流程

     

    1、分析业务

    2、获得系统实体类

    3、写Hibernatemapping映射文件

    4、根据映射文件,生成数据库表

     

        以上这几步是Hibernate开发的起始。根据开发习惯的不同,有些项目组可能会先写POJO类,有的项目可能会先设计数据库,有的项目组可能先写映射文件,其实完成其中的一项时,类结构或者表结构就可以确定了。

    既然已经能确定结构了,完全可以使用工具来代替手工完成剩余的工作。

    前提

        安装Eclipse插件HibernateToolseclipse插件安装百度下教程非常多,建议采用copy安装或者link安装,再有就是HibernateTools的版本对应着特定的Eclipse版本,所以安装前请先检查自己的eclipse版本。

       然后建立项目,本文建立的是Dynamic Web Project,采用了mysql数据库,建立项目后,引入mysql的驱动jar,引入Hibernate(本文用了4.3.5版本)的包,即librequired文件夹中所有jar

       安装完了插件,首先利用tool生成Hibernate配置文件,项目右键-->new,安装完HibernateTools后,多了4种类型的文件,选择第一种:


    根据使用的数据库,填入必须的属性:

    生成hibernate.cfg.xml的代码:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="utf-8"?>  
    2. <!DOCTYPE hibernate-configuration PUBLIC  
    3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
    4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
    5. <hibernate-configuration>  
    6.     <session-factory>  
    7.         <property name="hibernate.bytecode.use_reflection_optimizer">false</property>  
    8.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
    9.         <property name="hibernate.connection.password">123456</property>  
    10.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>  
    11.         <property name="hibernate.connection.username">root</property>  
    12.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
    13.         <property name="hibernate.search.autoregister_listeners">false</property>  
    14.          
    15.           
    16.     </session-factory>  
    17. </hibernate-configuration></span>  

    相互转换

    接下可以进入正题了,本文分别从三项中的每一项入手,生成其他两项。 

    思路一:由POJO类生成mapping映射文件和DDL

    POJO类的代码写起来非常方便,因此首先介绍这种方法,个人认为这种方法效率最高。首先建立两个POJO

    1. package org.hibernate.test;  
    2.   
    3.   
    4. public class Student implements java.io.Serializable {  
    5.   
    6.     private int id;  
    7.     private String name;  
    8.   
    9.     public Student() {  
    10.     }  
    11.   
    12.     public Student(int id) {  
    13.         this.id = id;  
    14.     }  
    15.   
    16.     public Student(int id, String name) {  
    17.         this.id = id;  
    18.         this.name = name;  
    19.     }  
    20.   
    21.     public int getId() {  
    22.         return this.id;  
    23.     }  
    24.   
    25.     public void setId(int id) {  
    26.         this.id = id;  
    27.     }  
    28.   
    29.     public String getName() {  
    30.         return this.name;  
    31.     }  
    32.   
    33.     public void setName(String name) {  
    34.         this.name = name;  
    35.     }  
    36.   
    37. }  
    1. package org.hibernate.test;  
    2.   
    3.   
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6.   
    7.   
    8. public class Class implements java.io.Serializable {  
    9.   
    10.     private int id;  
    11.     private String name;  
    12.     private List students = new ArrayList(0);  
    13.   
    14.     public Class() {  
    15.     }  
    16.   
    17.     public Class(int id) {  
    18.         this.id = id;  
    19.     }  
    20.   
    21.     public Class(int id, String name, List students) {  
    22.         this.id = id;  
    23.         this.name = name;  
    24.         this.students = students;  
    25.     }  
    26.   
    27.     public int getId() {  
    28.         return this.id;  
    29.     }  
    30.   
    31.     public void setId(int id) {  
    32.         this.id = id;  
    33.     }  
    34.   
    35.     public String getName() {  
    36.         return this.name;  
    37.     }  
    38.   
    39.     public void setName(String name) {  
    40.         this.name = name;  
    41.     }  
    42.   
    43.     public List getStudents() {  
    44.         return this.students;  
    45.     }  
    46.   
    47.     public void setStudents(List students) {  
    48.         this.students = students;  
    49.     }  
    50.   
    51. }  

    接下来一步一步生成另外两项,首先项目右键-->new,选择Hibernate下面的第四项,建立mapping映射文件,根据已存在的POJO类,生成Mapping文件

    添加两个已经存在的POJO类

    下一步,可以预先查看生成的hbm.xml文件,有特殊要求的可以再生成的文件基础上稍作修改。

    生成代码:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0"?>  
    2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
    4. <!-- Generated 2014-5-30 21:29:20 by Hibernate Tools 4.0.0 -->  
    5. <hibernate-mapping>  
    6.     <class name="org.hibernate.test.Student" table="STUDENT">  
    7.         <id name="id" type="int">  
    8.             <column name="ID" />  
    9.             <generator class="assigned"></generator>  
    10.         </id>  
    11.         <property name="name" type="java.lang.String">  
    12.             <column name="NAME" />  
    13.         </property>  
    14.     </class>  
    15. </hibernate-mapping></span>  
    1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0"?>  
    2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
    4. <!-- Generated 2014-5-30 21:29:20 by Hibernate Tools 4.0.0 -->  
    5. <hibernate-mapping>  
    6.     <class name="org.hibernate.test.Class" table="CLASS">  
    7.         <id name="id" type="int">  
    8.             <column name="ID" />  
    9.             <generator class="assigned"></generator>  
    10.         </id>  
    11.         <property name="name" type="java.lang.String">  
    12.             <column name="NAME" />  
    13.         </property>  
    14.         <list name="students" inverse="false" table="STUDENT" lazy="true">  
    15.             <key>  
    16.                 <column name="ID" />  
    17.             </key>  
    18.             <list-index>  
    19.                 <column name="idx" />  
    20.             </list-index>  
    21.             <one-to-many class="org.hibernate.test.Student" />  
    22.         </list>  
    23.     </class>  
    24. </hibernate-mapping></span>  


    mapping映射文件生成了,接下来生成ddl,项目右键-->new,选择Hibernate Console  Configuration

    选择好对应的项后,finish,然后需要在工具栏添加Hibernate code Generation,Windows-->Customer Perspective

    然后工具栏多了一个很像运行按钮的图标,单击下拉按钮,选第二项

    单击Exporters选项卡,可以看到HibernateTools工具能导出和生成的项很多,可以根据配置有针对性的选择自己想要的项,这里我们勾选Schema Export,然后单击图标1下面的Properties的Add,后出现图标2所示的窗体

    选择第二项,这就是要生成我们想要的ddl,如图,当然上图还勾选了DAO Code,生成了操作试题的DAO代码(HibernateTools确实很贴心)

    这是生成后的图片

    ddl的建表语句:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;">create table CLASS (ID integer not null, NAME varchar(255), primary key (ID));  
    2. create table STUDENT (ID integer not null, NAME varchar(255), idx integer, primary key (ID));  
    3. alter table STUDENT add index FKBACA0E1BE081A5FD (ID), add constraint FKBACA0E1BE081A5FD foreign key (ID) references CLASS (ID);  
    4. </span>  

    DAO代码如下:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;">package org.hibernate.test;  
    2.   
    3. // Generated 2014-5-30 23:18:05 by Hibernate Tools 4.0.0  
    4.   
    5. import java.util.List;  
    6. import javax.naming.InitialContext;  
    7. import org.apache.commons.logging.Log;  
    8. import org.apache.commons.logging.LogFactory;  
    9. import org.hibernate.LockMode;  
    10. import org.hibernate.SessionFactory;  
    11. import org.hibernate.criterion.Example;  
    12.   
    13. /**  
    14.  * Home object for domain model class Class.  
    15.  * @see org.hibernate.test.Class  
    16.  * @author Hibernate Tools  
    17.  */  
    18. public class ClassHome {  
    19.   
    20.     private static final Log log = LogFactory.getLog(ClassHome.class);  
    21.   
    22.     private final SessionFactory sessionFactory = getSessionFactory();  
    23.   
    24.     protected SessionFactory getSessionFactory() {  
    25.         try {  
    26.             return (SessionFactory) new InitialContext()  
    27.                     .lookup("SessionFactory");  
    28.         } catch (Exception e) {  
    29.             log.error("Could not locate SessionFactory in JNDI", e);  
    30.             throw new IllegalStateException(  
    31.                     "Could not locate SessionFactory in JNDI");  
    32.         }  
    33.     }  
    34.   
    35.     public void persist(Class transientInstance) {  
    36.         log.debug("persisting Class instance");  
    37.         try {  
    38.             sessionFactory.getCurrentSession().persist(transientInstance);  
    39.             log.debug("persist successful");  
    40.         } catch (RuntimeException re) {  
    41.             log.error("persist failed", re);  
    42.             throw re;  
    43.         }  
    44.     }  
    45.   
    46.     public void attachDirty(Class instance) {  
    47.         log.debug("attaching dirty Class instance");  
    48.         try {  
    49.             sessionFactory.getCurrentSession().saveOrUpdate(instance);  
    50.             log.debug("attach successful");  
    51.         } catch (RuntimeException re) {  
    52.             log.error("attach failed", re);  
    53.             throw re;  
    54.         }  
    55.     }  
    56.   
    57.     public void attachClean(Class instance) {  
    58.         log.debug("attaching clean Class instance");  
    59.         try {  
    60.             sessionFactory.getCurrentSession().lock(instance, LockMode.NONE);  
    61.             log.debug("attach successful");  
    62.         } catch (RuntimeException re) {  
    63.             log.error("attach failed", re);  
    64.             throw re;  
    65.         }  
    66.     }  
    67.   
    68.     public void delete(Class persistentInstance) {  
    69.         log.debug("deleting Class instance");  
    70.         try {  
    71.             sessionFactory.getCurrentSession().delete(persistentInstance);  
    72.             log.debug("delete successful");  
    73.         } catch (RuntimeException re) {  
    74.             log.error("delete failed", re);  
    75.             throw re;  
    76.         }  
    77.     }  
    78.   
    79.     public Class merge(Class detachedInstance) {  
    80.         log.debug("merging Class instance");  
    81.         try {  
    82.             Class result = (Class) sessionFactory.getCurrentSession().merge(  
    83.                     detachedInstance);  
    84.             log.debug("merge successful");  
    85.             return result;  
    86.         } catch (RuntimeException re) {  
    87.             log.error("merge failed", re);  
    88.             throw re;  
    89.         }  
    90.     }  
    91.   
    92.     public Class findById(int id) {  
    93.         log.debug("getting Class instance with id: " + id);  
    94.         try {  
    95.             Class instance = (Class) sessionFactory.getCurrentSession().get(  
    96.                     "org.hibernate.test.Class", id);  
    97.             if (instance == null) {  
    98.                 log.debug("get successful, no instance found");  
    99.             } else {  
    100.                 log.debug("get successful, instance found");  
    101.             }  
    102.             return instance;  
    103.         } catch (RuntimeException re) {  
    104.             log.error("get failed", re);  
    105.             throw re;  
    106.         }  
    107.     }  
    108.   
    109.     public List findByExample(Class instance) {  
    110.         log.debug("finding Class instance by example");  
    111.         try {  
    112.             List results = sessionFactory.getCurrentSession()  
    113.                     .createCriteria("org.hibernate.test.Class")  
    114.                     .add(Example.create(instance)).list();  
    115.             log.debug("find by example successful, result size: "  
    116.                     + results.size());  
    117.             return results;  
    118.         } catch (RuntimeException re) {  
    119.             log.error("find by example failed", re);  
    120.             throw re;  
    121.         }  
    122.     }  
    123. }</span>  


    到此,我们就由POJO类,生成了hbm.xml文件和DDL

    思路二:由hbm.xml生成POJO类和DDL

    ...

    思路三:由数据库表(或DDL)生成POJO类和hbm.xml

    ...

    思路二三请见下一博客

    核心

    利用HibernateTools,从POJO类,Mapping映射文件,数据库表有其中的一项,就能生成其他两项。

     

    概述

    在使用Hibernate开发系统持久层时,按照一般开发流程

     

    1、分析业务

    2、获得系统实体类

    3、写Hibernatemapping映射文件

    4、根据映射文件,生成数据库表

     

        以上这几步是Hibernate开发的起始。根据开发习惯的不同,有些项目组可能会先写POJO类,有的项目可能会先设计数据库,有的项目组可能先写映射文件,其实完成其中的一项时,类结构或者表结构就可以确定了。

    既然已经能确定结构了,完全可以使用工具来代替手工完成剩余的工作。

    前提

        安装Eclipse插件HibernateToolseclipse插件安装百度下教程非常多,建议采用copy安装或者link安装,再有就是HibernateTools的版本对应着特定的Eclipse版本,所以安装前请先检查自己的eclipse版本。

       然后建立项目,本文建立的是Dynamic Web Project,采用了mysql数据库,建立项目后,引入mysql的驱动jar,引入Hibernate(本文用了4.3.5版本)的包,即librequired文件夹中所有jar

       安装完了插件,首先利用tool生成Hibernate配置文件,项目右键-->new,安装完HibernateTools后,多了4种类型的文件,选择第一种:


    根据使用的数据库,填入必须的属性:

    生成hibernate.cfg.xml的代码:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="utf-8"?>  
    2. <!DOCTYPE hibernate-configuration PUBLIC  
    3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
    4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
    5. <hibernate-configuration>  
    6.     <session-factory>  
    7.         <property name="hibernate.bytecode.use_reflection_optimizer">false</property>  
    8.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
    9.         <property name="hibernate.connection.password">123456</property>  
    10.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>  
    11.         <property name="hibernate.connection.username">root</property>  
    12.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
    13.         <property name="hibernate.search.autoregister_listeners">false</property>  
    14.          
    15.           
    16.     </session-factory>  
    17. </hibernate-configuration></span>  

    相互转换

    接下可以进入正题了,本文分别从三项中的每一项入手,生成其他两项。 

    思路一:由POJO类生成mapping映射文件和DDL

    POJO类的代码写起来非常方便,因此首先介绍这种方法,个人认为这种方法效率最高。首先建立两个POJO

    1. package org.hibernate.test;  
    2.   
    3.   
    4. public class Student implements java.io.Serializable {  
    5.   
    6.     private int id;  
    7.     private String name;  
    8.   
    9.     public Student() {  
    10.     }  
    11.   
    12.     public Student(int id) {  
    13.         this.id = id;  
    14.     }  
    15.   
    16.     public Student(int id, String name) {  
    17.         this.id = id;  
    18.         this.name = name;  
    19.     }  
    20.   
    21.     public int getId() {  
    22.         return this.id;  
    23.     }  
    24.   
    25.     public void setId(int id) {  
    26.         this.id = id;  
    27.     }  
    28.   
    29.     public String getName() {  
    30.         return this.name;  
    31.     }  
    32.   
    33.     public void setName(String name) {  
    34.         this.name = name;  
    35.     }  
    36.   
    37. }  
    1. package org.hibernate.test;  
    2.   
    3.   
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6.   
    7.   
    8. public class Class implements java.io.Serializable {  
    9.   
    10.     private int id;  
    11.     private String name;  
    12.     private List students = new ArrayList(0);  
    13.   
    14.     public Class() {  
    15.     }  
    16.   
    17.     public Class(int id) {  
    18.         this.id = id;  
    19.     }  
    20.   
    21.     public Class(int id, String name, List students) {  
    22.         this.id = id;  
    23.         this.name = name;  
    24.         this.students = students;  
    25.     }  
    26.   
    27.     public int getId() {  
    28.         return this.id;  
    29.     }  
    30.   
    31.     public void setId(int id) {  
    32.         this.id = id;  
    33.     }  
    34.   
    35.     public String getName() {  
    36.         return this.name;  
    37.     }  
    38.   
    39.     public void setName(String name) {  
    40.         this.name = name;  
    41.     }  
    42.   
    43.     public List getStudents() {  
    44.         return this.students;  
    45.     }  
    46.   
    47.     public void setStudents(List students) {  
    48.         this.students = students;  
    49.     }  
    50.   
    51. }  

    接下来一步一步生成另外两项,首先项目右键-->new,选择Hibernate下面的第四项,建立mapping映射文件,根据已存在的POJO类,生成Mapping文件

    添加两个已经存在的POJO类

    下一步,可以预先查看生成的hbm.xml文件,有特殊要求的可以再生成的文件基础上稍作修改。

    生成代码:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0"?>  
    2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
    4. <!-- Generated 2014-5-30 21:29:20 by Hibernate Tools 4.0.0 -->  
    5. <hibernate-mapping>  
    6.     <class name="org.hibernate.test.Student" table="STUDENT">  
    7.         <id name="id" type="int">  
    8.             <column name="ID" />  
    9.             <generator class="assigned"></generator>  
    10.         </id>  
    11.         <property name="name" type="java.lang.String">  
    12.             <column name="NAME" />  
    13.         </property>  
    14.     </class>  
    15. </hibernate-mapping></span>  
    1. <span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0"?>  
    2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
    4. <!-- Generated 2014-5-30 21:29:20 by Hibernate Tools 4.0.0 -->  
    5. <hibernate-mapping>  
    6.     <class name="org.hibernate.test.Class" table="CLASS">  
    7.         <id name="id" type="int">  
    8.             <column name="ID" />  
    9.             <generator class="assigned"></generator>  
    10.         </id>  
    11.         <property name="name" type="java.lang.String">  
    12.             <column name="NAME" />  
    13.         </property>  
    14.         <list name="students" inverse="false" table="STUDENT" lazy="true">  
    15.             <key>  
    16.                 <column name="ID" />  
    17.             </key>  
    18.             <list-index>  
    19.                 <column name="idx" />  
    20.             </list-index>  
    21.             <one-to-many class="org.hibernate.test.Student" />  
    22.         </list>  
    23.     </class>  
    24. </hibernate-mapping></span>  


    mapping映射文件生成了,接下来生成ddl,项目右键-->new,选择Hibernate Console  Configuration

    选择好对应的项后,finish,然后需要在工具栏添加Hibernate code Generation,Windows-->Customer Perspective

    然后工具栏多了一个很像运行按钮的图标,单击下拉按钮,选第二项

    单击Exporters选项卡,可以看到HibernateTools工具能导出和生成的项很多,可以根据配置有针对性的选择自己想要的项,这里我们勾选Schema Export,然后单击图标1下面的Properties的Add,后出现图标2所示的窗体

    选择第二项,这就是要生成我们想要的ddl,如图,当然上图还勾选了DAO Code,生成了操作试题的DAO代码(HibernateTools确实很贴心)

    这是生成后的图片

    ddl的建表语句:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;">create table CLASS (ID integer not null, NAME varchar(255), primary key (ID));  
    2. create table STUDENT (ID integer not null, NAME varchar(255), idx integer, primary key (ID));  
    3. alter table STUDENT add index FKBACA0E1BE081A5FD (ID), add constraint FKBACA0E1BE081A5FD foreign key (ID) references CLASS (ID);  
    4. </span>  

    DAO代码如下:

    1. <span style="font-family:KaiTi_GB2312;font-size:18px;">package org.hibernate.test;  
    2.   
    3. // Generated 2014-5-30 23:18:05 by Hibernate Tools 4.0.0  
    4.   
    5. import java.util.List;  
    6. import javax.naming.InitialContext;  
    7. import org.apache.commons.logging.Log;  
    8. import org.apache.commons.logging.LogFactory;  
    9. import org.hibernate.LockMode;  
    10. import org.hibernate.SessionFactory;  
    11. import org.hibernate.criterion.Example;  
    12.   
    13. /**  
    14.  * Home object for domain model class Class.  
    15.  * @see org.hibernate.test.Class  
    16.  * @author Hibernate Tools  
    17.  */  
    18. public class ClassHome {  
    19.   
    20.     private static final Log log = LogFactory.getLog(ClassHome.class);  
    21.   
    22.     private final SessionFactory sessionFactory = getSessionFactory();  
    23.   
    24.     protected SessionFactory getSessionFactory() {  
    25.         try {  
    26.             return (SessionFactory) new InitialContext()  
    27.                     .lookup("SessionFactory");  
    28.         } catch (Exception e) {  
    29.             log.error("Could not locate SessionFactory in JNDI", e);  
    30.             throw new IllegalStateException(  
    31.                     "Could not locate SessionFactory in JNDI");  
    32.         }  
    33.     }  
    34.   
    35.     public void persist(Class transientInstance) {  
    36.         log.debug("persisting Class instance");  
    37.         try {  
    38.             sessionFactory.getCurrentSession().persist(transientInstance);  
    39.             log.debug("persist successful");  
    40.         } catch (RuntimeException re) {  
    41.             log.error("persist failed", re);  
    42.             throw re;  
    43.         }  
    44.     }  
    45.   
    46.     public void attachDirty(Class instance) {  
    47.         log.debug("attaching dirty Class instance");  
    48.         try {  
    49.             sessionFactory.getCurrentSession().saveOrUpdate(instance);  
    50.             log.debug("attach successful");  
    51.         } catch (RuntimeException re) {  
    52.             log.error("attach failed", re);  
    53.             throw re;  
    54.         }  
    55.     }  
    56.   
    57.     public void attachClean(Class instance) {  
    58.         log.debug("attaching clean Class instance");  
    59.         try {  
    60.             sessionFactory.getCurrentSession().lock(instance, LockMode.NONE);  
    61.             log.debug("attach successful");  
    62.         } catch (RuntimeException re) {  
    63.             log.error("attach failed", re);  
    64.             throw re;  
    65.         }  
    66.     }  
    67.   
    68.     public void delete(Class persistentInstance) {  
    69.         log.debug("deleting Class instance");  
    70.         try {  
    71.             sessionFactory.getCurrentSession().delete(persistentInstance);  
    72.             log.debug("delete successful");  
    73.         } catch (RuntimeException re) {  
    74.             log.error("delete failed", re);  
    75.             throw re;  
    76.         }  
    77.     }  
    78.   
    79.     public Class merge(Class detachedInstance) {  
    80.         log.debug("merging Class instance");  
    81.         try {  
    82.             Class result = (Class) sessionFactory.getCurrentSession().merge(  
    83.                     detachedInstance);  
    84.             log.debug("merge successful");  
    85.             return result;  
    86.         } catch (RuntimeException re) {  
    87.             log.error("merge failed", re);  
    88.             throw re;  
    89.         }  
    90.     }  
    91.   
    92.     public Class findById(int id) {  
    93.         log.debug("getting Class instance with id: " + id);  
    94.         try {  
    95.             Class instance = (Class) sessionFactory.getCurrentSession().get(  
    96.                     "org.hibernate.test.Class", id);  
    97.             if (instance == null) {  
    98.                 log.debug("get successful, no instance found");  
    99.             } else {  
    100.                 log.debug("get successful, instance found");  
    101.             }  
    102.             return instance;  
    103.         } catch (RuntimeException re) {  
    104.             log.error("get failed", re);  
    105.             throw re;  
    106.         }  
    107.     }  
    108.   
    109.     public List findByExample(Class instance) {  
    110.         log.debug("finding Class instance by example");  
    111.         try {  
    112.             List results = sessionFactory.getCurrentSession()  
    113.                     .createCriteria("org.hibernate.test.Class")  
    114.                     .add(Example.create(instance)).list();  
    115.             log.debug("find by example successful, result size: "  
    116.                     + results.size());  
    117.             return results;  
    118.         } catch (RuntimeException re) {  
    119.             log.error("find by example failed", re);  
    120.             throw re;  
    121.         }  
    122.     }  
    123. }</span>  


    到此,我们就由POJO类,生成了hbm.xml文件和DDL

    思路二:由hbm.xml生成POJO类和DDL

    ...

    思路三:由数据库表(或DDL)生成POJO类和hbm.xml

    ...

    思路二三请见下一博客

  • 相关阅读:
    基于按annotation的hibernate主键生成策略,(本文copy的 七郎's Blog的博客,觉的不错)
    sql server与oracle常用函数对比
    如何将jar包关联到javadoc文档??
    在struts2中,每次修改了struts.xml都要重启tomcat服务器,那么怎么样设置才能修改了struts.xml而不需要重启tomcat的服务器呢??
    单链表的就地逆置
    读书笔记——尽量将引用参数设置为const类型
    二进制中1的个数
    反转单向链表
    二叉树的深度
    C/C++参数入栈顺序
  • 原文地址:https://www.cnblogs.com/tian830937/p/4420533.html
Copyright © 2020-2023  润新知