一、Hibernate基础

1、工作原理-ORM
  读取并解析hibernate.cfg.xml配置文件
  由hibernate.cfg.xml中的<mapping
resource="com/**/*.hbm.xml"/>读取并解析映射信息
  创建SessionFactory
  打开Sesssion
  创建事务Transation
  持久化操作
  提交事务
  关闭Session
  关闭SesstionFactory
2、增删改查
  session.save(object);
  session.delete(object);
  session.update(object);
  session.createQuery("from
class").list();
3、主键生成方式
  identity
用于自动生成主键,除oracle不支持,其他数据库一般都支持
  sequence 用序列生成主键,Oracle使用
  native
根据配置文件hibernate.cfg.xml中方言来选择生成主键
    注意:native的时候加上<param
name="sequence">foo_seq</param>,MySQL不起作用不会报错,Oracle就起作用
  increment
不常用
  assigned 不常用,手动生成id
4、映射类型
























































Hibernate映射类型 Java类型  标准SQL类型 大  小 描述
integer Integer/int INTEGER 4字节  
double Double/double DOUBLE 8字节  
big_decimal  Bigdecimal NUMERIC    
String java.lang.String VARCHAR    
boolean/yes_no/true_false Boolean/boolean BIT   布尔类型
date java.util.Date/java.sql.Date DATE   yyyy-MM-dd
time java.util.Date/java.sql.Time TIME   hh:mi:ss
timestamp java.util.Date/java.sql.Timestamp TIMESTAMP   yyyymmddhhmiss

5、对象三种状态

  暂时态
    当对象刚创建,未经过session操作,当程序执行完就会立即消失
  持久态
    对象经过session操作,如执行save,get,query等操作
    session会缓存该对象
    session再获取对象时,首先去查找一级缓存,如果没有才查询数据库
    session负责将持久态对象的变化更新到数据库中
  游离态
    调用session.evict(Object)方法和session解除关系
6、一级缓存
  
session级的缓存也叫事务级的缓存,只缓存实体,生命周期和session一致
 
 session负责实时维护缓存中的数据,保证缓存中的数据与数据库中的数据的一致性,一旦用户对缓存的数据进行了修改,session立即将数据更新到数据库中
7、延迟加载
  常见延迟加载的方法:load()
iterator()
  为了使项目在页面加载完后关闭session,使用ThreadLocal实现OpenSessionInView技术实现页面加载前后调用同一个session,两种方式
    a
Hibernateutil中自己管理维护ThreadLocal类(推荐)


 1 import org.hibernate.Session;
2 import org.hibernate.SessionFactory;
3 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
4 import org.hibernate.cfg.Configuration;
5
6 public class HibernateUtil {
7 private static ThreadLocal<Session> tl = new ThreadLocal<Session>();
8 private static Configuration conf;
9 private static SessionFactory factory;
10 static {
11   conf = new Configuration().configure();
12   factory = conf.buildSessionFactory(new StandardServiceRegistryBuilder()
13       .applySettings(conf.getProperties()).build());
14 }
15
16 public static Session openSession() {
17   Session session = tl.get();
18   if (session == null) {
19   session = factory.openSession();
20   tl.set(session);
21   }
22   return session;
23 }
24
25 public static void closeSession() {
26   Session session = tl.get();
27   if (session != null) {
28    session.close();
29   tl.set(null);
30   }
31 }
32 }

    b 修改hibernate.cfg.xml
      在配置文件中加入一句话,告诉 Hibernate 要使用 ThreadLocal
的方式获得 session
      <property
name="current_session_context_class">thread</property>

      HibernateUtil写法如下


 1 import org.hibernate.Session;
2 import org.hibernate.SessionFactory;
3 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
4 import org.hibernate.cfg.Configuration;
5
6 public class HibernateUtil {
7 private static Configuration conf;
8 private static SessionFactory factory;
9 static {
10 conf = new Configuration().configure();
11 factory = conf.buildSessionFactory(new StandardServiceRegistryBuilder()
12 .applySettings(conf.getProperties()).build());
13 }
14
15 public static Session openSession() {
16 return factory.getCurrentSession();
17 }
18
19 public static void closeSession() {
20 Session session = factory.getCurrentSession();
21 if (session != null) {
22 session.close();
23 }
24 }
25 }

一、Hibernate基础,布布扣,bubuko.com

时间: 2024-10-28 16:30:07

一、Hibernate基础的相关文章

hibernate基础(1)

hibernate基础1.hibernate介绍与动手入门体验  问题:模型不匹配(java对象模型与数据库关系模型不匹配)  解决: 1.使用JDBC手工转换        2.使用ORM(Object Relation Mapping对象关系映射)框架,有Hibernate,TopLink,OJB  下载地址http://www.hibernate.org  3.2.5版本  安装配置:    配置文件:hibernate.cfg.xml,hibernate.properties 这两个文件

【SSH三大框架】Hibernate基础第十二篇:load()懒加载分析以及一对一、一对多、多对一、多对多懒加载的分析

一.懒加载的定义: 懒加载:在WEB应用程序中,经常会需要查询数据库,系统的响应速度在很大程度上是与数据库交互的响应.因此,如果能够优化与数据库的交互速度,则能够大大提高WEB应用的响应速度. 例如:当有一个Student类和一个Teacher类.当我们加载一个学生的所有信息,包括:学号,姓名等属性后,此时Student类中的Teacher类型的属性为null,当我们需要知道这个Student对应的Teacher属性的时候,我们才去加载这个Teacher对象. 如果,我们只需要知道学生信息,我们

Hibernate 基础

× ORM (Object/Relationsship Mapping):对象/关系映射 利用面向对象思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是要编写很多的底层数据库相关的SQL语句.便有了ORM 过多编写底层SQL语句的弊端: 1.不同的数据库使用的SQL语法不通.比如PL/SQL(Oracle)与T/SQL(Microsoft[SQLServer]) 2.同样的功能在不同的数据库中有不同的实现方式.比如:分页SQL 3.程序过分你依赖SQL会对程序的移植.扩展以及维

Hibernate基础学习(四)&mdash;对象-关系映射(上)

一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数据库表中的记录的对应关系,对象的OID和数据库表的主键对应,为了保证OID的唯一性和不可变性,应该让Hibernate,而不是应用程序来为OID赋值.     Hibernate推荐在数据表中使用代理主键,即不具备业务含义的字段.代理主键通常为整型,因为整型比字符串要节省更多数据库空间.     在

Hibernate基础配置

在hibernate.cfg.xml中的基础配置: show_sql format_sql hbm2ddl.auto :有四个选项  validate . update . create . create-drop create :数据库中没有表的话会自动创建. update: 原来有表,但是在配置文件中表的结构修改了,会自动更新数据库中的表. 通过配置文件或者annotation自动建表 搭建日志环境并配置显示DDL语句(建表语句) 搭建Junit环境(注意Junit的Bug) 表名和类名不同

Hibernate基础篇

一.是什么? Hibernate是一个数据访问框架(持久层框架),在项目中利用Hibernate框架可以实现对数据库的增删改查操作,为业务层构建一个持久层.使用该框架可以简化数据操作代码,程序员可以将更多的精力放在业务编写上.其本质上是对JDBC技术的封装,Hibernate和JDBC的关系类似于Jquery和Javascript的关系.如图所示: 二.设计原理? Hibernate框架是一款ORM工具.基于ORM设计思想开发出来的. ORM:Object--Relation--Mapping对

hibernate基础dao类

功能:数据库的保存.更新.删除:sql.hql查询:分页查询:调用存储过程 基础dao类,BaseDaoImpl.class 1 import java.io.Serializable; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.text.MessageFo

Hibernate基础知识整理(二)

关联映射多对一(Employee - Department)一对多(Department - Employee)一对一(Person - IdCard)多对多(teachet - student)组件映射(User - Name)集合映射(set,list,map,bag)inverse和cascade(Employee - Department) create table Department(id int primary key,name varchar(20)); create table

1、Hibernate基础

1.1.hibernate快速预览 Hibernate是目前非常流行的ORM框架,Object Relation Model,通过ORM框架我们可以仅仅只用对对象进行操作就可以轻松的实现对数据库的操作.3.6.8 入门: 1.导入Hibernate的jar包    -hibernate-->lib-->required    -hibernate-->hiberate.jar   -hibernate-->lib-->jpa    -log4j    -mysql-conne