首页 > 代码库 > hibernate学习(2)——api详解对象

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();
	}
}

  

 

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