Hibernate起步——使用步骤和配置文件的详解

目录

一、Hibernate简介

1、项目中框架的体系结构

2、ORM框架

3、什么是hibernate

4、主流的ORM框架

5、Hibernate优点

二、Hibernate的简单使用

1、使用步骤

2、创建数据库

3、导入jar包依赖

三、API详解

1、Configuration配置对象

2、SessioinFactory工厂

3、Session会话

3、Transaction事务

4、Session的方法

5、Query分页查询和返回多行数据

6、Criteria查询对象

7、SQLQuery

8、Hibernate工具类抽取

四、Hibernate配置文件详解

1、配置文件

2、映射文件

3、实体类的编写规则和OID讲解

4、SQL、Hibernate和对象类型

5、Hibernate主键的生成策略

6、Hibernate的动态插入、动态更新和type的使用


一、Hibernate简介

1、项目中框架的体系结构

2、ORM框架

3、什么是hibernate

4、主流的ORM框架

5、Hibernate优点

二、Hibernate的简单使用

1、使用步骤

2、创建数据库

CREATE DATABASE db_hibernate;
USE db_hibernate;
CREATE TABLE t_user(
 id INT AUTO_INCREMENT PRIMARY KEY,
 username VARCHAR(30),
 pwd VARCHAR(30)
);

3、导入jar包依赖

创建一个web项目,导入依赖

4、Hibernate核心配置文件

 hibernate映射文件:

测试:

常见问题:未知实体,由于没有配置文件的映射

IDEA下创建一个maven项目,依次实现下述步骤:

项目依赖:

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.3.7.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

创建实体类对象

创建hibernate配置文件:包括数据库连接配置等

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hibernate- configuration是连接配置文件的根元素 -->
<hibernate-configuration>
    <session-factory>
        <!-- 指定连接数据库所用的驱动 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定连接数据库的url,hibernate连接的数据库名 -->
        <property name="connection.url">jdbc:mysql://localhost/db_hibernate</property>
        <!-- 指定连接数据库的用户名 -->
        <property name="connection.username">vbfdt</property>
        <!-- 指定连接数据库的密码 -->
        <property name="connection.password">rsafst</property>
        <!-- 指定连接池里最大连接数 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <!-- 指定连接池里最小连接数 -->
        <property name="hibernate.c3p0.min_size">1</property>
        <!-- 指定连接池里连接的超时时长 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 指定连接池里最大缓存多少个Statement对象 -->
        <property name="hibernate.c3p0.max_statements">100</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.validate">true</property>
        <!-- 指定数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <!-- 根据需要自动创建数据表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 显示Hibernate持久化操作所生成的SQL -->
        <property name="show_sql">true</property>
        <!-- 将SQL脚本进行格式化后再输出 -->
        <property name="hibernate.format_sql">true</property>

        <!-- 罗列所有的映射文件 -->
        <mapping resource="com/dzg/domain/User.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

实体类的映射文件(类似于MyBatis文件中的实体类映射文件,只是这里不用写sql语句)

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
    <hibernate-mapping>一般不去配置,采用默认即可。
    schema:指定映射数据库的schema(模式/数据库),如果指定该属性,则表名会自动添加该schema前缀
    package:指定包前缀 指定持久化类所在的包名 这样之后calss子元素中就不必使用全限定性的类名
    default-cascade="none":默认的级联风格,表与表联动。
    default-lazy="true":默认延迟加载
 -->
<hibernate-mapping>
    <!--
        <class>:使用class元素定义一个持久化类。
        name="cn.javass.user.vo.UserModel":持久化类的java全限定名;
        table="tbl_user":对应数据库表名,默认持久化类名作为表名;
        proxy:指定一个接口,在延迟装载时作为代理使用,也可在这里指定该类自己的名字。
        mutable="true":默认为true,设置为false时则不可以被应用程序更新或删除,等价于所有<property>元素的update属性为false,表示整个实例不能被更新。
        dynamic-insert="false":默认为false,动态修改那些有改变过的字段,而不用修改所有字段;
        dynamic-update="false":默认为false,动态插入非空值字段;
        select-before-update="false":默认为false,在修改之前先做一次查询,与用户的值进行对比,有变化都会真正更新;
        optimistic-lock="version":默认为version(检查version/timestamp字段),取值:all(检查全部字段)、dirty(只检查修改过的字段);
                                   none(不使用乐观锁定),此参数主要用来处理并发,每条值都有固定且唯一的版本,版本为最新时才能执行操作;
        如果需要采用继承映射,则class元素下还会增加<subclass.../>元素等用于定义子类。
     -->
    <class name="com.dzg.domain.User" table="user" >

        <!--
            <id>:定义了该属性到数据库表主键字段的映射。
            type  指定该标识属性的数据类型,该类型可以是Hibernate的内建类型,也可以是java类型,如果是java类型则需要使用全限定类名(带包名)。该属性可选,如果没有指定类型, 则hibernate自行判断该标识属性数据类型。通常建议设定。
            name="userId":标识属性的名字;
            column="userId":表主键字段的名字,如果不填写与name一样;

         -->
        <id name="id" column="id">
            <!-- <generator>:指定主键由什么生成,推荐使用uuid,assigned指用户手工填入。设定标识符生成器
            适应代理主键的有:
                increment:有Hibernat自动以递增的方式生成标识符,每次增量1;
                identity:由底层数据库生成标识符,前提条件是底层数据库支持自动增长字段类型。(DB2,MYSQL)
                uuid:用128位的UUID算法生成字符串类型标识符。
            适应自然主键:
                assigned:由java程序负责生成标识符,为了能让java应用程序设置OID,不能把setId()方法设置成private类型。
                让应用程序在save()之前为对象分配一个标识符。相当于不指定<generator.../>元素时所采用的默认策略。
                应当尽量避免自然主键
            -->
            <!--<generator class="uuid"/>-->
            <generator class="native"/>

        </id>

        <!--
            <version/>:使用版本控制来处理并发,要开启optimistic-lock="version"和dynamic-update="true"。
            name="version":持久化类的属性名,column="version":指定持有版本号的字段名;
         -->
        <!--<version name="version" column="version"/>-->

        <!--
            <property>:为类定义一个持久化的javaBean风格的属性。
            name="name":标识属性的名字,以小写字母开头;
            column="name":表主键字段的名字,如果不填写与name一样;
            update="true"/insert="true":默认为true,表示可以被更新或插入;
            access="property/field":指定Hibernate访问持久化类属性的方式。默认property。property表示使用setter/getter方式。field表示运用java反射机制直接访问类的属性。
            formula="{select。。。。。}":该属性指定一个SQL表达式,指定该属性的值将根据表达式类计算,计算属性没有和它对应的数据列。
            formula属性允许包含表达式:sum,average,max函数求值的结果。
            例如:formula="(select avg(p.price) from Product P)"
         -->
        <property name="username" column="username" />
        <property name="password" column="password"/>

        <!--
            组件映射:把多个属性打包在一起当一个属性使用,用来把类的粒度变小。
            <component name="属性,这里指对象">
                 <property name="name1"></property>
                 <property name="name2"></property>
             </component>
         -->

        <!--
            <join>:一个对象映射多个表,该元素必须放在所有<property>之后。
            <join table="tbl_test:子表名">
                <key column="uuid:子表主键"></key>
            <property name="name1:对象属性" column="name:子表字段"></property>
        </join>
         -->

    </class>
</hibernate-mapping>

测试实现向数据库中添加一个用户数据

@Test
    public void test1(){
        //保存用户数据
        //1、获取核心配置文件对象
        Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
        //2、创建会话工厂
        SessionFactory factory = cfg.buildSessionFactory();
        //3、创建会话
        Session session = factory.openSession();
        // 开启事务
        Transaction transaction = session.getTransaction();
        transaction.begin();
        //保存[直接把对象保存到数据库]
        User user = new User("hibernate","orm");
        session.save(user);
        //提交事务
        transaction.commit();
        //4、关闭会话
        session.close();
        //5、关闭工厂,释放资源
        factory.close();

    }

三、API详解

1、Configuration配置对象

 

配置对象讲解,

2、SessioinFactory工厂

3、Session会话

session会话的获取:

3、Transaction事务

默认情况需要手动去写

4、Session的方法

save

load方法也是获取数据,当不存在某个数据的时候,会报错;

get和load的区别

5、Query分页查询和返回多行数据

6、Criteria查询对象

7、SQLQuery

8、Hibernate工具类抽取

静态代码块在调用类的时候,会执行且只执行一次;

四、Hibernate配置文件详解

1、配置文件

 

2、映射文件

3、实体类的编写规则和OID讲解

4、SQL、Hibernate和对象类型

   hibernate是面向对象的,他希望里面的所有属性都是对象类型的

5、Hibernate主键的生成策略

6、Hibernate的动态插入、动态更新和type的使用

注意:在springboot与hibernate整合时,pojo层对应的实体类应当添加@Entity的注解

          同时在dao层中的类继承extends JpaRepository<T,表格主键类型的包装类>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值