前言:学习的过程在于不断的总结与思考,这里记下笔者在学习过程中,所遇到的知识点,增加对框架掌握的熟悉程度。


1.环境的搭建

通过maven可以轻松搭建hibernate的环境。

 <properties>
<hibernate.version>5.1.12.Final</hibernate.version>
<junit.version>4.12</junit.version>
<mysql.version>5.1.38</mysql.version>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.25</slf4j.version>
</properties> <dependencies>
<!-- hibernate依赖-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency> <!-- 数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency> <!-- 测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>

2.hibernate中实体类的映射配置文件

其名称和位置没有特别要求,笔者偏向专门的一个包,来放置映射文件。其命名规则为:

实体类名.hbm.xml,其配置文件中为dtd约束,需要引入相应的约束条件:

实体类映射配置文件需引入:

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

hibernate核心配置文件需引入:

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

hibernate核心配置文件,位置和名称都固定

位置:src下

名称:hibernate.cfg.xml

3.hibernate核心配置文件主要配置

  <session-factory>
<!-- 主要三部分配置-->
<!-- 1.配置数据库信息,必须的-->
<property name="connection.url">jdbc:mysql://127.0.0.1:3307/hibernatestudy?useUnicode=true&amp;characterEncoding=UTF-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password"></property> <!-- 2.配置hibernate信息,可选的--> <!-- 输出底层的sql语句-->
<property name="hibernate.show_sql">true</property> <!-- 对底层sql进行格式化-->
<property name="hibernate.format_sql">true</property> <!--配置数据的方言,如mysql中limit
oracle的rownum-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置本地线程绑定的session-->
<property name="hibernate.current_session_context_class">thread</property> <!-- 3.把映射文件配置到核心文件中,必须的-->
<!-- 有多个xml文件就添加多个-->
<mapping resource="com/xxx/domain/hbm/xml/User.hbm.xml"/> </session-factory>

4.实体类映射文件的配置

 <!--1.配置类和表对应
class标签
name属性:实体类的全路径
table属性:数据库表名称
-->
<class name="com.xxx.domain.User" table="t_user"> <!-- 2.配置类的id和表的id对应
hibernate要求实体类有一个属性唯一值
hibernate要求表字段作为唯一值
相当于主键的配置
-->
<!-- id标签
name属性:实体类里面id的属性名称
column属性:表的字段名称
-->
<id name="uid" column="uid">
<!-- 配置id的增长策略
native表示表的主键为自动增长
-->
<!--<generator class="native"/>-->
<generator class="uuid"/> <!--uuid模式的自动生成-->
</id>
<!-- 配置其他属性值和表对应-->
<property name="username" column="t_username"/>
<property name="password" column="t_password"/>
<property name="address" column="t_address"/>
</class>

5.hibernate中实体类对象的三种状态

瞬时态:实体类对象与session没有关联,如刚创建的对象

持久态:实体类对象与session有关联,并且拥有数据库标识(拥有主键值)

脱管态:当持久态对象的session关闭后,此时该实体类对象就是脱管态

在session的saveOrUpdate操作时,当实体类对象为瞬时态时,做save操作,当实体类对象为其他两种状态时,做update操作。

6.hibernate缓存

缓存是指为了降低应用程序对物理数据源访问的频次从而提高应用程序的运行性能的一种策略。

hibernate一级缓存:

hibernate中一级缓存默认打开,使用范围为session范围,从session创建到session关闭,一级缓存中,存储的数据必须是持久态的数据对象。

hibernate二级缓存:

hibernate中二级缓存默认不开启,需要进行配置,可以redis代替

一级缓存的执行过程:

在取数据的时候,第一次从一级缓存中查询,如果没有值,则从数据库中获取,当查询出结果后,放入一级缓存,当第二次查询相同结果时,则从一级缓存中得到结果。

一级缓存的特性:

做数据修改时,持久态实体类对象会自动更新到数据库。

在一级缓存创建的同时,会创建快照区,在修改持久态实体类对象时,只会修改一级缓存的值,不会修改快照区中的值。

在提交事务时,会比较一级缓存和快照区的值,如果两个值不相同,则会更新数据到数据库中,如果两个值相同,则不会将数据更新到数据库中。

7.hibernate中session的绑定

绑定本地session需在hibernate核心配置文件中进行配置,在操作本地绑定的session时,不需要对其进行关闭,在该线程执行完毕后,该session会自动关闭。

绑定本地session的配置语句:

<property name="hibernate.current_session_context_class">thread</property>

8.hibernate中查询API

hql查询:hibernate query language

hql与sql语句非常的相似,hql操作的是实体类和其属性,sql操作的是数据表和字段(实体类对应表,属性对应字段)

使用hql语句,需要使用Query对象,通过session创建,一些基本的查询方式:

查询所有:from 实体类名称

条件查询:from 实体类名称 where 属性名称1=?and 属性名称2=?

然后通过Query对象的setParameter(int,object)对占位符进行值得设置,注意占位符?的位置值从0开始

排序查询:from 实体类名称 order by 属性值 asc(desc)

分页查询:(hibernate中不识别limit)from 实体类名称,然后通过Query对象的相关方法进行分页数据的设置

setFirstResult设置开始记录位置,setMaxResults设置每页显示的数据条数

注:开始记录位置计算公式(当前页-1)*每页显示的记录数

投影查询:查询部分字段的值,如 select columnname from tablename

hql语句的写法:select 属性值名称1,属性值名称2 from 实体类名称,hql中不支持select *。

聚函数的使用:select count(*) from 实体类名称,注意使用Query对象的uniqueResult方法的使用,如果是查询总数,注意Long对象的转换。

QBC查询:Query By Criteria

QBC查询不需要写任何语句,直接使用Criteria对象提供的相关方法,进行操作即可,其操作的也是实体类。

QBC中条件查询,需要使用Restrictions对象进行操作

QBC中分页查询和hql有点类似利用setFirstResult设置开始记录位置,setMaxResults设置每页显示的数据条数

本地sql查询

本地sql查询就是通过原生sql语句进行数据库的查询,需要使用SQLQuery对象进行相关操作。


by Shawn chen,2018.2.28,下午。

Hibernate知识点总结(一)的更多相关文章

  1. Hibernate知识点小结(三)-->一对多与多对多配置

    一.多表关系与多表设计 1.多表关系        一对一:            表的设计原则(分表原则):                优化表的性能                基于语意化分表 ...

  2. Hibernate知识点整理

    一, Hibernate 介绍: Hibernate 只是一个将持久化类与数据库表相映射的工具,每个持久化类实例均对应于数据库表中的一个数据行而已.用户只需直接使用面向对象的方法操作此持久化类实例,即 ...

  3. Hibernate 知识点梳理

    1.对持久化对象的要求 1)提供一个无参构造器 2)提供一个标识属性,如id,通常映射为数据库表的主键字段. 3)为持久化类的字段提供get.set方法. 注:但不一定所有字段都这么做,对于不提供ge ...

  4. hibernate知识点理解

    1.只有业务逻辑层出现的问题? 1.切换数据库麻烦 2.sql编写起来麻烦 3.我们的程序员不需要关注数据库,只希望关心业务本身 2.hibernate的好处 1.程序员只关心业务逻辑,使角色更加清楚 ...

  5. Hibernate知识点总结

    Hibernate配置二级缓存:  --- 使用EhCache 1.hibernate.cfg.xml中配置二级缓存 <hibernate-configuration>   <ses ...

  6. Hibernate 知识点复习

    核心接口 1  Configuration接口负责配置并启动Hibernate,创建SessionFactory对象 2  SessionFactory接口负责初始化Hibernate.它充当数据存储 ...

  7. Hibernate知识点小结汇总

    Hibernate部分 1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复 ...

  8. Hibernate知识点小结(四)--JPA

    一.jpa的简介和入门 JPA:Java Persistence API,接口规范    Hinernate内部为JPA规范提供实现        开发步骤(EntityManager):       ...

  9. Hibernate知识点小结(二)

    一.持久化对象和标识符    1.持久化类        配置完关系后,操作的实体对应的类,成为持久化类 (Customer) 2.持久化类标识符(oid:object id)        3.持久 ...

随机推荐

  1. 推荐写作平台gitbook——让我们换一种形式写作

    https://www.gitbook.com/ 我一直用这个平台进行写作.目前有两本电子书可以供大家阅读,分别如下 Office 365 开发入门指南 https://www.gitbook.com ...

  2. c# 接口的协变和逆变

    如果派生类只是用于输出值,那么这种结构化的委托有效性之间的常数关系叫做协变 就是创建一个派生类委托对象 让派生类赋值给基类对象 协变关键字out 对期望传入基类时允许传入派生对象的特性叫逆变  逆变关 ...

  3. 菜鸟入门【ASP.NET Core】14:MVC开发:UI、 EF + Identity实现、注册实现、登陆实现

    前言 之前我们进行了MVC的web页面的Cookie-based认证实现,接下来的开发我们要基于之前的MvcCookieAuthSample项目做修改. MvcCookieAuthSample项目地址 ...

  4. eclipse下SpringMVC+Maven+Mybatis+MySQL项目搭建

    这篇文章主要讲解使用eclipse对Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建过程,包括里面步骤和里面的配置文件如何配置等等都会详细说明. 接下来马上进入项目搭建 ...

  5. git error: RPC failed; result=56, HTTP code = 200

    突然发现git pull 后出现几次都无果,百度后, 发现是curl的postBuffer 默认值较小的原因,配置下这个值,就不会出现该错误了.解决如下: git config --global ht ...

  6. 软件测试工程师这样面试,拿到offer的几率是80%

    面试难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:“面试官为什么会这样问?他希 ...

  7. 今天给大家补充一下 background 用法

    补充一个知识点 1,浏览器默认字体大小是font-size:16px:谷歌最小字体是10px,其他浏览器是12px 2. 选择器 通配符选择器     *   表示 3.background  背景 ...

  8. awk、nawk、mawk、gawk的简答介绍

    awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出(即管道).它支持用户自定义函数和 动态正则表达式等先进功能,是linu ...

  9. Elasticsearch系列(2):安装Elasticsearch(Linux环境)

    系统环境 操作系统:CentOS 6.9 Elasticsearch:6.2.2 Filebeat:6.2.2(收集IIS日志) Kibana:6.2.2 Java:Java 8 注意:elk最好选择 ...

  10. 汇编语言--微机CPU的指令系统(五)(转移指令)

    (9)转移指令 转移指令是汇编语言程序员经常使用的一组指令.在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所 ...