Hibernate框架_part1:hibernate的入门和po映射

1、准备知识:Javaee分层框架、dao模式

1)Java分层架构

用户层:client层、客户端(浏览器、安卓ios客户端)

web层:http请求和响应

    表现层:html、js、css,提供ui界面

    控制层:jsp、servlet,接收请求调用service处理

业务层:service即Javabean,处理业务

持久层:数据持久化

    数据访问层:将业务层和数据库解耦合

    数据库:mysql、oracle,数据持久化

2)dao模式

dao即data access object数据访问对象,包括:

  data accessor数据访问接口:业务通过它来访问数据库

    实现方式:创建dao接口和实现类

    dao接口:将访问数据库的过程细化

      插入用户信息;校验用户是否重复(以用户注册为例)

  domain object领域对象即pojo(普通Javabean)

    作用:将业务数据封装成一个对象,使用pojo调用dao接口

使用dao的好处:

dao作为业务层访问数据库的中间层即数据访问层,将业务层和数据库解耦合,将访问细节封装起来

2、hibernate入门

介绍

轻量级的Javaee应用的持久层框架,用于实现dao,是一个对象关系映射即orm映射(pojo---数据库二维关系表)

是对jdbc的的封装

hibernate核心即orm:操作对象即实现操作数据库表

体系架构:

image

执行流程:

image

po类

创建hbm.xml映射文件先创建po类

po类即持久化对象,domain object

编写规则:

无参公共的构造、主键标识、公共的setters和getters、不用final修饰、属性尽量使用包装类型、实现序列化接口、建议属性名尽量与表字段一致

Xxx.hbm.xml映射文件

定义对象和数据库表的关系

对象文件---数据库表

属性---数据库表的字段

属性值---字段的记录值

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 映射表

name:po类的路径
table:表名
catalog:指定mysql的数据库,如何使用oracle使用scheam指定oracle的用户名
-->
<class name="cn.itcast.hibernate.domain.User" table="user" catalog="hibernate0823">

<!-- 主键映射
name:po类中主键对应的属性
column:user表中主键名
-->
<id name="id" >
<column name="id"/>
<!-- 配置主键生成规则
idendity:是hibernate提供一个自增主键策略,hibernate插入用户信息调用idendity策略类,生成新主键
还有uuid主键策略
-->
<generator class="idendity"></generator>
</id>

<!-- 映射表中的字段
name:po类中主键对应的属性
column:user表中字段
type:hibernate提供映射类型,如果不配置映射类型,hibernate自动根据po类的属性类型进行映射
-->
<property name="usercode" column="usercode" type="string"></property>
<!-- 如果po属性名和字段名一样,只配置name即可 -->
<property name="username"/>
<property name="birthday"/>
<property name="sex"/>
<property name="address"/>
</class>
</hibernate-mapping>

Xxx.cfg.xml属性配置文件

<hibernate-configuration>
<!-- 会话工厂 -->
<session-factory>
<!-- 配置属性 -->
<!-- 方言,根据数据库选择 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库连接url -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate0823</property>
<!-- 数据库用户名和密码 -->
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">mysql</property>
<!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->
<property name="hibernate.show_sql">true</property>

<!-- 是否对日志中输出的sql语句进行格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- hbm2ddl.auto的4个值,如果不需要设置为none,建议正式环境设置为none validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。 create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构 -->
<property name="hibernate.hbm2ddl.auto">none</property>
<!-- 配置mapping resource:引用classpath下的XXX.hbm.xml -->
<mapping resource="cn/itcast/hibernate/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>

 

3、日志框架log4j整合到hibernate:记录hibernate执行日志

log4j介绍

需求:通常情况下项目开发都需要记录系统运行日志,排查问题都是根据日志来排查。

log4j是apache的一个开源项目,可灵活实现将各类级别的日志输出到控制台或文件中以及灵活的输出格式

log4j实现的是slf4j接口规范

日志级别:

image

开发阶段一般设置为:debug

生产环境下一般设置为:error或info

log4j三个主要部件:

记录器loger:从哪里输出日志(Java代码)

输出源appenders:日志目的地(控制台或文件)

布局layouts:日志格式化为指定字符串

通常配置在log4j.properties配置文件中

 

4、po映射原理

po对象的三种状态

image

detached和transient区别

同:对象都不在session中

异:detached对象有主键标识;transient没有主键标识

hibernate中po对象身份标识

引用数据库主键

hibernate主键生成策略

自然主键:具有业务意义的字段

代理主键:不具有业务意义的字段

复合主键:多个字段组合成一个主键

建议:业务开发中使用代理主键

一级缓存

缓存:对数据库中的数据进行缓存,将数据库中的数据存在内存,好处:读取内存速度 要比读取数据库的速度 要快。

一级缓存:通过session得到持久化对象,持久化对象会保存在一个session实例的一级缓存中,一级缓存的数据结构就是map,key就是对象身份标识(主键),value就是对象本身。

一级缓存的内存结构:在session对象中有一个PersistenceContext持久化上下文

posted @ 2016-03-26 23:54  jkdong  阅读(983)  评论(0编辑  收藏  举报