Hibernate第一天 Hibernate快速入门

1、需求介绍
一个小案例,实现保存一个实体客户到数据库里面。
2、开发包和版本介绍
     

下载网址:http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/

       页面显示如下图:
开发包目录解压文件,如下图所示:
        

       documentation文件夹:存放Hibernate的相关文档,包括参考文档的API文档。

       lib文件夹:存放Hibernate编译和运行所依赖的JAR包。其中required子目录下包含了运行Hibernate5项目必须的JAR包。

       project文件夹:存放Hibernate各种相关的源代码。

搭建hibernate开发环境
   第一步把必备的jar包考入
       数据库驱动包
  
    Hibernate/lib/requied/*.jar
 
  Logj.4jar包
 
第二步、创建数据库和实体类
   

持久化类是应用程序中的业务实体类,这里的持久化是指类的对象能够被持久化保存到数据库中。Hibernate使用普通Java对象(Plain OldJava Object),即POJO的编程模式来进行持久化。POJO类中包含的是与数据库表相对应的各个属性,这些属性通过gettersetter方法来访问,对外部隐藏了内部的实现细节。下面就来编写Customer持久化类。

在项目src目录下,创建cn.itcast.domain包,并在包中创建实体类Customer(对应数据库表cst_customer),Customer类包含与cst_customer数据表字段对应的属性,以及相应的getXxx ()setXxx ()方法。

   

/*创建客户表*/

CREATE TABLE `cst_customer` (

  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',

  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',

  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',

  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',

  `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',

  `cust_address` varchar(128) DEFAULT NULL COMMENT '客户联系地址',

  `cust_phone` varchar(64) DEFAULT NULL COMMENT '客户联系电话',

  PRIMARY KEY (`cust_id`)

) ENGINE=InnoDBAUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


创建实体类
   

public class Customer implements Serializable {

 

    private Long custId;

    private String custName;

    private String custSource;

    private String custIndustry;

    private String custLevel;

    private String custAddress;

    private String custPhone;

   

    public Long getCustId() {

        return custId;

    }

    public void setCustId(Long custId) {

        this.custId = custId;

    }

    public String getCustName() {

        return custName;

    }                  

    public void setCustName(String custName) {

        this.custName = custName;

    }

    public String getCustSource() {

        return custSource;

    }

    public void setCustSource(String custSource) {

        this.custSource = custSource;

    }

    public String getCustIndustry() {

        return custIndustry;

    }

    public void setCustIndustry(String custIndustry) {

        this.custIndustry = custIndustry;

    }

    public String getCustLevel() {

        return custLevel;

    }

    public void setCustLevel(String custLevel) {

        this.custLevel = custLevel;

    }

    public String getCustAddress() {

        return custAddress;

    }

    public void setCustAddress(String custAddress) {

        this.custAddress = custAddress;

    }

    public String getCustPhone() {

        return custPhone;

    }

    public void setCustPhone(String custPhone) {

        this.custPhone = custPhone;

    }

    @Override

    public String toString() {

        return "Customer [custId=" + custId + ", custName=" + custName + ", custSource=" + custSource

                + ", custIndustry=" + custIndustry + ", custLevel=" + custLevel + ", custAddress=" + custAddress

                + ", custPhone=" + custPhone + "]";

    }

   

   

}      


第三步、编写映射配置文件XML
   

实体类Customer目前还不具备持久化操作的能力,而Hibernate需要知道实体类Customer映射到数据库Hibernate中的哪个表,以及类中的哪个属性对应数据库表中的哪个字段,这些都需要在映射文件中配置。

在实体类Customer所在的包中,创建一个名称为Customer.hbm.xml的映射文件,在该文件中定义了实体类Customer的属性是如何映射到cst_customer表的列上的。

<?xmlversion="1.0"encoding="UTF-8"?>

<!-- 导入约束:dtd约束

位置:在Hibernate的核心jar包中名称为hibernate-mapping-3.0.dtd

明确该文件中的内容:

  1.     实体类和表的对应关系

    实体类中属性和表的字段的对应关系

-->

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mappingpackage="com.itheima.domain"><!-- package属性用于设定包的名称,接下来该配置文件中凡是用到此包中的对象时都可以省略包名 -->

    <!-- class标签

            作用:建立实体类和表的对应关系

            属性:

                name:指定实体类的名称

                table:指定数据库表的名称

     -->

    <classname="Customer"table="cst_customer">

        <!-- id标签

             作用:用于映射主键

             属性:

                name:指定的是属性名称。也就是get/set方法后面的部分,并且首字母要转小写。

                column:指定的是数据库表的字段名称

        -->

        <idname="custId"column="cust_id">

        <!-- generator标签:

            作用:配置主键的生成策略。

            属性:

                class:指定生成方式的取值。

                取值之一:native。使用本地数据库的自动增长能力。

                mysql数据库的自动增长能力是让某一列自动+1。但是不是所有数据库都支持这种方式。

             -->

            <generatorclass="native"></generator>

        </id>

        <!-- property标签:

                作用:映射其他字段

                属性:

                    name:指定属性的名称。和id标签的name属性含义一致

                    column:指定数据库表的字段名称

        -->

        <propertyname="custName"column="cust_name"></property>

        <propertyname="custLevel"column="cust_level"></property>

        <propertyname="custSource"column="cust_source"></property>

        <propertyname="custIndustry"column="cust_industry"></property>

        <propertyname="custAddress"column="cust_address"></property>

        <propertyname="custPhone"column="cust_phone"></property>

    </class>

</hibernate-mapping>  
第四步、编写主配置文件
  

Hibernate的映射文件反映了持久化类和数据库表的映射信息,而Hibernate的配置文件则主要用来配置数据库连接以及Hibernate运行时所需要的各个属性的值。在项目的src下创建一个名称为hibernate.cfg.xml的文件

<?xmlversion="1.0"encoding="UTF-8"?>

<!-- 导入dtd约束:

位置:在核心jar包中的名称为hibernate-configuration-3.0.dtd

-->

<!DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate ConfigurationDTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<!-- 配置SessionFactory

    SessionFactory就是一个工厂,用于生产Session对象的。

    Session就是我们使用hibernate操作数据库的核心对象了。

    明确:

        它和我们Web阶段的HttpSession没一点关系。

        此配置文件中的内容不需要背,很多配置都是可以在开发包中找到的。

        但是要求必须知道:

        创建SessionFactory由三部分组成,缺一不可。要知道是哪三部分

            1、连接数据库的基本信息

            2hibernate的基本配置

            3、映射文件的位置

        找配置文件的key都是在hibernate的开发包中project文件夹下的etc目录中的hibernate.properties

    -->

    <session-factory>

        <!-- 1、连接数据库的基本信息 -->

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

        <propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/day36_ee48_hibernate</property>

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

        <propertyname="hibernate.connection.password">1234</property>

        <!-- 2hibernate的基本配置 -->

        <!-- 数据库的方言 -->

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

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

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

        <!-- 是否格式化SQL语句 -->

        <propertyname="hibernate.format_sql">true</property>

        <!-- 是否让hibernate根据表结构的变化来生成DDL语句

             DDL:数据定义语言

             hibernate可以根据映射文件来为我们生成数据库的表结构。

             但是他不能生成数据库。

            hbm2ddl.auto的取值

                * none:不用Hibernate自动生成表.

                * create:每次都会创建一个新的表.(测试)

                * create-drop:每次都会创建一个新的表,执行程序结束后删除这个表.(测试)

                * update:如果数据库中有表,使用原来的表,如果没有表,创建一个新表.可以更新表结构。

                * validate:只会使用原有的表.对映射关系进行校验.

 

        -->

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

        <!-- 3、映射文件的位置 -->

        <mappingresource="com/itheima/domain/Customer.hbm.xml"/>

    </session-factory>

</hibernate-configuration >
   第五、实现保存操作   

在项目中新建一个名称为cn.itcast.test的包,然后在包中建立一个名为HibernateDemo1.java的文件,该文件是用来测试的类文件。
  第六、运行程序
  第七、入门案例的执行过程
   首先创建Configuration类的实例,并通过它来读取并解析配置文件hibernate.cfg.xml。然后创建SessionFactory读取解析映射文件信息,并将Configuration对象中的所有配置信息拷贝到SessionFactory内存中。接下来,打开Session,让SessionFactory提供连接,并开启一个事务,之后创建对象,向对象中添加数据,通过session.save()方法完成向数据库中保存数据的操作。最后提交事务,并关闭资源

第八、映射文件的配置

该文件用于向Hibernate提供持久化类到关系型数据库的映射,每个映射文件的的结构基本都是相同的,其普遍的代码形式如下所示。


映射文件是一个XML文件,命名通常是实体类名.hbm.xml
  
第九、核心配置
 

    

Hibernate的配置文件,包含了连接持久层与映射文件所需的基本信息,其配置文件有两种格式,具体如下:

l  一种是properties属性文件格式的配置文件,它使用键值对的形式存放信息,默认文件名称为hibernate.properties

l  另一种是XML格式的配置文件,XML配置文件的默认名称为hibernate.cfg.xml

上述两种格式的配置文件是等价的,具体使用哪个可以自由选择。XML格式的配置文件更易于修改,配置能力更强,当改变底层应用配置时不需要改变和重新编译代码,只修改配置文件的相应属性即可,而properties格式的文件则不具有此优势,因此,在实际开发项目中,大多数情况会使用XML格式的配置文件。下面将对XML格式的配置文件进行详细介绍。

hibernate.cfg.xml配置文件一般在开发时会放置在src的源文件夹下,发布后,该文件会在项目的WEB-INF/classes路径下。配置文件的常用配置信息如下所示。

在上述代码中,首先进行了xml声明,然后是配置文件的dtd信息,该信息同样可以在核心包hibernate-core-5.0.7.Final.jar下的org.hibernate包中的hibernate-configuration-3.0.dtd文件中找到,读者只需要复制过来用即可,不需要刻意记忆。

Hibernate配置文件的根元素是hibernate-configuration,该元素包含子元素session-factory,在session-factory元素中又包含多个property元素,这些property元素用来对Hibernate连接数据库的一些重要信息进行配置。例如,上面的配置文件中,使用了property元素配置了数据库的方言、驱动、URL、用户名、密码等信息。最后通过mapping元素的配置,加载出映射文件的信息。
                                Hibernate配置文件的一些常用属性名称及用途,如表所示。
                                        
名称 用途
hibernate.dialet 数据方言
hibernate.connecton.driver.class 数据库驱动连接
hibernate.connection.url 数据库用户名
hibernate.connection.password 数据库密码
hibernate.show_sql 数据库在控制台输sql语句
hibernate.format_sql     格式化控制台输出sql语句
hibernate.hbm2ddl.auto                                                                           
 当SessionFactory创建时是否根据映射文件自
动验证表结构或自动创建、自动更新数据库表结构。
该参数的取值为:validateupdatecreatecreate-drop
hibernate.connection.autocommit 事务是否自动提交
                        






猜你喜欢

转载自blog.csdn.net/zhanshixiang/article/details/80481167