1. package com.hanqi.test;
  2.  
  3. import static org.junit.Assert.*;
  4.  
  5. import java.util.Date;
  6.  
  7. import org.hibernate.Session;
  8. import org.hibernate.SessionFactory;
  9. import org.hibernate.Transaction;
  10. import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
  11. import org.hibernate.cfg.Configuration;
  12. import org.hibernate.service.ServiceRegistry;
  13. import org.junit.After;
  14. import org.junit.Before;
  15. import org.junit.Test;
  16.  
  17. import com.hanqi.entity.User;
  18.  
  19. public class Test01 {
  20. private ServiceRegistry sr =null;
  21. private Session se =null;
  22. private Transaction ts = null;
  23. private SessionFactory sf = null;
  24. //在测试用例方法被执行之前自动执行的方法
  25. //一般用来初始化公用的对象
  26. //前置方法
  27. @Before
  28. public void init()
  29. {
  30.  
  31. //1.获取配置文件
  32. Configuration cfg = new Configuration().configure();
  33.  
  34. //2.注册配置
  35. sr =new StandardServiceRegistryBuilder()
  36. .applySettings(cfg.getProperties()).build();
  37.  
  38. //3. 获取Session-Factory(相当于JDBCd 连接)
  39. sf = cfg.buildSessionFactory(sr);
  40.  
  41. System.out.println(sf);
  42.  
  43. //4.产生Session(回话)
  44. se = sf.openSession(); //创建
  45.  
  46. //5.启动事务
  47. ts = se.beginTransaction();
  48.  
  49. }
  50.  
  51. //后置方法
  52. //一般用来释放资源
  53. @After
  54. public void destroy()
  55. {
  56.  
  57. //7.提交事务
  58. ts.commit();
  59.  
  60. //8释放资源
  61. se.close();
  62. sf.close();
  63.  
  64. }
  65. //测试Hibernate连接数据库
  66. @Test
  67. public void test() {
  68.  
  69. //1.获取配置文件
  70. Configuration cfg = new Configuration().configure();
  71.  
  72. //2.注册配置
  73. ServiceRegistry sr =new StandardServiceRegistryBuilder()
  74. .applySettings(cfg.getProperties()).build();
  75.  
  76. //3. 获取Session-Factory(相当于JDBCd 连接)
  77. SessionFactory sf = cfg.buildSessionFactory(sr);
  78.  
  79. System.out.println(sf);
  80.  
  81. //4.产生Session(回话)
  82. Session se = sf.openSession(); //创建
  83.  
  84. //5.启动事务
  85. Transaction ts = se.beginTransaction();
  86.  
  87. //6.操作数据库
  88. //添加数据
  89. //实例化的新的对象,处于临时状态
  90. User u1 = new User();
  91. u1.setBirthday(new Date());
  92. u1.setMoney(2000);
  93. u1.setPassword("111111");
  94. u1.setUserName("测试1");
  95. //u1.setUserId(2);//自然主键
  96.  
  97. //保存数据
  98. //透过save方法吧对象从临时状态变成持久化状态
  99. se.save(u1);//添加数据
  100.  
  101. System.out.println("u1="+u1);
  102.  
  103. //7.提交事务
  104. ts.commit();
  105.  
  106. //释放资源
  107. se.close();
  108. sf.close();
  109.  
  110. }
  111.  
  112. //测试查询
  113. @Test
  114. public void test01()
  115. {
  116. //查询数据
  117. //提供两个参数
  118. //1需要返回哪一个持久化类的实例
  119. //2实例的标识(数据的主键值)
  120. //通过Session的get方法获得的对象处于持久化状态
  121. User u2 =(User)se.get(User.class, 3);//查找
  122. u2.setUserName("修改的");//修改
  123.  
  124. System.out.println(u2);
  125. //删除
  126. se.delete(u2);//使持久化对象进入删除状态
  127. }
  128. @Test
  129. public void test02()//测试缓存
  130. {
  131. User u1 = (User) se.get(User.class, 4);//立即加载数据
  132. System.out.println("get老付变傻逼之后");
  133. System.out.println(u1);
  134. User u2 =(User) se.get(User.class, 14);
  135. System.out.println(u2);
  136. }
  137.  
  138. @Test
  139. public void tese03()
  140. {
  141.  
  142. User u1 =(User)se.load(User.class, 14);//延时加载数据(懒加载)
  143. System.out.println("load后");
  144. System.out.println(u1);//当使用时才加载
  145. }
  146.  
  147. //测试游离状态
  148. @Test
  149. public void test04()
  150. {
  151. User u1=(User)se.get(User.class, 4);//得到持久化状态的对象
  152. System.out.println("u1="+u1);
  153.  
  154. //关闭Session
  155. se.close();
  156.  
  157. //使u1进入游离状态
  158. u1.setUserName("测试游离111");
  159. u1.setUserId(null);//把id设为null
  160. System.out.println("这是啥,重新创建session");
  161. //重新创建session
  162. se=sf.openSession();
  163. ts=se.beginTransaction();//重新开启事务
  164.  
  165. //se.saveOrUpdate(u1);
  166. System.out.println("u1="+u1);
  167. }
  168. }

  

Hibernate---单条记录的增删改查的更多相关文章

  1. hibernate关联对象的增删改查------查

    本篇博客是之前博客hibernate关联对象的增删改查------查 的后继,本篇代码的设定都在前文已经写好,因此读这篇之前,请先移步上一篇博客 //代码片5 SessionFactory sessi ...

  2. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  3. mysql对库,表及记录的增删改查

    破解密码 #1.关闭mysqlnet stop mysqlmysql还在运行时需要输入命令关闭,也可以手动去服务关闭 #2.重新启动mysqld --skip-grant-tables跳过权限 #3m ...

  4. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  5. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

    前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...

  6. hibernate关联对象的增删改查------增

    本文可作为,北京尚学堂马士兵hibernate课程的学习笔记. 这一节,我们看看hibernate关联关系的增删改查 就关联关系而已,咱们在上一节已经提了很多了,一对多,多对一,单向,双向... 其实 ...

  7. Hibernate进行对象的增删改查

    首先我们看看hibernate手动配置步骤 (这个了解一点就可以了,以后是不会自己全部手动配置的) 1.    创建WEB项目 2       下载hibernate-release-4.3.11.F ...

  8. Hibernate——(2)增删改查

    案例名称:Hibernate完成增删改查 案例描述:抽取出工具类并完成删除.修改.查询功能. 具体过程: 1.使用上面的例子(Hibernate--(1)Hibernate入门http://blog. ...

  9. MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能

    数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...

  10. Hibernate常用api以及增删改查

    一   .API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口).就是类库对外提供的接口.类.枚举.注解等元素. 如:JDK API ...

随机推荐

  1. Waiting Processed Cancelable ShowDialog (Release 2)

    namespace Test { using System; using System.Windows.Forms; static class Program { /// <summary> ...

  2. Linux学习笔记(21) Linux日志管理

    1. 简介 (1) 日志服务 在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式 ...

  3. C语言字符串操作常用库函数

    C语言字符串操作常用库函数 *********************************************************************************** 函数 ...

  4. SpringRMI解析2-RmiServiceExporter逻辑脉络

    配置文件是Spring的核心,在配置文件中我们可以看到,定义了两个bean,其中一个是对接口实现类的发布,而另一个则是对RMI服务的发布,使用org.springframework.remoting. ...

  5. Zepto tap 穿透bug

    当两个层重叠在一起时,使用Zepto的tap事件时,点击上面的一层时会触发下面一层的事件,特别是底层如果是input框时,必“穿透”,“google”说原因是“tap事件实际上是在冒泡到body上时才 ...

  6. 在html 中嵌入优酷视频

    <html> <embed src="http://player.youku.com/player.php/sid/XMjAzOTk4NjI4/v.swf" qu ...

  7. DFS(连通块) ZOJ 2743 Bubble Shooter

    题目传送门 题意:从炮台射出一个球,三个及以上颜色相同的会掉落,问最后会掉落多少个球 分析:先从炮台找一个连通块,然后与顶部连接的连通块都不会掉落,剩下的就是炮台射出后跟随掉落的. #include ...

  8. AC自动机(二维) UVA 11019 Matrix Matcher

    题目传送门 题意:训练指南P218 分析:一行一行的插入,一行一行的匹配,当匹配成功时将对应子矩阵的左上角位置cnt[r][c]++;然后统计 cnt[r][c] == x 的数量 #include ...

  9. iOS NSDate获取当前时间并格式化

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyyy-MM- ...

  10. 【原】iOS多线程之线程间通信和线程互斥

    线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后 ...