zoukankan      html  css  js  c++  java
  • 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();
    	}
    }
    

      

  • 相关阅读:
    BZOJ2809 dispatching
    BZOJ1486 最小圈
    BZOJ1096 仓库建设
    BZOJ3190 赛车
    BZOJ1911 特别行动队
    BZOJ1202 狡猾的商人
    BZOJ1007 水平可见直线
    BZOJ2150 部落战争
    如何用PHP遍历文件数目 或删除目录下的全部文件?
    php对文件/目录操作的基础知识(图解)
  • 原文地址:https://www.cnblogs.com/snowwang/p/6115456.html
Copyright © 2011-2022 走看看