---恢复内容开始---

1、JavaEE的三层结构

WEB层--Service层--DAO层

2、Hibernate版本

Hibernate3.x  4.x  5.x

4版本是过渡版本 不使用  5.x推荐

3.ORM(Object Relation Mapping,对象关系映射)

Hibernate使用了ORM思想

javabean在Hibernate中被称为实体类

做法:①实体类与数据库的表一一对应(实体类与数据库的表进行对应【有User类就有User表】,实体类的属性和数据库表的字段进行对应)

②不需要操作数据库,操作表对应的实体类

Hibernate将JDBC的功能封装进了Session类里面,不用写重复的代码。

4.搭建Hibernate环境、

1.Jar包:required里面和JPA里面的需要有,以及Log4j和common两个日志输出jar包(我的hibernate版本里面没有jap文件夹,貌似也可以正常运行)

2.配置文件:实体映射文件 hibernate核心配置文件

实体映射文件官方建议的命名格式是:实体名.hbm.xml  位置没有要求,一般与实体类放在同一个包

hibernate核心配置文件 位置必须是src下,名称必须为hibernate.cfg.xml

3.实体类  就是一个javabean

package tech.youngs.entity;

public class User {
/*Hibernate要求有一个属性是唯一的 --> 对应的主键*/
private int uid;
private String username;
private String password;
private String address;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}

4.映射配置文件:命名为User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入XML dtd 约束 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- hibernate mapping是根标签 -->
<hibernate-mapping>
<!-- class 配置类和表的映射关系
@param name ※实体类的全路径
@param table 实体类对应的表的名称
-->
<class name="tech.youngs.entity.User" table="t_user">
<!-- 属性字段对应 -->
<!-- 实体类id与表的id对应 pk -->
<!-- @param name 实体类唯一属性的属性名
@param column 表中对应的唯一属性的字段名[主键]
-->
<id name="uid" column="uid">
<!-- 设置数据库表内id的生成策略 [自增][主键]
@param class
- native 主键且自增长
-->
<generator class="native"></generator>
</id> <!-- 配置其他属性和表的字段对应 -->
<!-- @param name 实体类的属性名称
@param column 实体类对应的字段的名称 [可以省略,创建的字段名默认和name属性值一样]
[@param type 设置实体类的字段类型,Hibernate会自动生成对应的类型]
-->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>

5.hibernate核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入约束 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 所有的配置写在session-factory标签里面 -->
<session-factory>
<!-- ① 配置数据库信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate_demo1</property>
<property name="connection.username">root</property>
<property name="connection.password">996225</property> <!-- ② 配置hibernate信息 [可选] --> <!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property> <!-- format SQL -->
<property name="format_sql">true</property> <!-- Drop and re-create the database schema on startup -->
<!-- 值有很多 create update delete
最常用的是update 有表更新 无表创建
-->
<property name="hbm2ddl.auto">update</property> <!-- SQL dialect -->
<!-- 每个数据库 都有自己的SQL标准 比如分页在mysql中用limit,oracle用rownum
让hibernate识别特有的语句[SQL标准之外的]
-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- ③ 引入映射文件 -->
<mapping resource="tech/youngs/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

6.测试类

package tech.youngs.hibernatetest;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import tech.youngs.entity.User; public class HibenateDemo { @Test
public void add()
{
/*第一步 加载Hibernate核心核心配置文件*/ /* 详解Configuration
* 作用:去src下找hibernate.cfg.xml,加载核心配置文件
* */
Configuration cfg = new Configuration();
/*会找hibernate.cfg.xml的文件 加载进来*/
cfg.configure(); /*第二步 创建SessionFactory对象*/
/*会根据引入的映射文件 在数据库中生成表*/ /* 详解SessionFactory
* 作用:
* 在创建过程中:根据数据库配置和映射文件配置生成表【非常耗费资源】
* 一般的时候会一个项目只创建一个SessionFactory对象
* ->创建一个工具类,使用静态代码块(类加载时只执行一次)
* SessionFatory sessionFactory = HibernateUtil.getSessionFactory();
*
* */
SessionFactory sessionFactory = cfg.buildSessionFactory(); /*第三步 创建session*/
/* 详解Session
* 作用 CURD操作
* 常用方法:save[添加] update[修改] delete[删除] get[根据id查数据]
* 特点:单线程对象[只能自身使用,无法共用]
* */
/*类似于JDBC的Connection*/
Session session = sessionFactory.openSession(); /*第四步 开启事务*/
/*详解 Transaction
* 提交事务:commit
* 回滚事务:rollback -> 回到操作之前的状态
* 事务
* 特性:原子性[要么都成功,要么都失败]
* 一致性[数据要前后要一致,一个账户钱减少了,另一个就要多,不能说这边少了那边没有多,账户的总数就不一致]
* 隔离性[事务与事务之间不受影响]
* 持久性 [数据库提交,数据持久化了]
* */
Transaction tx = session.beginTransaction(); /*第五步 CURD操作*/
User user = new User();
user.setUsername("小明");
user.setPassword("123456");
user.setAddress("Xianyang"); /*使用session中的save添加*/
session.save(user); /*第六步 提交事务*/
tx.commit(); /*第七步 关闭资源*/
session.close();
sessionFactory.close(); }
}

上面需要注意得一个问题就是SessionFactory创建过程中会根据映射文件创建表,这是一个非常耗费资源的过程,如果每一次访问都要创建资源的话,不仅用户体验不好而且服务器也很耗费资源,所以在开发过程中一般会单独的创建一个Util类,在类中的静态代码块中完成Configuration和SessionFactory的创建,并声明一个返回SessionFactory的方法即可。由于静态代码块在类创建的时候就执行而且只执行一次,所以这样一定程度上解决了问题。下面是Util的代码:

package tech.youngs.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static Configuration cfg = null;
private static SessionFactory sessionFactory = null;
static{
//加载配置文件
cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
} public SessionFactory getSessionFactory()
{
return sessionFactory;
}
}

---恢复内容结束---

Hibernate学习笔记①的更多相关文章

  1. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  2. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  3. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  4. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  5. Hibernate学习笔记

    一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...

  6. Hibernate学习笔记(四)

    我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改以下是b站视频地址:https://www.bilibili.com/video/av14626440 ...

  7. Hibernate学习笔记(三)

    我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改以下是b站视频地址:https://www.bilibili.com/video/av14626440 ...

  8. HIbernate学习笔记(一) 了解hibernate并搭建环境建立第一个hello world程序

    Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装,Java程序员可以使用面向对象的编程思维来操纵数据库,它通过对象属性和数据库表字段之间的映射关系,将对象 ...

  9. Hibernate学习笔记-Hibernate关系映射

    1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...

  10. Hibernate学习笔记(1)Hibernate构造

    一 准备工作 首先,我们将创建一个简单的基于控制台(console-based)Hibernate应用. 我们所做的第一件事就是创建我们的开发文件夹.并把所有需要用到的Java件放进去.解压缩从Hib ...

随机推荐

  1. JIRA描述默认值设置

    JIRA描述默认值设置 Setting a Default Value in the Description Field 转自https://confluence.atlassian.com/jira ...

  2. doubango(3)--协议栈的启动过程

    协议栈启动的上层接口 对于Doubango中得sip协议栈,是通过SipStack类粘合上层代码与底层代码的,该类定义在SipStack.h中,实现在SipStack.cxx中.当构造好一个SipSt ...

  3. 开箱即用 - jwt 无状态分布式授权

    基于JWT(Json Web Token)的授权方式 JWT 是JSON风格轻量级的授权和身份认证规范,可实现无状态.分布式的Web应用授权: 从客户端请求服务器获取token, 用该token 去访 ...

  4. 如何用CSS快速布局(一)—— 布局元素详细

    要快速进行网页排版布局,则必须对布局的元素有清晰的了解,才不会总是在细节处出错.这一篇先详解有关布局的因素作为布局基础:块级元素and内联元素.盒模型.准确定位.元素对齐.样式继承.下一篇则重点描述快 ...

  5. IOS开发,遇到的第一个bug

    经过几天的得瑟,今天终于开始实践IOS开发了.由于没有苹果的电脑,现在先用虚拟机凑合着. 第一个开发的东西就是苹果官方向导里的helloworld了.最后在运行的时候有一个异常,导致程序会闪退,错误信 ...

  6. Spark工作机制简述

    Spark工作机制 主要模块 调度与任务分配 I/O模块 通信控制模块 容错模块 Shuffle模块 调度层次 应用 作业 Stage Task 调度算法 FIFO FAIR(公平调度) Spark应 ...

  7. Code forces 719A Vitya in the Countryside

    A. Vitya in the Countryside time limit per test:1 second memory limit per test:256 megabytes input:s ...

  8. java集合框架02——Collection架构与源码分析

    Collection是一个接口,它主要的两个分支是List和Set.如下图所示: List和Set都是接口,它们继承与Collection.List是有序的队列,可以用重复的元素:而Set是数学概念中 ...

  9. [Hadoop] - SSH免密码登录

    在安装hadoop之前需要进行ssh免密码登录,ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以Redhat为例. 我这里只采用一台机器A(10. ...

  10. 用phpcms如何将静态页面制作成企业网站(中)

    上篇博客中讲到了该修改网页的中间部分 中间的内容是这样的,有标题和内容,里面的内容被代码替代,运行起来就这样的 里面的内容就可以在后台管理那里添加 再来看代码部分 <div class=&quo ...