• Hibernate——hibernate的配置测试


    Hibernate

      Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 

    语言特点

    • 将对数据库的操作转换为对Java对象的操作,从而简化开发。通过修改一个“持久化”对象的属性从而修改数据库表中对应的记录数据。
    • 提供线程和进程两个级别的缓存提升应用程序性能。
    • 有丰富的映射方式将Java对象之间的关系转换为数据库表之间的关系。
    • 屏蔽不同数据库实现之间的差异。在Hibernate中只需要通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句。
    • 非侵入式:Hibernate不要求持久化类实现任何接口或继承任何类,POJO即可。

    核心API

      Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通过这些接口,可以对持久化对象进行存取、事务控制。
    Session
      Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。
    SessionFactory
      SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
    Transaction
      Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。
    Query
      Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
    Criteria
      Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
    Configuration
      Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。

    Hibernate的一些包的作用

    net.sf.hibernate.*
    该包的类基本上都是接口类和异常类
    net.sf.hibernate.cache.*
    JCS的实现类
    net.sf.hibernate.cfg.*
    配置文件读取类
    net.sf.hibernate.collection.*
    Hibernate集合接口实现类,例如List,Set,Bag等等,Hibernate之所以要自行编写集合接口实现类是为了支持lazy loading
    net.sf.hibernate.connection.*
    几个数据库连接池的Provider
    net.sf.hibernate.dialect.*
    支持多种数据库特性,每个Dialect实现类代表一种数据库,描述了该数据库支持的数据类型和其它特点,例如是否有AutoIncrement,是否有Sequence,是否有分页sql等等
    net.sf.hibernate. eg.*
    Hibernate文档中用到的例子
    net.sf.hibernate.engine.*
    这个包的类作用比较散
    net.sf.hibernate.expression.*
    HQL支持的表达式
    net.sf.hibernate.hq.*
    HQL实现
    net.sf.hibernate. id.*
    ID生成器
    net.sf.hibernate.impl.*
    最核心的包,一些重要接口的实现类,如Session,SessionFactory,Query等
    net.sf.hibernate.jca.*
    JCA支持,把Session包装为支持JCA的接口实现类
    net.sf.hibernate.jmx.*
    JMX是用来编写App Server的管理程序的,大概是JMX部分接口的实现,使得App Server可以通过JMX接口管理Hibernate
    net.sf.hibernate.loader.*
    也是很核心的包,主要是生成sql语句的
    net.sf.hibernate.lob.*
    Blob和Clob支持
    net.sf.hibernate.mapping.*
    hbm文件的属性实现
    net.sf.hibernate.metadata.*
    PO的Meta实现
    net.sf.hibernate.odmg.*
    ODMG是一个ORM标准,这个包是ODMG标准的实现类
    net.sf.hibernate.persister.*
    核心包,实现持久对象和表之间的映射
    net.sf.hibernate.proxy.*
    Proxy和Lazy Loading支持
    net.sf.hibernate. ps.*
    该包是PreparedStatment Cache
    net.sf.hibernate.sql.*
    生成JDBC sql语句的包
    net.sf.hibernate.test.*
    测试类,你可以用junit来测试Hibernate
    net.sf.hibernate.tool.hbm2ddl.*
    用hbm配置文件生成DDL
    net.sf.hibernate.transaction.*
    Hibernate Transaction实现类
    net.sf.hibernate.type.*
    Hibernate中定义的持久对象的属性的数据类型
    net.sf.hibernate.util.*
    一些工具类,作用比较散
    net.sf.hibernate.xml.*
    XML数据绑定

    Hibernate的配置

    最终项目的结构如下

    第一步:开始配置hibernate需要导入许多个包,这个需要上官网下载,下载最新版就可以,下载地址:http://hibernate.org/orm/

    下载解压后在里面找到这个路径将以下目录下的全部jar包导入你的eclipse中创建的lib中,并引入

    第二步:创建持久化类,并配置其.hbm.xml文件

    先解释一下什么叫持久化类

      持久化是将程序数据在持久状态和瞬时状态间转换的机制。
      持久化类(persistent class):可以被hibernate保存到数据库,并且从数据库读取的类。
    1、持久化类:是指其实例需要被Hibernate持久化到数据库中的类。持久化类符合JavaBean的规范,包含一些属性,以及与之对应的getXXX()和setXXX()方法。
    注:
    (1)get/set方法必须符合特定的命名规则,get和set后面紧跟属性的名字,并且属性名的首字母为大写。
    (2)name属性的get方法为getName(),如果写成getname()或getNAME()会导致Hibernate在运行时抛出以下异常:
    net.sf.hibernate.PropertyNotFoundException:Could not find a getter for porperty name in class mypack XXX
    2、如果持久化类的属性为boolean类型,那么他的get方法名即可以用get作为前缀,也可以用is作为前缀。
    3、持久化类有一个id属性,用来唯一标识Account类的每一个对象。这个id属性被称为对象标示符(OID,Object Identifier),通常它都用整数表示。
    4、Hibernate要求持久化类必须提供一个不带参的默认构造方法,在程序运行时,Hibernate运用Java反射机制,调用java.Lang.raflect.Constructor.newInstance()方法来构造持久化类的实例。

    通俗点说就是,数据库中的表的字段是咋样持久化的属性就咋样,表名就是类名,之后可以系统生成set和get方法

    我先创建User的持久化类:User.java

    public class User {
        private int id;
        private String username;
        private String passowrd;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassowrd() {
            return passowrd;
        }
        public void setPassowrd(String passowrd) {
            this.passowrd = passowrd;
        }
    
    }

    在创建其.hbm.xml文件,这个文件位置跟持久化类的位置一样,同级

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!-- Generated 2017-8-25 9:27:23 by Hibernate Tools 5.2.3.Final -->
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping >
        <class name="com.bean.User" table="user">
            <id name="id" type="java.lang.Integer">
                <generator class="native"/>
            </id>
                <property  name="username"  type="java.lang.String"/>
                <property name="passowrd"  type="java.lang.String"/>
      </class>
    </hibernate-mapping>

    第三步:配置hibernate.cfg.xml文件

    这个文件的位置是在src下,与包同级

    <?xml version='1.0' encoding='utf-8'?>
    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='utf-8'表明XML文件的编码方式,不能把第一行给占了-->   
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
      <!--声明Hibernate配置文件的开始--> 
    <hibernate-configuration>
       <!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->   
        <session-factory>
            <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->   
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <!--设置数据库的连接jdbc:mysql:///zhou,其中localhost表示mysql服务器名称,此处为本机,zhou是数据库名-->  
            <property name="connection.url">jdbc:mysql:///zhou</property>
             <!--连接数据库的用户名-->   
            <property name="connection.username">root</property>
             <!--连接数据库的密码-->   
            <property name="connection.password">123456</property>
         <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->   
            <property name="show_sql">true</property>
            <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。默认是使用这种方言-->   
              <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>
            <!--update当项目启动时更新数据库,create是启动时创建依据持久类的数据库表 -->
            <property name="hbm2ddl.auto">update</property>
            <!-- XML注入方法 -->
          <mapping resource="com/bean/User.hbm.xml"/> 
            <!-- 注解(annotation)注入方法 -->
          <!--     <mapping class="com.bean.User"/> -->
        </session-factory>
    </hibernate-configuration>

    第四步:编写测试,看是否流程通畅

    public static void main(String[] args) {
            // TODO Auto-generated method stub
            //读取配置文件的信息
            Configuration config=new Configuration().configure();
            //创建session的工厂模式
            SessionFactory factory=config.buildSessionFactory();
            //开启session
            Session session=    factory.openSession();
            //开启事务
            Transaction transaction=    session.beginTransaction();
            User user=    session.find(User.class, 1);
            System.out.println(user.getUsername()+"---"+user.getPassowrd());
            //提交事务
            transaction.commit();
            //关闭这两个
            session.close();
            factory.close();
            
        }

    这些就是hibernate的最基本的配置及流程的通畅

    【版本声明】本文为博主原创文章,转载请注明出处。

  • 相关阅读:
    4. 归并排序
    3. 堆排序
    2. 希尔排序
    1. 选择排序、插入排序、冒泡排序
    1. 拓扑排序
    8. 最大堆
    7. B+树
    6. B树
    5. 二叉查找树、平衡二叉树、红黑树的效率比较
    4. 红黑二叉树
  • 原文地址:https://www.cnblogs.com/zhouguanglin/p/7435483.html
Copyright © 2020-2023  润新知