• 第一个Hibernate程序


     Hibernate是一个优秀的开源ORM框架,就是符合Java语言习惯的关系型数据库持久化方案。目前主流数据库还都是关系数据库,也就是二维表结构,而Java语言是面向对象的语言,程序中操纵的是对象,那么刻画对象的一组数据怎样存入数据库?这就是Hibernate要完成的工作-对象数据的持久化。当然,持久化可以是写入文件系统也可以是写入数据库,而大规模数据存取时,程序直接IO的效率和易用性,可维护性显然都不如数据库好,所以使用数据库还是趋势。 
        Hibernate的官方网站是http://www.hibernate.org,要使用Hibernate当然要下载开发包,作为学习,只下载核心包core即可。当前版本是3.3.2-GA。 
        开发包下documentation中有帮助手册,也有中文的,这个中文只是简单翻译的,但是可以省去我们查找目录的时间了,Hibernate的帮助手册写的还是不错的。 
        既然要使用Java语言进行数据库操作,JDBC是必不可少的,Hibernate也是建立在JDBC API之上的,其本质还是JDBC,所以碰到Hibernate无法完成的工作,还应直接使用JDBC,任何东西都不是万能的。知道了本质,那么和数据库交互还需要对应的数据库驱动程序。 
        准备好这些东西后,我们就可以着手搭建Hibernate的开发环境了。解压缩Hibernate的开发包,在其根目录下的hibernate3.jar是必须的。打开lib目录,required中是hibernate所依赖的类库,需要全部使用。在bytecode中的cglib也是需要的,不要忘了,关于这些类库的作用这里还是不解释了。准备好后,就可以在Eclipse中搭建开发环境了。 
     
        建立普通的java工程就可以了,单机学习测试就够了。类库如图,版本可不同,这是最少的需求了。Hibernate配置文件hibernate.cfg.xml建议放置到类路径的根目录下,包的结构可以根据自己喜好,这里domain表示领域模型/对象,User.java是持久化类,User.hbm.xml是对象和数据库的映射文件,文件命名最好遵循规范,不要在这创新,这是无意义的。Test.java是测试类,有main方法,HibernateUtil是抽象出的一个简易工具集。 
        有了项目工程,下面先从数据库开始一步一步建立我们的第一个应用程序。

    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>
            <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
            <property name="hibernate.connection.username">hibernate</property>
            <property name="hibernate.connection.password">hibernate</property>
            <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
            <property name="current_session_context_class">thread</property>
            <property name="show_sql">true</property>
            <property name="format_sql">true</property>
            <mapping resource="domain/domain/User.hbm.xml" />
        </session-factory>
    </hibernate-configuration>

    XML的根标记是<hibernate-configuration>,其中需要配置session工厂,session工厂是工厂模式的实现,负责生产和数据库交互的session对象,注意这里的session不是web中的HttpSession,可不能搞混了,但都表示一次会话的过程。 
        Property中配置的都是数据库连接的驱动名称,URL,用户名,密码,Hibernate使用的数据库方言,这些是必须的属性。其中方言指的是针对不同的数据库产品Hibernate在处理某些操作(如分页)时可以自动生成SQL中相应的关键字。还有可选的属性是current_session_context_class,这是hibernate管理session对象上下文的方式,有thread,jta,manager三种方式。show_sql是否在控制台显示还原的SQL语句,是boolean值,建议在开发阶段使用。format_sql是否格式化显示还原的SQL语句,是boolean值,使用后在控制台将会看到方便阅读的SQL语句,否则就是一行显示了。 
        hbm2ddl.auto,这个属性是配置是否使用hibernate在数据库中自动创建表,取值情况如下:create/create-drop在程序开始都自动删除已有表,区别是drop在虚拟机退出后又删除表,而create在退出时不删除;update是根据映射文件更新表,可自动增加和删除;validate是校验,表和映射不一致报异常。习惯手动创建表的就不用使用这个属性了,我也是,手工创建表比较舒服踏实。再更多的属性就参考hibernate的文档就可以了。 
        还有一个标记是<mapping>,这个就是配置hibernate的实体关系映射文件的了,这个标记可以配置多个,挨着写就行了,注意包名要写全了。 
        下面是创建持久化对象,这个对象的属性包含了数据库中的字段名,他们之间是一一对应的,从而建立映射。

    Java代码

    package demo.domain;
    public class User implements java.io.Serializable {
        private Integer id;
        private String name;
        private String phone;
        private String department;
        private String city;
        private java.util.Date hireTime;
        public User() {
        }
    // 以下省略所有的get和set方法
    }

    User.hbm.xml映射文件如下配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="demo.domain.User" table="USERS">
            <id name="id" column="ID" type="java.lang.Integer" length="10">
                <generator class="sequence">
                    <param name="sequence">SEQ_HIBERNATE_USERS</param>
                </generator>
            </id>
            <property name="name" column="NAME" type="java.lang.String"
                length="20" not-null="true" />
            <property name="phone" column="PHONE" type="java.lang.String"
                length="20" />
            <property name="department" column="DEPARTMENT" type="java.lang.String"
                length="20" />
            <property name="city" column="CITY" type="java.lang.String"
                length="20" not-null="true" />
            <property name="hireTime" column="HIRE_TIME" type="java.util.Date"
                not-null="true" />
        </class>
    </hibernate-mapping>

     配置文件很灵活,格式可以不按照这样进行,但是基本配置必须要有。 
        根标记是<hibernate-mapping>,在其中的<class>标签中是配置持久化类的。name属性包含了类的全名,table是数据库中表的名称,不写table时表名默认就是类名。 
    <id>标记配置主键,name是持久化类的属性名,column是数据表的字段名,column不写时    默认和name同值。type是属性的类型,这里的基本数据类型都用其包装类表示。Length属性是数据表该字段的长度,在这里标明后也就不用每次去看数据库字典了。<generator>是主键的生成策略,类型有sequence,increment,native等,可以参考hibernate手册。这里使用的是Oracle的序列方式生成主键。 
        <property>标签配置的是对象的属性,name是持久化类中的属性名,column是数据表字段名,使用规则同上,type是属性的类型,lenth是长度,not-null是个boolean值,就是是否非空。 
        映射文件写好后,Hibernate的配置就完成了,下面就是写程序来测试了。

    import java.util.Date;
    import org.hibernate.*;
    import org.hibernate.cfg.Configuration;
    import demo.domain.User;
    public class Test {
    	public static void main(String[] args) {
    		Configuration config = new Configuration();
    		config.configure();// 配置文件名不是hibernate.cfg.xml时将文件名传入
    		SessionFactory sessionFactory = config.buildSessionFactory();// 相当于JDBC的注册驱动
    		Session session = sessionFactory.openSession();// 相当于JDBC的getConnection
    		Transaction tx = session.beginTransaction();// Hibernate操作必须启动事务
    		User user = new User();// 创建持久化对象
    		user.setName("Sarin");
    		user.setPhone("15912345678");
    		user.setDepartment("研发部");
    		user.setCity("大连");
    		user.setHireTime(new Date());
    		session.save(user);// 保存对象
    		tx.commit();// 持久化到数据库中
    	}
    }
    

      执行即可

  • 相关阅读:
    wp之动态初始屏幕
    C#实现简易ajax调用后台方法
    扩展JavaScriptSerializer之Camelcase属性名
    wp之切换图片动画
    JQuery.Ajax用法
    工欲善其事,必先利其器
    asp.net中使用自定义的config文件
    windows phone7 学习笔记15——Bing Maps
    wp7屏幕截图代码
    windows phone7 学习笔记13——Panorama和Pivot
  • 原文地址:https://www.cnblogs.com/90zyh/p/3025616.html
Copyright © 2020-2023  润新知