1   Configuration 配置对象

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

2    SessionFactory工厂

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

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

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

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

5)提供api

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

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 产生代理对象的,该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口

  1. package com.alice.hibernate01.api;
  2.  
  3. import java.util.List;
  4.  
  5. import org.hibernate.Criteria;
  6. import org.hibernate.Query;
  7. import org.hibernate.SQLQuery;
  8. import org.hibernate.Session;
  9. import org.hibernate.SessionFactory;
  10. import org.hibernate.Transaction;
  11. import org.hibernate.cfg.Configuration;
  12. import org.hibernate.hql.ast.SqlASTFactory;
  13. import org.junit.Test;
  14.  
  15. import com.alice.hibernate01.hello.User;
  16.  
  17. public class SessionTest {
  18. @Test
  19. public void addTest(){
  20. //1加载配置
  21. Configuration conf = new Configuration().configure();
  22. //2 根据Configuration 配置信息创建 SessionFactory
  23. SessionFactory sf = conf.buildSessionFactory();
  24. //3 获得session
  25. Session session = sf.openSession();
  26. //打开事务
  27. Transaction trac = session.beginTransaction();
  28.  
  29. User user = new User();
  30. user.setName("李良");
  31. user.setPassword("1234");
  32.  
  33. //调用Session的save方法保存对象到数据库中
  34. session.save(user);
  35. //提交事务
  36. trac.commit();
  37. //关闭资源
  38. session.close();
  39. sf.close();
  40. }
  41. @Test
  42. public void updateTest(){
  43. //1加载配置
  44. Configuration conf = new Configuration().configure();
  45. //2 根据Configuration 配置信息创建 SessionFactory
  46. SessionFactory sf = conf.buildSessionFactory();
  47. //3 获得session
  48. Session session = sf.openSession();
  49. //打开事务
  50. Transaction trac = session.beginTransaction();
  51.  
  52. //先查询出你要修改的对象
  53. User user = (User) session.get(User.class, 1);
  54.  
  55. //在查询结果上,进行修改
  56. user.setName("aaaa");
  57.  
  58. //提交事务
  59. trac.commit();
  60. //关闭资源
  61. session.close();
  62. sf.close();
  63. }
  64. @Test
  65. public void deleteTest(){
  66. //1加载配置
  67. Configuration conf = new Configuration().configure();
  68. //2 根据Configuration 配置信息创建 SessionFactory
  69. SessionFactory sf = conf.buildSessionFactory();
  70. //3 获得session
  71. Session session = sf.openSession();
  72. //打开事务
  73. Transaction trac = session.beginTransaction();
  74.  
  75. //先查询出你要修改的对象
  76. User user = new User();
  77. user.setId(3);
  78.  
  79. session.delete(user);
  80.  
  81. //提交事务
  82. trac.commit();
  83. //关闭资源
  84. session.close();
  85. sf.close();
  86. }
  87. @Test
  88. //Session对象 用于操作数据库
  89. //查询get
  90. public void getTest(){
  91. //1加载配置
  92. Configuration conf = new Configuration().configure();
  93. //2 根据Configuration 配置信息创建 SessionFactory
  94. SessionFactory sf = conf.buildSessionFactory();
  95. //3 获得session
  96. Session session = sf.openSession();
  97. //打开事务
  98. Transaction trac = session.beginTransaction();
  99.  
  100. //查询
  101. User user = (User) session.get(User.class, 4);
  102. System.out.println(user);
  103.  
  104. trac.commit();
  105. //关闭资源
  106. session.close();
  107. sf.close();
  108. }
  109.  
  110. @Test
  111. //Session对象 用于操作数据库
  112. //查询 load
  113. public void loadTest(){
  114. //1加载配置
  115. Configuration conf = new Configuration().configure();
  116. //2 根据Configuration 配置信息创建 SessionFactory
  117. SessionFactory sf = conf.buildSessionFactory();
  118. //3 获得session
  119. Session session = sf.openSession();
  120. //打开事务
  121. Transaction trac = session.beginTransaction();
  122.  
  123. User user = (User) session.load(User.class, 5);
  124. System.out.println(user);
  125. trac.commit();
  126. //关闭资源
  127. session.close();
  128. sf.close();
  129. }
  130. @Test
  131. //Session对象 用于操作数据库
  132. //查询所有User
  133. public void getAllTest(){
  134. //1加载配置
  135. Configuration conf = new Configuration().configure();
  136. //2 根据Configuration 配置信息创建 SessionFactory
  137. SessionFactory sf = conf.buildSessionFactory();
  138. //3 获得session
  139. Session session = sf.openSession();
  140. //打开事务
  141. Transaction trac = session.beginTransaction();
  142.  
  143. //HQL语言 => Hibernate Query Language
  144. //createQuery 传入hql语句查询
  145. //select * from t_user;
  146. //session.createQuery("com.alice.hibernate01.hello.User")
  147. Query query = session.createQuery(" from User");
  148.  
  149. List<User> list = query.list();
  150. System.out.println(list);
  151.  
  152. trac.commit();
  153. //关闭资源
  154. session.close();
  155. sf.close();
  156. }
  157. @Test
  158. //Session对象 用于操作数据库
  159. //查询所有User
  160. public void critieriaTest(){
  161. //1加载配置
  162. Configuration conf = new Configuration().configure();
  163. //2 根据Configuration 配置信息创建 SessionFactory
  164. SessionFactory sf = conf.buildSessionFactory();
  165. //3 获得session
  166. Session session = sf.openSession();
  167. //打开事务
  168. Transaction trac = session.beginTransaction();
  169.  
  170. //Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句
  171. Criteria criteria = session.createCriteria(User.class);
  172.  
  173. //select * from t_user;
  174. List<User> list = criteria.list();
  175. System.out.println(list);
  176.  
  177. trac.commit();
  178. //关闭资源
  179. session.close();
  180. sf.close();
  181. }
  182.  
  183. @Test
  184. //Session对象 用于操作数据库
  185. //查询所有User
  186. public void sqlQueryTest(){
  187. //1加载配置
  188. Configuration conf = new Configuration().configure();
  189. //2 根据Configuration 配置信息创建 SessionFactory
  190. SessionFactory sf = conf.buildSessionFactory();
  191. //3 获得session
  192. Session session = sf.openSession();
  193. //打开事务
  194. Transaction trac = session.beginTransaction();
  195.  
  196. //原生的Sql查询
  197. SQLQuery query = session.createSQLQuery("select * from t_user");
  198. // addEntity 将查询结果封装到指定对象中
  199. query.addEntity(User.class);
  200.  
  201. List<User> list = query.list();
  202. System.out.println(list);
  203.  
  204. trac.commit();
  205. //关闭资源
  206. session.close();
  207. sf.close();
  208. }
  209. }

  

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

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

    1.   Transaction 事务 事务的操作: 开启事务 beginTransaction() 获得事务 getTransaction() 提交事务:commit() 回滚事务:rollback ...

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

    一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...

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

    1):Configuration配置对象 Configuration用于加载配置文件. 1): 调用configure()方法,加载src下的hibernate.cfg.xml文件 Configura ...

  4. Hibernate学习三----------session详解

    © 版权声明:本文为博主原创文章,转载请注明出处 如何获取session对象 1. openSession 2. getCurrentSession - 如果使用getCurrentSession需要 ...

  5. Java8学习笔记(五)--Stream API详解[转]

    为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...

  6. 大数据学习笔记——Spark工作机制以及API详解

    Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调 ...

  7. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  8. Hibernate入门(二)——hibernateAPI详解

    Hibernate API 详解 1.Configuration 功能:配置加载类,用于加载主配置,orm元数据加载 .创建: Configuration conf = new Configurati ...

  9. OpenGL ES: (4) EGL API详解 (转)

    上一节我们初步学习了 OpenGL ES.EGL.GLSL 的相关概念,了解了它们的功能,以及它们之间的关联.我们知道了 EGL 是绘制 API(比如 OpenGL ES)与 底层平台窗口系统之间的接 ...

随机推荐

  1. JS小函数

    join()\toString(): join()函数和toString()函数都是返回字符串类型. 针对一个数组: var arr = ["I","love" ...

  2. linux 查看机器的cpu,操作系统等命令

    看cpu信息,型号,几核 [root@f3 ~]# cat /proc/cpuinfo | grep name | cut -f2 -d:| uniq -c 16 Intel(R) Xeon(R) C ...

  3. Post请求

    写在前面的话: XMLHttpRequest对象的open方法的第一个参数为request-type,取值可以为get或post.本篇介绍post请求. 使用post方式时,浏览器会把各表单中字段元素 ...

  4. [linux]crontab 命令执行问题

    在服务器上设置了一个R脚本的crontab任务,死活不执行.在网上搜了很久,终于解决了. 这里主要说一下crontab异常时,该如何排查. 假设cron命令为:* * * * Rscript /you ...

  5. UIColletionView 的属性与常用方法介绍

    UICollectionView基础   初始化部分: UICollectionViewFlowLayout *flowLayout= [[UICollectionViewFlowLayout all ...

  6. ACM:a^b%p-数论-快速幂-快速乘

    a^b Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: Description 求a的b次方,取模mod(1<=a,b ...

  7. BZOJ3293: [Cqoi2011]分金币

    Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...

  8. VS开发好用的扩展

    VS开发好用的扩展(转) 转自:http://www.haogongju.net/art/1977373 首先为大家介绍一下开发字体,做程序开发,代码可读性,在侧面也能帮助开发提高效率,所以给大家介绍 ...

  9. linux修改时区为中国时区(北京)

    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  10. 递归merge排序

    package sort; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scan ...