hibernate 基础总结

1 hibernate的认知:

hibernate是一种实现了ORM映射的持久层框架,它通过持久化类、配置文件、映射文件进行持久化操作。它有三个核心的类 Configuration获取数据库配置信息,SessionFactory类用来产生Session,SessionFactory同时是Hibernate的二级缓存,Session是hibernate的核心类,完成增删改查操作;

2 hibernate的POJO:

hibernate的持久化类要符合POJO,pojo是普通的javaBean,一般是私有属性,get/set方法,无参构造方法;

3 hibernate建表:

xml实现ORM映射

<property name="hbm2ddl.auto">update</property>加入在配置文件中,只要发现数据库表和映射不一样,就会建表;执行的语句如下

Configuration cfg=new Configuration().configure();
		SchemaExport schema=new SchemaExport(cfg);
		schema.create(true, true);

注解实现ORM

持久化类需要个的包:ejb3-persistence.jar   hibernate-core.jar        hibernate-commons-annotations.jar

package com.tem.hib;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Teacher {
	@Id
	private Integer tid;
	private String tname;
	private String tpwd;
	public Integer getTid() {
		return tid;
	}
	public void setTid(Integer tid) {
		this.tid = tid;
	}
	public String getTname() {
		return tname;
	}
	public void setTname(String tname) {
		this.tname = tname;
	}
	public String getTpwd() {
		return tpwd;
	}
	public void setTpwd(String tpwd) {
		this.tpwd = tpwd;
	}

}

创建 AnnotationConfiguration,不再需要Configuration,所需包 hibernate-annotations.jar

Configuration cfg=new AnnotationConfiguration().configure();
		SchemaExport schema=new SchemaExport(cfg);
		schema.create(true, true);

4 JPA是java对象持久化标准API,可以用XML和注解的形式描述持久化ORM映射;

5 hibernate在使用注解的JPA时候,Configuration要用AnnotationConfiguration代替,包括获取SessionFactory时候;在配置文件里<mapping class="com.tem.hib.Teacher" />要用这种形式;

6 SessionFactory是线程安全的,但是Session不是线性安全的,可以通过ThreadLocal来创建Session的本地副本变量,解决不安全问题;

package com.tem.hib;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	private static final ThreadLocal<Session> threadLoacl=new ThreadLocal<Session>();
	private static SessionFactory sessionFactory=null;

	static{
		Configuration cfg=new Configuration().configure();
		sessionFactory=cfg.buildSessionFactory();
	}

	public static Session openSession(){
		Session session=(Session)threadLoacl.get();
		if(session==null||!session.isOpen()){
			if(sessionFactory==null){
				rebuildSessionFactory();
			}
			session=(sessionFactory!=null)?sessionFactory.openSession():null;
			threadLoacl.set(session);
		}

		return session;
	}

	public static SessionFactory rebuildSessionFactory(){
		Configuration cfg=new Configuration().configure();
		sessionFactory=cfg.buildSessionFactory();
		return sessionFactory;
	}

	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}

	public static void closeSession(){
		Session session=(Session)threadLoacl.get();
		threadLoacl.set(null);
		if(session!=null){
			session.close();
		}
	}

}



时间: 2024-10-10 17:48:56

hibernate 基础总结的相关文章

一、Hibernate基础

1.工作原理-ORM 读取并解析hibernate.cfg.xml配置文件 由hibernate.cfg.xml中的<mapping resource="com/**/*.hbm.xml"/>读取并解析映射信息 创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提交事务 关闭Session 关闭SesstionFactory2.增删改查 session.save(object); session.delete(object);

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