hibernate-笔记
什么是 hibernate 框架
1.hibernate 框架应用在 javaee 三次结构中 dao 层框架
2.在dao 层里面对数据库做curd 操作, 使用hibernate
做crud 操作, hibernate 底层代码就是jdbc, hibernate
对 jdbc 进行封装,使用hidernate 好处,不需要写复杂的jdbc 代码了,不需要写sql 语句实现。
什么是orm 思想
1.hidernate 使用orm 思想对数据库进行crud 操作
2.在web 阶段学习, javabean, 更正叫法为实体类
3.orm object relational mapping, 对象关系映射
1.让实体类和数据库表进行一一对应关系。
让实体类首先和数据表对象,
让实体类属性 和 表里面字段对应
2.不需要直接操作数据库,而操作表对应实体类对象。
搭建 hibernate 环境
第一步:导入hibernate 的jar 包


因为用hibernate 的时候,有日志文件输出,hibernate 本身没有
日志输出的jar 包,导入其他日志输出的jar 包
第二步创建实体类

1.使用hibernate 的时候,不需要自己手动创建表hibernate 会自动创建好。
第三步,配置数据库和实体类一一对应关系。(映射)
使用配置文件来完成映射的关系。
1.创建xml 格式的配置文件
映射配置文件名称和位置没有固定的要求建议,在实体类所在包里创建,实体类名称 hbm.xml
2.配置是xml格式,在配置文件中首先引入xml约束
学过约束dtd , schema, 在hibernate 里面引入的约束dtd 约束

3.配置映射关系
<hibernate-mapping>
<!--1.配置类和表对应
class 标签
name 属性,实体类全路径
table 属性,数据库表名称
-->
<class name="cn.itcast.entity.User" table="t_user">
<!-- 2.配置实体类id 和表id 对应
hibernate 要求实体类有一个属性唯一值
hibernate 要求表有字段作为唯一值
-->
<!-- id 标签
name 属性, 实体类里面id 属性名称
column 属性, 生成的表字段名称
-->
<id name="uid" column="uid">
<!-- 设置数据库表id增长策略
native 生成表id 值就是主键自动增长
-->
<generator class="native"></generator>
</id>
<!-- 配置其他属性和表字段对应
name 属性,实体类属性名称
column 属性,字段名称
-->
<propert name="username" column="username"></propert>
<propert name="password" column="password"></propert>
<propert name="address" column="address"></propert>
</class>
</hibernate-mapping>
第四步创建hibernate 的核心配置文件
1.核心配置文件格式xml,但是核心配置文件
名称和位置固定的,位置必须在src 下
名称必须 hibernate.cfg.xml

2.引入dtd 约束
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
3.hibernate 操作过程中,只会加载核心配置文件
其他配置文件不会加载。
第一部分,配置数据库的信息
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
第二部分,配置hibernate 信息
<!-- 第二部分,配置hibernate 信息 -->
<!-- 输出底层的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 输出底层sql语句格式 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate 帮创建表,需要配置之后
update: 如果有表进行更新,如果没表进行创建
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置数据库的方言
在mysql 里面实现分页, 关键字limit ,只能使用mysql里面
在oracle 数据库里面 实现分页 rownum
让hibernate 框架识别不同数据库的语句
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
实现添加操作
第一步 加载hibernate 核心文件
第二步 创建 SessionFactory 对象
第三步 使用SessionFactory 创建session 对象
第四步 开启事务
第五步 写具体逻辑 crud 操作
第六步 提交事物
第七步 关闭资源
Hibernate 核心api
Configuration
1.代码
Configuration cfg = new Configuration();
cfg.configure();
Session Factory
Session
session 类似于jdbc 中 connection
调用session 里面的方法实现 crud 操作
1.添加 save 方法
2.修改 update 方法
3.删除 delete 发放
4 根据id 查询 get 方法。
session 对象单线程
Transaction
1.事务对象
开启事务对象
Transaction tx = session.beginTransaction();
事务提交回滚方法。
tx.commit();
tx.rollback();
事务四个概念
原子性(一组要么都成功,要么都失败),一致性,隔离性,持久性
工具类是抽取

实体类的编写规则
1.实体类里面属性私有的
2.私有属性使用公开的set 和get 方法进行操作。
3.要求实体类有唯一属性作为唯一值(一般都使用id值)
4.实体类属性建议不适用基本数据类型,使用基本数据类型对应的包装类型。
hibernate 主键生成策略
实体类的操作
添加操作
根据id 查询
调用session 里面的get 方法实现
// 添加功能
User user = new User();
user.setUsername("小王");
user.setPassword("250");
user.setAddress("日本");
// 调用session 的方法实现添加
session.save(user);

修改操作
先查询,修改值
1根据id 查询,返回对象

删除操作

实体类对象状态
1.瞬时态,对象里面没有id值,对象与session 没关联。
2.持久态 对象里面有id 值,对象与session 有关联。
3.托管态 对象有id值,对象与sesion 没关联
hibernate 一级缓存

hibernate 事务操作
事务相关概念

hibernate-笔记的更多相关文章
- 框架Hibernate笔记系列 基础Session
标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...
- hibernate笔记--cascade级联以及inverse属性
cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例, ...
- Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...
- Hibernate笔记一
背景 jdbc的优缺点 A:直接操作底层,提供了简单,便捷的访问数据库方法,跨平台比较强,灵活,可以写很多赋值的SQL语句:是最底层的数据库操作,所以效率比较高,Sql语句可以自己选择写,采用效率最高 ...
- hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
二级缓存(sessionFactory): Hibernate的二级缓存由SessionFactory对象管理,是应用级别的缓存.它可以缓存整个应用的持久化对象,所以又称为“SessionFactor ...
- hibernate笔记--缓存机制之 一级缓存(session缓存)
一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询i ...
- hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...
- hibernate笔记--继承映射关系的三种实现方式
单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...
- hibernate笔记--单(双)向的多对多映射关系
在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...
- hibernate笔记--基于主键的单(双)向的一对一映射关系
上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...
随机推荐
- CSS属性: 阴影 轮廓 渐变
注: 本文摘自 宁静致远 - CSDN / 但愿人长久 千里共婵娟 - CSDN 阴影 使用box-shadow属性可以为元素添加阴影效果, 比如 box-shadow: h-shadow v-sha ...
- 应该是很简单的事,关于SQL2005的视图浏览不排序问题
http://bbs.csdn.net/topics/390667337?page=1
- 第4课 简易浏览器-WebViewer组件的使用方法
做一个手机浏览器,需要哪些组件呢? 一.组件设计 二.组件属性及命名修改 三.逻辑设计 1.导航按钮代码:前进.后退.主页 2.访问网页按钮 1)根据用户在地址栏输入的地址书写,判断书写中是否含有“h ...
- 个体商户POS机遭遇禁刷 职业养卡人称自有对策
“套现猛于虎也”,这对于信用卡业而言无异于一大命门,信用卡套现金额的规模如同滚雪球般愈演愈烈.记者昨日采访银行业内了解到,虽然为防套现将根据规定关闭个体商户POS机刷信用卡的功能,但职业“养卡人”不以 ...
- centos中从源程序升级python方法
http://www.cnblogs.com/sky20081816/p/3441920.html 1 .wget http://python.org/ftp/python/2.7.3/Python- ...
- Javascript 删除tr 元素
Javascript 删除tr 元素 function delete1(obj){ var tr=obj.parentNode.parentNode; var tbody=tr.parentNod ...
- RuntimeBroker ClipboardBroker EoP
datetime: 2017.04.28 漏洞简介 随着沙箱技术的普及,现在主流的操作系统及软件都开始支持沙箱,以此来缓解层出不穷的远程代码执行漏洞对系统造成的危害.AppContainer是自Win ...
- C++ 类的存储方式以及虚函数表
一.C++成员函数在内存中的存储方式 用类去定义对象时,系统会为每一个对象分配存储空间.如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间.按理说,如果用同一个类定义了10个对象,那么就 ...
- for循环里面的break;和continue;语句
for循环里面的break;和continue;语句 break语句 哇,我已经找到我要的答案了,我不需要进行更多的循环了! 比如,寻找第一个能被5整除的数: for循环中,如果遇见了break语句, ...
- easyui学习笔记8—在手风琴中加载其他的页面
在手风琴中加载其他页面和在表格中加载其他的页面有写类似的,就是请求另外一个页面显示数据. 1.先看看引用的资源文件 <link rel="stylesheet" href=& ...