hibernate学习(2)——api详解对象

1   Configuration 配置对象

/详解Configuration对象
public class Configuration_test {
    @Test
    //Configuration 用户加载配置文件
    public void fun1(){
        //1.1 调用configure() 方法=> 加载src下名为hibernate.cfg.xml
        Configuration  conf = new Configuration().configure();
        //1.2 如果配置文件不符合默认加载规则.我们可以调用
            //new Configuration().configure(file); 通过file加载
            //new Configuration().configure(path);    通过路径加载
        //1.3 可以通过Configuration对象加载 映射文件(不推荐)
            //推荐hibernate.cfg.xml 使用 mapping 属性引入配置文件
        //规范: 1>orm映射文件名称与实体的简单类名一致
        //       2>orm映射文件 需要与实体的类在同一包下
        conf.addClass(User.class);
    }
}

2    SessionFactory工厂

1)SessionFactory 相当于java web连接池,用于管理所有session

2)获得方式:config.buildSessionFactory();

3)sessionFactory hibernate缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)

4)SessionFactory线程安全,可以是成员变量,多个线程同时访问时,不会出现线程并发访问问题

5)提供api

//详解SessionFactory对象
public class sessionfactory_test {
    @Test
    //SessionFactory 创建session的工厂
    public void fun1(){
        //1加载配置
        Configuration  conf = new Configuration().configure();
        //2 根据Configuration 配置信息创建 SessionFactory
        SessionFactory sf = conf.buildSessionFactory();
        //3 获得session
        //3.1 openSession => 获得一个全新的Session对象,测试环境下使用
        sf.openSession();
        //3.2 getCurrentSession => 获得与当前线程绑定的session对象
        //将session与线程绑定
        // 调用getCurrentSession 需要加上一个配置: <property name="hibernate.current_session_context_class">thread</property>
        sf.getCurrentSession();

    }
}

hibernate支持,将创建的session绑定到本地线程中,底层使用ThreadLocal,在程序之间共享session。

1.必须在hibernate.cfg.xml 配置

2.如果提交或回滚事务,底层将自动关闭session

3.   Session 会话

1) Session 相当于 JDBC的 Connection -- 会话

2)通过session操作VO对象 --增删改查

3)session单线程,线程不安全,不能编写成成员变量

4)

l  session api

save 保存

update 更新

delete 删除

get 通过id查询,如果没有 null

load 通过id查询,如果没有抛异常

createQuery("hql")  获得Query对象

createCriteria(Class) 获得Criteria对象

load方法.返回一个代理对象,获得其内容时,会查询数据库,不是每次都查.代理对象中有一个标识是否被初始化的boolean型变量. 记录是否被初始化过。

java中的动态代理是基于接口.  而 Hibernate 是使用javassist-3.12.0.GA.jar 产生代理对象的,该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口

package com.alice.hibernate01.api;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.hql.ast.SqlASTFactory;
import org.junit.Test;

import com.alice.hibernate01.hello.User;

public class SessionTest {
	@Test
    public void addTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	User user = new User();
    	user.setName("李良");
    	user.setPassword("1234");

    	//调用Session的save方法保存对象到数据库中
    	session.save(user);
    	//提交事务
    	trac.commit();
    	//关闭资源
    	session.close();
    	sf.close();
    }
	@Test
	public void updateTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	//先查询出你要修改的对象
    	User user = (User) session.get(User.class, 1);

    	//在查询结果上,进行修改
    	user.setName("aaaa");

    	//提交事务
    	trac.commit();
    	//关闭资源
    	session.close();
    	sf.close();
	}
	@Test
	public void deleteTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	//先查询出你要修改的对象
    	User user = new User();
    	user.setId(3);

    	session.delete(user);

    	//提交事务
    	trac.commit();
    	//关闭资源
    	session.close();
    	sf.close();
	}
	@Test
	//Session对象 用于操作数据库
		//查询get
	public void getTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	//查询
    	User user = (User) session.get(User.class, 4);
    	System.out.println(user);

    	trac.commit();
    	//关闭资源
    	session.close();
    	sf.close();
	}

	@Test
	//Session对象 用于操作数据库
		//查询 load
	public void loadTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	User user = (User) session.load(User.class, 5);
    	System.out.println(user);
    	trac.commit();
    	//关闭资源
    	session.close();
    	sf.close();
	}
	@Test
	//Session对象 用于操作数据库
		//查询所有User
	public void getAllTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	//HQL语言 => Hibernate Query Language
    	//createQuery 传入hql语句查询
    	//select * from t_user;
    	//session.createQuery("com.alice.hibernate01.hello.User")
    	Query query = session.createQuery(" from User");

    	List<User> list = query.list();
    	System.out.println(list);

    	trac.commit();
    	//关闭资源
    	session.close();
    	sf.close();
	}
	@Test
	//Session对象 用于操作数据库
		//查询所有User
	public void critieriaTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	//Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句
        Criteria criteria = session.createCriteria(User.class);

      //select * from t_user;
        List<User> list = criteria.list();
        System.out.println(list);

        trac.commit();
    	//关闭资源
    	session.close();
    	sf.close();
	}

	@Test
	//Session对象 用于操作数据库
			//查询所有User
	public void sqlQueryTest(){
		//1加载配置
    	Configuration conf = new Configuration().configure();
    	//2 根据Configuration 配置信息创建 SessionFactory
    	SessionFactory sf = conf.buildSessionFactory();
    	//3 获得session
    	Session session = sf.openSession();
    	//打开事务
    	Transaction trac = session.beginTransaction();

    	//原生的Sql查询
    	SQLQuery query = session.createSQLQuery("select * from t_user");
    	// addEntity 将查询结果封装到指定对象中
    	query.addEntity(User.class);

    	List<User> list = query.list();
    	System.out.println(list);

    	 trac.commit();
     	//关闭资源
     	session.close();
     	sf.close();
	}
}

  

时间: 2024-10-24 02:43:45

hibernate学习(2)——api详解对象的相关文章

Hibernate框架学习(二)——api详解

一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. 1 //1.创建,调用空参构造(还没有读配置文件) 2 Configuration conf=new Configuration(); 3 //2.读取指令配置文件=>空参加载方法,加载src下的hibernate.cfg.xml文件 4 conf.configure(); 5 6 //3.读取指定orm元数据(扩展),如果主配置中已经引入映射配置,不需要手动加载 7 //conf.addResource(

分享知识-快乐自己:Hibernate框架常用API详解

1):Configuration配置对象 Configuration用于加载配置文件. 1): 调用configure()方法,加载src下的hibernate.cfg.xml文件 Configuration conf = new Configuration().configure(); 2):如果配置文件不符合默认的加载规则,我们可以用: new Configuration().configure(file);  //通过file加载 new Configuration().configure

JavaFX学习之道:JavaFX API详解之Window,Stage,PopupWindow

stage包中包含 Window, Stage, PopupWindow, Popup, FileChooser, DirectoryChooser, Screen等类. 其中Window类可理解成一个窗体,用于存放Scene,并与用户操作.一般window作为窗体,都用其子类Stage和PopupWindow. 看一下Window作为窗体的顶级类包含的一些共同属性 eventDispatcher setEventDispatcher(EventDispatcher value) focused

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

Hibernate入门(二)——hibernateAPI详解

Hibernate API 详解 1.Configuration 功能:配置加载类,用于加载主配置,orm元数据加载 .创建: Configuration conf = new Configuration(); 读取指定配置文件(加载主配置文件,即我们经常创建的"hibernate.cfg.xml") 从下图中可以发现有很多关于读取方法的重载... 虽然有这么多重载,但是一般咱就用无参构造方法把,默认找到src下的hibernate.cfg.xml文件 conf.configure()

[转]hibernate缓存机制所有详解

以下文章来自http://www.blogjava.net/tbwshc/articles/380013.html Hibernate 所有缓存机制详解 hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和线程绑定了. hibernate一级缓存生命周期很短,和session生命周期一样,一级缓存也称session级的缓存或事务级缓存.如果tb事务提

iOS学习--UIScrollView 原理详解

iOS学习--UIScrollView 原理详解 http://blog.csdn.net/yanfangjin/article/details/7898189 ScrollView UIScrollView UIScrollView为了显示多于一个屏幕的内容或者超过你能放在内存中的内容. Scroll View为你处理缩小放大手势,UIScrollView实现了这些手势,并且替你处理对于它们的探测和回应.其中需要注意的子类是UITableView以及UITextView(用来显示大量的文字).

Hibernate 所有缓存机制详解

Hibernate 所有缓存机制详解 hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和线程绑定了. hibernate一级缓存生命周期很短,和session生命周期一样,一级缓存也称session级的缓存或事务级缓存.如果tb事务提交或回滚了,我们称session就关闭了,生命周期结束了. 缓存和连接池的区别:缓存和池都是放在内存里,实现是一样的

Hibernate复习(三)配置文件详解

1.hibernate.cfg.xml 2.映射文件Person.hbm.xml Java的实体类是通过配置文件与数据表中的字段相关联.Hibernate在运行时解析配置文件,根据其中的字段名生成相应的SQL语句 a.id属性 <generator>子元素用来设定标识符生成器.Hibernate提供了多种内置的实现. b.property属性 ? name属性:指定持久化类的属性的名字. ? type属性:指定Hibernate或Java映射类型.Hibernate映射类型是Java类型与SQ