zoukankan      html  css  js  c++  java
  • 002---第一个Hibernate示例

    Hibernate压缩文件结构

    下载Hibernate压缩文档,下面为文件结构:

    Hibernate3.jar:为Hibernate的核心jar包;

    build.xml:重新打包配置文件

    build.bat:运行在windows系统中打包;

    build.sh:运行在Unix系统上打包;

    doc:Hibernate API文档

    eg:一个简单的实例

    etc:Hibernate中需要使用的配置文件的模板

    lib:Hibernate所需要使用的一些Jar包

    src:Hibernate的源代码

    test:测试代码(单元测试代码)

    搭建Hibernate的使用环境:

    1、   建立项目(我们这里建立Java Project)

    例:hibernate_first

    2、   引入hibernate所需要的jar包

    利用User Library库引入jar包,以后项目如何需要使用这此jar包,只要引入这个库就可以了。

    方法:

    第一步: window→Preferences → Java → Build Path → User Libraries → “New” 按钮→ 然后输入库名→点击“OK”

    第二步:加入所需要的JAR包:点击“Hibernate3”项→“Add JARs…”按钮→在弹出的对话框选择需要的JAR包(hibernate3.jar、lib目录下的所有JAR包),还有数据库的JDBC驱动(例如Mysql驱动)

    为项目引入hibernate JAR

    右键项目→Properties→Java Build Path→右边点击”Libraries”选项卡→“Add Library…”按钮→User Library→”next”按钮→选中我们刚刚建的”Hibernate3 JAR库”→Finish→OK

    1、   创建Hibernate的配置文件(hibernate.cfg.xml)

    Hibernate支持两个格式的配置文件:hibernate.properties(不常用)和hibernate.cfg.xml(建意使用)

    将hibernate.cfg.xml文件复制到ClassPath的根下(src目录下)(hibernate.cfg.xml位于hibernate_home/etc目录下)

    <session-factory>

            <!--

                具体的配置信息可参见hibernate_home/etc/hibernate.properties相关配置项

                如何要移植数据时,只要将下面数据库信息修改就可以了。

             -->

            <!-- 配置mysql数据库连接串 -->

            <property name="hibernate.connection.url">jdbc:mysql://localhost:3036/hibernate_first</property>

            <!-- 配置mysql数据库jdbc驱动 -->

            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

            <!-- 配置mysql数据库连接用户名 -->

            <property name="hibernate.connection.username">root</property>

            <!-- 配置mysql数据库连接用户密码 -->

            <property name="hibernate.connection.password">root</property>

            <!--配置数据库适配器(使用何中数据库)-->

            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

             <!-- 是否显示hibernate的SQL语句 -->

            <property name="hibernate.show_sql">true</property>

          <!-- 实体类导出至数据库时,如果存在的表处理方式:

                hibernate.hbm2ddl.auto :(create-drop、create、update、validate)

             -->

            <property name="hibernate.hbm2ddl.auto">update</property>

       

     

    <!-- 配置实体类映射文件 位于property之后

                映射文件要求为完整路径,目录之前使用/隔开

    -->

           <mapping resource="com/wjt276/hibernate/User.hbm.xml"/>

     

    </session-factory>

    1、   创建日志的配置文件(log4j.properties),为了便于调试最好加入log4j配置文件

    将模板文件复制到ClassPath根下(src目录下)

    为了不需要多于的提示信息,可以将此配置文件中一些配置项取消了。但要保留log4j.rootLogger=warn, stdout

    2、   定义实体类

    (Hibernate先定义实体类,再生成表)

    例如:User实体类

    3、   定义User类的映射文件(重要、关键)—User.hbm.xml

    映射文件可位于任何位置,但一般位于实体类同一目录下。

    映射文件是描述实体类和实体类的属性的。

    源数据:描述实体类及实体类属性之间的关系的。

    映射类标签:<classs></class>

    <!--

            class标签 实体类映射到数据表

            * name属性:实体类的完整路径

            * table属性:实体类映射到数据库中的表名,如果省略,则为实体类的类名称

        -->

        <class name="com.wjt276.hibernate.User" table="t_user">

            <!-- 映射数据库主键 映射到数据表中的字段名默认为类属性名,但可以利用column重新指定-->

            <id name="id" column="id">

                <!-- generator设置主键生成策略

                    uuid:一万年内生成唯一的字符串

                -->

                <generator class="uuid"/>

            </id>

            <!-- property 映射普通属性  映射到数据表中的字段名默认为类属性名,但可以利用column重新指定-->

            <property name="name" column="name"/>

            <property name="password"/>

            <property name="createTime"/><!-- Hibernate会自动根据实体类属性类型生成数据库表中字段类型 -->

            <property name="expireTime"/>

        </class>

    1、   将User.hbm.xml文件加入到hibernate配置文件中(hibernate.cfg.xml),因为hibernate并不知道这个文件的存在。

    <!-- 配置实体类映射文件 位于property之后

                映射文件要求为完整路径,目录之前使用/隔开

    -->

           <mapping resource="com/wjt276/hibernate/User.hbm.xml"/>

    1、   使用hibernate工具类将对象模型生成关系模型(hbm to ddl)

    (也就是实体类生成数据库中的表),完整代码如下:

    package com.wjt276.hibernate;

     

    import org.hibernate.cfg.Configuration;

    import org.hibernate.tool.hbm2ddl.SchemaExport;

     

    /**

     * Hibernate工具<br/>

     * 将对象模型生成关系模型(将对象生成数据库中的表)

     * 把hbm映射文件转换成DDL

     * 生成数据表之前要求已经存在数据库

     * 注:这个工具类建立好后,以后就不用建立了。以后直接Copy来用。

     * @author wjt276

     * @version 1.0 2009/10/16

     */

    public class ExportDB {

        public static void main(String[] args){

            /*

             * org.hibernate.cfg.Configuration类的作用:

             * 读取hibernate配置文件(hibernate.cfg.xml或hiberante.properties)的.

             * new Configuration()默认是读取hibernate.properties

             * 所以使用new Configuration().configure();来读取hibernate.cfg.xml配置文件

             */

            Configuration cfg = new Configuration().configure();

           

            /*

             * org.hibernate.tool.hbm2ddl.SchemaExport工具类:

             * 需要传入Configuration参数

             * 此工具类可以将类导出生成数据库表

             */

            SchemaExport export = new SchemaExport(cfg);

           

            /*

             * 开始导出

             * 第一个参数:script 是否打印DDL信息

             * 第二个参数:export 是否导出到数据库中生成表

             */

            export.create(true, true);

           

        }

    }

    1、   运行刚刚建立的ExportDB类中的main()方法,进行实际的导出类。

    2、   开发客户端,完整代码如下:

    package com.wjt276.hibernate;

     

    import java.util.Date;

     

    import org.hibernate.Session;

    import org.hibernate.SessionFactory;

    import org.hibernate.cfg.Configuration;

     

    public class Client {

     

        public static void main(String[] args){

           

            //读取hibernate.cfg.xml文件

            Configuration cfg = new Configuration().configure();

           

            /*

             * 创建SessionFactory

             * 一个数据库对应一个SessionFactory

             * SessionFactory是线线程安全的。

             */

            SessionFactory factory = cfg.buildSessionFactory();

           

            //创建session

            //此处的session并不是web中的session

            //session只有在用时,才建立concation,session还管理缓存。

            //session用完后,必须关闭。

            //session是非线程安全,一般是一个请求一个session.

            Session session = null;

           

            try {

               

                session = factory.openSession();

               

                //手动开启事务(可以在hibernate.cfg.xml配置文件中配置自动开启事务)

                session.beginTransaction();

               

                User user = new User();

                user.setName("张三");

                user.setPassword("123");

                user.setCreateTime(new Date());

                user.setExpireTime(new Date());        

                /*

                 * 保存数据,此处的数据是保存对象,这就是hibernate操作对象的好处,

                 * 我们不用写那么多的JDBC代码,只要利用session操作对象,至于hibernat如何存在对象,这不需要我们去关心它,

                 * 这些都有hibernate来完成。我们只要将对象创建完后,交给hibernate就可以了。

                 */

                session.save(user);

               

                //提交事务

                session.getTransaction().commit();

               

            } catch (Exception e) {

                e.printStackTrace();

                //回滚事务

                session.getTransaction().rollback();

            } finally {

                if (session != null) {

                    //关闭session

                    session.close();

                }

            }      

        }

    }

    注:为了方便跟踪sql语句执行,可以在hibernate.hbm.xml中加入下以代码:

    <property name="hibernate.show_sql">true</property>

  • 相关阅读:
    Codeforces Round #404 (Div. 2) C. Anton and Fairy Tale
    Codeforces Round #402 (Div. 2) D.String Game
    30.algorithm排序小结
    28.数值算法小结
    28.STL常用算法
    27.改变数据的数值算法
    26.不改变数据的数值算法
    25.不改变原生数据的STL algorithm
    24.迭代器(流迭代器,正向,反向迭代器,分配器,存储迭代器)
    22.允许重复的容器(unordered_multiset)
  • 原文地址:https://www.cnblogs.com/crazylqy/p/4076293.html
Copyright © 2011-2022 走看看