hibernate学习(2)

时间:2022-02-01 03:00:53

标签:

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>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详解对象