博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate_01
阅读量:5875 次
发布时间:2019-06-19

本文共 6552 字,大约阅读时间需要 21 分钟。

hot3.png

JavaEE架构介绍

分层

  • 客户端
  • Web层
  • 业务层
  • 持久层

ssh对应的层级

  • hibernate:持久层技术
  • struts2: Web层技术
  • spring: 业务层,跨所有层的整合技术

技术分析图

161557_rl5P_3669094.jpg

Hibernate相关概念

介绍

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

Hibernate帮助程序员通过操作对象的方式来操作数据库表记录

ORM的概念

ORM:Object Relational Mapping.

是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的–“虚拟对象数据库”。

O: Object对象,面向对象语言领域,Java中的JavaBean

R: 关系数据库领域的Relational(数据库中表的结构)

M: 映射Mapping(XML的配置文件)

161557_06gz_3669094.jpg

优点

  1. Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码
  2. Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现,它很大程度的简化了dao层编码工作
  3. Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系

Hibernate环境搭建步骤

1. 下载Hibernate环境资源

2. 导入Hibernate环境必要的jar包

  1. hibernate的必须jar
  2. 数据库驱动的jar

3. 创建数据库表结构

drop database hibernate_01;create database hibernate_01;use hibernate_01;CREATE TABLE `hibernate_1`.`t_user`(	`u_id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,	`u_name` VARCHAR(32) NOT NULL ,	`u_age` INT(16));

4. 编写数据bean

public class User {	private Integer u_id;	private String u_name;	private int u_age;}

注意:

需要给数据bean中对应表中主键的属性设置为对象类型,且必须实现序列化接口。
需要提供getter和setter方法。

5. 配置映射文件

映射文件的作用就是将数据bean和表结构建立关系

  1. 命名规范问题:hibernate命名以类名.hbm.xml方式命名。
  2. 新建位置规范:通常和java类放到同一个包中。
  3. dtd头的导入: org.hibernate 的包中有对应的dtd头。
  4. 在配置关系过程中,几乎所有的name属性指向的都是Java类,column和table指向数据库表。

6. 配置核心启动文件

org.hibernate.dialect.MySQLDialect
com.mysql.jdbc.Driver
jdbc:mysql:///hibernate_setup
root
123456
  1. 命名规范要求:以hibernate.cfg.xml方式命名
  2. 新建位置规范:放到src目录中,也就是classpath路径(类根路径)
  3. dtd头的导入: org.hibernate 的包中有对应的dtd头。

7. 编写程序访问数据库

// 新建一个Hibernate的配置对象,其实就是去模拟hibernate.cfg.xmlConfiguration configuration = new Configuration();// 加载解析hibernate.cfg.xmlconfiguration.configure();// 创建一个SessionfactorySessionFactory factory = configuration.buildSessionFactory();// 通过工厂创建一个和数据库连接的会话Session session = factory.openSession();// 开启事务Transaction transaction = session.beginTransaction();User user = new User();user.setU_name("张三疯");user.setU_age(11);//不需要再通过sql去保存用户,直接用对象保存用户session.save(user);transaction.commit();	//释放资源session.close();

Hibernate工具

下载JBoos Tools

下载对应版本JBoss Tools

eclipse安装插件

  1. Help–>Install New Software–>add
  2. 在打开的对话框中Location后点击Archive,选择下载的JBoss Tools的压缩包
  3. 在对话框中只勾选Hibernate Tools
  4. 下一步直到完成重启

工具开发提供的便利

  1. 自动生成核心启动文件
  2. 自动生成映射关系

Hibernate映射配置

class标签

  1. 用来描述Java类和数据库表的对应关系
  2. name属性:Java类的类名
  3. table属性:数据库表的表名

id标签

  • 用来描述java类中属性和数据库表的主键的关系
  • name属性:java类中属性名称
  • type属性:描述java类中属性的类型,hibernate会根据此类型生成对应数据库列的数据库类型
  • column属性或标签:数据库表中的主键的列名
  • generator标签:描述主键的生成策略

properties标签

  • 用来描述java类中其他属性和数据库表的其他列的关系
  • name属性:java类中属性名称
  • type属性:描述java类中属性的类型,hibernate会根据此类型生成对应数据库列的数据库类型
  • column属性或标签:数据库表中的主键的列名

Hibernate核心启动配置

整个核心配置在hibernate.properties中可以找到

必须配置

通过property标签进行配置: 方言,驱动,地址,帐号,密码

映射配置

通过mapper标签进行配置

选配

通过property标签进行配置

  • 日志显示:hibernate.show_sql
  • 日志格式化:hibernate.format_sql
  • 数据库DDL的自动生成:hibernate.hbm2ddl.auto
  • create-drop:几乎不用。先删除,再创建,再删除。
  • create:测试用例中用。先删除,再创建。
  • update:开发中用。没有就创建,有就不创建。对新增的列进行维护。
  • validate:开发稳定后用。校验表结构。

补充

  • DDL: Data Definition Language。数据库声明语言。
    使用了CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME关键字。
  • DML:Data Manipulation Language。数据库操作语言。
    使用了SELECT,INSERT,DELETE,UPDATE关键字。
  • DCL: Data Control Language。数据库权限控制语言。
    使用了GRANT,REVOKE关键字。
  • TCL:Transaction Control Language。事务控制语言。
    使用了SAVEPOINT,ROLLBACK,COMMIT关键字。

日志集成

日志介绍

  • JCL:规范。Java common logger。
  • SLF4J:规范。Simple Logger fade for Java。
  • log4j:实现。

规范的出现是因为在一个程序中多个框架用到了不同的日志系统,日志杂乱。规范提供统一解决方案。

规范和实现的整合,需要中间整合桥梁。

Log4j与slf4j集成步骤

  1. 导入jar
    • slf4j-api-x.x.x.jar : 规范接口jar
    • slf4j-log4j12-x.x.x.jar : log4j与Slf4j整合的jar
    • log4j-x.x.x.jar : log4j实现日志规范的jar
  2. 在src目录下编写log4j.properties配置文件
    ##设置日志记录到控制台的方式log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.errlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n##设置日志记录到文件的方式log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=c\:mylog.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n##日志输出的级别,以及配置记录方案log4j.rootLogger=info, stdout, file

    3.代码中调用Log4j

    • 初始化(引入的包为slf4j的,使用规范接口编程)
      Logger logger = LoggerFactory.getLogger(Clazz);
    • 调用
      logger.trace();logger.debug();logger.info();logger.warn();logger.error();

       

日志级别

  • trance
  • debug
  • info
  • warn
  • error
  • fatal

Log4j日志配置规则介绍

  • 日志记录器:rootLogger
  • 日志输出源:appender
  • 日志布局器:layout

Hibernate核心类

Hibernate运行流程介绍

161557_tv8M_3669094.jpg

Configuration类

Configuration configuration = new Configuration();configuration.configure();
  • 用于配置并且启动Hibernate框架。
  • Hibernate框架通过该对象来获得对象-关系映射文件中的元数据,以及动态配置Hibernate的属性。
  • 可以创建SessionFactory对象。

Configuration配置

  • 加载配置文件的种类,Hibernate支持xml和properties类型的配置文件,在开发中基本都使用XML配置文件的方式。

    如果采用的是properties的配置文件,那么需要通过

    Configuration configuration = new Configuration(); configuration.addResource("com/itheima/domain/XX.hbm.xml")

    手动进行加载,比较麻烦,不推荐使用

SessionFactory

由Configuration通过加载配置文件创建该对象

  • 工厂类,用于创建生成Session对象
  • SessionFactory对象中保存了当前的数据库配置信息和所有映射关系
  • SessionFactory对象中保存了预定义的SQL语句。

预定义可以提示代码效率,同时准备会耗时,也会占用内存

  • 数据库方言常用sql
  • 常见的SQL语句是增删改查(通过主键来查询)
  • SessionFactory负责维护Hibernate的二级缓存。
  • 一个SessionFactory实例对应一个数据库,应用从该对象中获得Session实例。
  • SessionFactory是线程安全的,意味着它的一个实例可以被应用的多个线程共享。
  • SessionFactory是重量级的,意味着不能随意创建或销毁它的实例。如果只访问一个数据库,只需要创建一个SessionFactory实例,且在应用初始化的时候完成。
  • SessionFactory需要一个较大的缓存,用来存放预定义的SQL语句及实体的映射信息。另外可以配置一个缓存插件,这个插件被称之为Hibernate的二级缓存,被多线程所共享.

Transcation

负责事务管理

  • 常用API

    • commit():提交事务
    • rollback():回滚事务
  • 特点

    • Hibernate框架默认情况下事务不自动提交.需要手动提交事务
    • 如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务
    • 每段事务操作都是隐含着异常的,需要手动添加try catch

Session

  • 特点

    • Session是在Hibernate中使用最频繁的接口。也被称之为持久化管理器。它提供了和持久化有关的操作,比如添加、修改、删除、加载和查询实体对象
    • Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心
    • Session是线程不安全的
    • 所有持久化对象必须在 session 的管理下才可以进行持久化操作
    • Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处
    • 持久化类与 Session 关联起来后就具有了持久化的能力
  • 常用的方法

    • save(obj): 保存数据
    • delete(obj): 删除数据
    • get(Class,id): 通过主键查询该条记录
    • update(obj): 修改数据
    • saveOrUpdate(obj): 保存或者修改
    • createQuery(String hql): 查询所有的数据

C3P0连接池集成

  1. 导入Jar包
  2. 配置hibernate启动配置文件
    org.hibernate.c3p0.internal.C3P0ConnectionProvider
    5
    20
    120
    120
    120
    2
    false
     

转载于:https://my.oschina.net/px828261/blog/1528723

你可能感兴趣的文章
fiddler之请求过滤(Filters)
查看>>
Could not read from remote repository
查看>>
关于“指针数组”和”数组指针“
查看>>
初学者一些常用的SQL语句(二)
查看>>
自我成长
查看>>
论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)
查看>>
ASP.Net Web 服务 – 如何使用会话状态
查看>>
Jetty的JNDI数据源
查看>>
angularjs modal模态框----创建可拖动的指令
查看>>
oracle 视图权限 oracle 创建视图权限不足( ORA-01031: 权限不足)
查看>>
Uva 11218 - KTV
查看>>
队列的链式存储结构
查看>>
Linux之特殊的环境变量IFS以及如何删除带有空格的目录
查看>>
Python文摘:Requests (Adavanced Usage)
查看>>
IDEA 运行maven命令时报错: -Dmaven.multiModuleProjectDirectory system propery is not set
查看>>
无插件,跨平台,基于WebGL的三维地球来了!!!
查看>>
通过反射初始化Class值【原】
查看>>
陶哲轩实分析引理10.4.1:反函数定理
查看>>
Python文摘:Mixin
查看>>
几十万人同时在线的直播间聊天,如何设计服务端架构?
查看>>