1. package com.test;
  2.  
  3. import com.demo.User;
  4. import org.hibernate.HibernateException;
  5. import org.hibernate.Session;
  6. import org.hibernate.SessionFactory;
  7. import org.hibernate.Transaction;
  8. import org.hibernate.cfg.Configuration;
  9. import org.junit.Test;
  10.  
  11. import java.util.Arrays;
  12. import java.util.List;
  13.  
  14. /*
  15. * 没有借住HibernateUtil小工具
  16. */
  17. public class crudTest {
  18.  
  19. private static SessionFactory sessionFactory; // 工厂只有一个 根据配置文件来生成的
  20. static {
  21. Configuration cfg = new Configuration();
  22. // cfg.configure();//默认自动配置src下的hibernate.cfg.xml
  23. // cfg.addResource("com/demo/user.hbm.xml");//增加一个映射文件 在配置里面已经配置过了)
  24. // cfg.addClass(User.class);//去user类所在的包中查找名称为User,后缀为.hbm.xml的文件
  25. cfg.configure("hibernate.cfg.xml");// 读取指定的主配置文件(位置也可不需指定,默认自动查找src下的cfg.xml)
  26. sessionFactory = cfg.buildSessionFactory(); // 生成session工厂
  27. }
  28.  
  29. @Test
  30. public void testSave() throws Exception {
  31. User u = new User();
  32. u.setName("bb");
  33. u.setPassword("");
  34. u.setType("root");
  35.  
  36. Session ses = sessionFactory.openSession(); // 打开一个新的session
  37. Transaction ts = ses.beginTransaction(); // 开始事务---- 创建事务的对象ts
  38.  
  39. try {
  40. ses.save(u);// 往表user1存数据
  41. ts.commit();// 提交事务
  42. } catch (HibernateException he) {
  43. he.printStackTrace();
  44. System.out.println("死了");
  45. ts.rollback();//事务的回滚
  46. } finally {
  47. ses.close();
  48. sessionFactory.close();
  49. System.out.println("插入成功");
  50. }
  51. }
  52.  
  53. @Test
  54. public void testGet() throws Exception {
  55. Session session = sessionFactory.openSession();
  56. Transaction tx = session.beginTransaction();
  57.  
  58. User user = (User) session.get(User.class, );// 获取User表中的字段1
  59. System.out.println(user);// toString方法已经重写 [User:id=1,name=hoobey,password=456,type=admin]
  60.  
  61. tx.commit();
  62. session.close();
  63. }
  64.  
  65. @Test
  66. public void testHQL() {
  67. Session session = sessionFactory.openSession();
  68. Transaction tx = session.beginTransaction();
  69. String hql = null;
  70.  
  71. // 执行查询
  72. // 1.简单的查询
  73. /* hql = "FROM User"; */
  74.  
  75. // 2.带上过滤条件以及排序from User as u --使用别名 as可以省略
  76. /* hql="from User u where u.id = 1"; */
  77. // 3.指定select子句
  78. hql = "select u.id , u.name from User u";//查询多个指定的列时 返回的是数组 输出使用Array.toString()
  79.  
  80. List list = session.createQuery(hql).list();
  81. for(Object obj : list){
  82. if(obj.getClass().isArray()){
  83. System.out.println(Arrays.toString((Object[])obj));//查询返回的数组时
  84. }else{
  85. System.out.println(obj);//查询返回的是原属性的类型时 直接输出 }
  86. }
  87. }
  88. // ---------------第二部分的学习-----------------------------
  89.  
  90. // 1,聚集函数:count(), max(), min(), avg(), sum()
  91. // hql = "SELECT COUNT(*) FROM User"; // 返回的结果是Long型的
  92. // hql = "SELECT min(id) FROM Employee"; // 返回的结果是id属性的类型
  93. // Number result = (Number) session.createQuery(hql).uniqueResult();
  94. // System.out.println(result.getClass());
  95. // System.out.println(result);
  96.  
  97. // 2,分组: Group By ... Having
  98. // hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name";
  99. // hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1";
  100. // hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1";
  101. // ---
  102. // hql = "SELECT e.name,COUNT(e.id) " + //
  103. // "FROM Employee e " + //
  104. // "WHERE id<9 " + //
  105. // "GROUP BY e.name " + //
  106. // "HAVING count(e.id)>1 " + //
  107. // "ORDER BY count(e.id) ASC";
  108. // ---
  109. // hql = "SELECT e.name,COUNT(e.id) AS c " + //
  110. // "FROM Employee e " + //
  111. // "WHERE id<9 " + //
  112. // "GROUP BY e.name " + //
  113. // "HAVING count(e.id)>1 " + // 在having子句中不能使用列别名
  114. // "ORDER BY c ASC"; // 在orderby子句中可以使用列别名
  115.  
  116. // 3,连接查询 / HQL是面向对象的查询
  117. // >> 内连接(inner关键字可以省略)
  118. // hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d";
  119. // hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";
  120. // >> 左外连接(outer关键字可以省略)
  121. // hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
  122. // >> 右外连接(outer关键字可以省略)
  123. // hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d";
  124. // 可以使用更方便的方法
  125. // hql = "SELECT e.id,e.name,e.department.name FROM Employee e";
  126.  
  127. // 4,查询时使用参数
  128. // >> 方式一:使用'?'占位
  129. // hql = "FROM Employee e WHERE id BETWEEN ? AND ?";
  130. // List list = session.createQuery(hql)//
  131. // .setParameter(0, 5)// 设置参数,第1个参数的索引为0。
  132. // .setParameter(1, 15)//
  133. // .list();
  134.  
  135. // >> 方式二:使用变量名
  136. // hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";
  137. // List list = session.createQuery(hql)//
  138. // .setParameter("idMax", 15)//
  139. // .setParameter("idMin", 5)//
  140. // .list();
  141.  
  142. // 当参数是集合时,一定要使用setParameterList()设置参数值
  143. // hql = "FROM Employee e WHERE id IN (:ids)";
  144. // List list = session.createQuery(hql)//
  145. // .setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })//
  146. // .list();
  147.  
  148. // 5,使用命名查询
  149. // Query query = session.getNamedQuery("queryByIdRange");
  150. // query.setParameter("idMin", 3);
  151. // query.setParameter("idMax", 10);
  152. // List list = query.list();
  153.  
  154. // 6,update与delete,不会通知Session缓存
  155. // >> Update
  156. // int result = session.createQuery(//
  157. // "UPDATE User e SET e.name=? WHERE user_id = 2")//
  158. // .setParameter(0, "hghg")//
  159. // .executeUpdate(); // 返回int型的结果,表示影响了多少行。
  160. // System.out.println("result = " + result);
  161.  
  162. // User user = (User)session.get(User.class, 1);
  163. // System.out.println(user.getName());
  164. // >> Delete
  165. /*
  166. * int result = session.createQuery(// "DELETE FROM Employee e WHERE id>15")// .executeUpdate(); // 返回int型的结果,表示影响了多少行。 System.out.println("result = " + result);
  167. */
  168.  
  169. // ----- 执行查询并显示结果
  170. // // List list = session.createQuery(hql).list();
  171. // for (Object obj : list) {
  172. // if (obj.getClass().isArray()) {
  173. // System.out.println(Arrays.toString((Object[]) obj));
  174. // } else {
  175. // System.out.println(obj);
  176. // }
  177. // }
  178.  
  179. tx.commit();
  180. session.close();
  181. }
  182. }

hibernate的入门crud的更多相关文章

  1. Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  2. Hibernate从入门到精通(十)多对多单向关联映射

    上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...

  3. Hibernate从入门到精通(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映射,即在一的 ...

  4. Hibernate从入门到精通(八)一对多单向关联映射

    上次的博文Hibernate从入门到精通(七)多对一单向关联映射我们主要讲解了一下多对一单向关联映射,这次我们继续讲解一下一对多单向映射. 一对多单向关联映射 在讲解一对多单向关联之前,按照我们的惯例 ...

  5. Hibernate从入门到精通(七)多对一单向关联映射

    上次的博文Hibernate从入门到精通(六)一对一双向关联映射中我们介绍了一下一对一双向关联映射,本次博文我们讲解一下多对一关联映射 多对一单向关联映射 多对一关联映射与一对一关联映射类似,只是在多 ...

  6. Hibernate从入门到精通(六)一对一双向关联映射

    在上次的博文Hibernate从入门到精通(五)一对一单向关联映射中我们讲解了一下一对一单向关联映射,这次我们继续讲解一下与之对应的一对一双向关联映射. 一对一双向关联 与一对一单向关联映射所不同的的 ...

  7. Hibernate从入门到精通(五)一对一单向关联映射

    上次的博文中Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理多个相关对象和 ...

  8. Hibernate从入门到精通(四)基本映射

    映射的概念 在上次的博文Hibernate从入门到精通(三)Hibernate配置文件我们已经讲解了一下Hibernate中的两种配置文件,其中提到了两种配置文件的主要区别就是XML可以配置映射.这里 ...

  9. Hibernate从入门到精通(三)Hibernate配置文件

    在上次的博文Hibernate从入门到精通(二)Hibernate实例演示我们已经通过一个实例的演示对Hibernate的基本使用有了一个简单的认识,这里我们在此简单回顾一下Hibernate框架的使 ...

随机推荐

  1. 为什么用freemarker视图?

    在java领域,表现层技术主要有三种:jsp.freemarker.velocity. jsp是大家最熟悉的技术优点:1.功能强大,可以写java代码2.支持jsp标签(jsp tag)3.支持表达式 ...

  2. 反恐24小时第一季/全集24 Live Another Day迅雷下载

    反恐24小时 第一至九季 24 Season 1-9 (2001-2014) 本季看点:<24小时>第8季将在拥有美国的象征自由女神像的纽约开始,在新的一天,CTU重新开张,新的领导为从M ...

  3. ThreadLocal 与 Request 和 Session 之关联

    ThreadLocal<T> 类行是 .NET Framework 4.0 才开始支持的类型,MSDN 的解释只有简单的一句话:提供数据的线程本地存储,其提供的实例代码也不太好,有点为了演 ...

  4. org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.xugao.bean.MemberLevel.memberpointrate

    由于数据不合法的原因,好几次遇到: org.hibernate.PropertyAccessException: Null value was assigned to a property of pr ...

  5. 访问Oracle数据库的工具【unfinished】

    ylbtech-Oracle:访问Oracle数据库的工具 访问Oracle数据库的工具 1. SQL*PLUS返回顶部 1.0, 1.0.1, 之network\admin\tnsnames.ora ...

  6. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.cpp --模型准备

    辅助函数和构造函数. #include <iostream> #include <math.h> #include "dA.h" using namespa ...

  7. go语言之进阶篇文件常用操作接口介绍和使用

    一.文件常用操作接口介绍 1.创建文件 法1: 推荐用法 func Create(name string) (file *File, err Error) 根据提供的文件名创建新的文件,返回一个文件对 ...

  8. Spring Boot Maven 打包可执行Jar文件!

    Maven pom.xml 必须包含 <packaging>jar</packaging> <build> <plugins> <plugin&g ...

  9. Backbone.js 中使用 Model

    前面几篇 Backbone.js 的例子中有使用到 template, 及数据的填充,其实这已经很接近 Model 了.现在来学习怎么创建自己的 Model 类,并简单的使用.Backbone.js ...

  10. oracle sqlplus登陆命令

    1.语法:   {<username>[/<password>][@<connect_identifier>] | / }[AS {SYSDBA | SYSOPER ...