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

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. ResultSet遍历过程中修改自身数据,不会改变循环的过程

    ResultSet遍历过程中修改自身数据,不会改变循环的过程: import java.sql.Connection; import java.sql.PreparedStatement; impor ...

  2. 时钟(AnalogClock和DigitalClock)的功能与用法

    时钟UI组件是两个非常简单的组件,DigitalClock本身就继承了TextView——也就是说它本身就是文本框,只是它里面显示的内容总是当前时间.与TextView不同的是为DigitalCloc ...

  3. 让Flash支持Stage3D

    如要需要支持Stage3D,采用GPU来渲染,需要设置wmode="direct",在FB中,对于web和air设置方法不同: 1.web: 需要在web的html模板中,添加参数 ...

  4. 选择法排序 vb.net

    Imports System.ThreadingModule Module1    Sub Main()        'test code        'Dim a, b As Integer   ...

  5. 搭建spring工程配置数据源连接池

    Spring作为一个优秀的开源框架,越来越为大家所熟知,前段时间用搭了个spring工程来管理数据库连接池,没有借助Eclipse纯手工搭建,网上此类文章不多,这里给大家分享一下,也作为一个手记. 工 ...

  6. Hadoop学习笔记-003-CentOS_6.5_64_设置ssh免密码登录

    参考:http://blog.csdn.net/u010270403/article/details/51444677 虚拟机中共五个centos系统,每个系统有两个用户root和hadoop:cdh ...

  7. B+树的插入、删除(附源代码)

    B+ Tree Index B+树的插入 B+树的删除 完整测试代码 Basic B+树和B树类似(有关B树:http://www.cnblogs.com/YuNanlong/p/6354029.ht ...

  8. LoRaWAN协议(七)--完整数据流程

    以下的GW指Gateway 所用指令: root@lora-iot-sk:~# tcpdump -i lo -nn -x 'length>100' 入网流程 GW -> NS join_r ...

  9. session工作原理简介

    session是什么 首先,我们需要知道session是什么.有比较专业的人将session称之为会话控制.说实在的,如果这么说的话,我也不清楚session到底算是什么. 其实session是一个存 ...

  10. 初探 discuz

    测试: vim /etc/hosts       ##ip地址转换 修改windows 的配置文件,写字板打开 vim /usr/local/apache/conf/httpd.conf vim /u ...