© 版权声明:本文为博主原创文章,转载请注明出处

实例

1.项目结构

2.pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3.  
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>org.hibernate</groupId>
  7. <artifactId>Hibernate-CRUD</artifactId>
  8. <packaging>war</packaging>
  9. <version>0.0.1-SNAPSHOT</version>
  10. <name>Hibernate-CRUD Maven Webapp</name>
  11. <url>http://maven.apache.org</url>
  12.  
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. <hibernate.version>5.1.6.Final</hibernate.version>
  16. </properties>
  17.  
  18. <dependencies>
  19. <!-- Junit -->
  20. <dependency>
  21. <groupId>junit</groupId>
  22. <artifactId>junit</artifactId>
  23. <version>4.12</version>
  24. <scope>test</scope>
  25. </dependency>
  26. <!-- hibernate -->
  27. <dependency>
  28. <groupId>org.hibernate</groupId>
  29. <artifactId>hibernate-core</artifactId>
  30. <version>${hibernate.version}</version>
  31. </dependency>
  32. <!-- MySQL -->
  33. <dependency>
  34. <groupId>mysql</groupId>
  35. <artifactId>mysql-connector-java</artifactId>
  36. <version>5.1.42</version>
  37. </dependency>
  38. </dependencies>
  39.  
  40. <build>
  41. <finalName>Hibernate-CRUD</finalName>
  42. </build>
  43. </project>

3.Student.java

  1. package org.hibernate.model;
  2.  
  3. import java.util.Date;
  4.  
  5. public class Student {
  6.  
  7. private long sid;// 学号
  8. private String sname;// 姓名
  9. private String gender;// 性别
  10. private Date birthday;// 生日
  11. private String address;// 地址
  12.  
  13. public Student() {
  14. }
  15.  
  16. public Student(String sname, String gender, Date birthday, String address) {
  17. this.sname = sname;
  18. this.gender = gender;
  19. this.birthday = birthday;
  20. this.address = address;
  21. }
  22.  
  23. public long getSid() {
  24. return sid;
  25. }
  26.  
  27. public void setSid(long sid) {
  28. this.sid = sid;
  29. }
  30.  
  31. public String getSname() {
  32. return sname;
  33. }
  34.  
  35. public void setSname(String sname) {
  36. this.sname = sname;
  37. }
  38.  
  39. public String getGender() {
  40. return gender;
  41. }
  42.  
  43. public void setGender(String gender) {
  44. this.gender = gender;
  45. }
  46.  
  47. public Date getBirthday() {
  48. return birthday;
  49. }
  50.  
  51. public void setBirthday(Date birthday) {
  52. this.birthday = birthday;
  53. }
  54.  
  55. public String getAddress() {
  56. return address;
  57. }
  58.  
  59. public void setAddress(String address) {
  60. this.address = address;
  61. }
  62.  
  63. @Override
  64. public String toString() {
  65. return "Student [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", birthday=" + birthday
  66. + ", address=" + address + "]";
  67. }
  68.  
  69. }

4.Student.hbm.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6.  
  7. <class name="org.hibernate.model.Student" table="STUDENT">
  8. <id name="sid" type="java.lang.Long">
  9. <column name="SID"/>
  10. <generator class="native"/>
  11. </id>
  12. <property name="sname" type="java.lang.String">
  13. <column name="SNAME"/>
  14. </property>
  15. <property name="gender" type="java.lang.String">
  16. <column name="GENDER"/>
  17. </property>
  18. <property name="birthday" type="date">
  19. <column name="BIRTHDAY"/>
  20. </property>
  21. <property name="address" type="java.lang.String">
  22. <column name="ADDRESS"/>
  23. </property>
  24. </class>
  25.  
  26. </hibernate-mapping>

5.hibernate.cfg.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6.  
  7. <!-- SessionFactory相关配置 -->
  8. <session-factory>
  9. <!-- 数据库连接相关配置 -->
  10. <property name="connection.username">root</property>
  11. <property name="connection.password">***</property>
  12. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  13. <property name="connection.url">
  14. jdbc:mysql:///hibernate?useSSL=true&amp;characterEncoding=UTF-8
  15. </property>
  16. <!-- 常用配置 -->
  17. <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
  18. <property name="hbm2ddl.auto">update</property>
  19. <property name="show_sql">true</property>
  20. <property name="format_sql">true</property>
  21. <!-- 引入映射文件 -->
  22. <mapping resource="hbm/Student.hbm.xml"/>
  23. </session-factory>
  24.  
  25. </hibernate-configuration>

6.TestCRUD.java

  1. package org.hibernate.test;
  2.  
  3. import java.util.Date;
  4.  
  5. import org.hibernate.Session;
  6. import org.hibernate.SessionFactory;
  7. import org.hibernate.Transaction;
  8. import org.hibernate.cfg.Configuration;
  9. import org.hibernate.model.Student;
  10. import org.junit.After;
  11. import org.junit.Before;
  12. import org.junit.Test;
  13.  
  14. public class TestCRUD {
  15.  
  16. private SessionFactory sessionFactory;
  17. private Session session;
  18. private Transaction transaction;
  19.  
  20. @Before
  21. public void before() {
  22.  
  23. Configuration config = new Configuration().configure();// 加载配置信息
  24. sessionFactory = config.buildSessionFactory();// 创建SessionFactory对象
  25. session = sessionFactory.openSession();// 创建Session对象
  26. transaction = session.beginTransaction();// 开启事务
  27.  
  28. }
  29.  
  30. @After
  31. public void after() {
  32.  
  33. transaction.commit();// 提交事务
  34. session.close();// 关闭Session
  35. sessionFactory.close();// 关闭SessionFactory
  36.  
  37. }
  38.  
  39. @Test
  40. public void testCreate() {
  41.  
  42. Student student = new Student("张三", "男", new Date(), "北京市");// 创建Student对象
  43. session.save(student);// 保存对象
  44.  
  45. }
  46.  
  47. @Test
  48. public void testRetrieveByGet() {
  49.  
  50. Student student = session.get(Student.class, 1L);// 通过get查询信息
  51. System.out.println(student);
  52.  
  53. }
  54.  
  55. @Test
  56. public void testRetrieveByLoad() {
  57.  
  58. Student student = session.load(Student.class, 1L);// 通过load查询信息
  59. System.out.println(student);
  60.  
  61. }
  62.  
  63. @Test
  64. public void testUpdate() {
  65.  
  66. Student student = session.load(Student.class, 1L);// 通过load查询信息
  67. student.setAddress("上海市");// 修改信息
  68. session.update(student);// 保存修改信息
  69.  
  70. }
  71.  
  72. @Test
  73. public void testDelete() {
  74.  
  75. Student student = session.load(Student.class, 1L);// 通过load查询信息
  76. session.delete(student);// 删除信息
  77.  
  78. }
  79.  
  80. }

7.效果预览

  7.1 执行testCreate()方法

  7.2 执行testRetrieveByGet()方法(带输出语句)

  7.3 执行testRetrieveByGet()方法(不带输出语句)

  7.4 执行testRetrieveByGet()方法(将主键由1L改为2L)

  1. @Test
  2. public void testRetrieveByGet() {
  3.  
  4. Student student = session.get(Student.class, 2L);// 通过get查询信息
  5. System.out.println(student);
  6.  
  7. }

  

  7.5 执行testRetrieveByLoad()方法(带输出语句)

  7.6 执行testRetrieveByLoad()方法(不带输出语句)

  7.7 执行testRetrieveByLoad()方法(将主键由1L改为2L)

  1. @Test
  2. public void testRetrieveByLoad() {
  3.  
  4. Student student = session.load(Student.class, 2L);// 通过load查询信息
  5. System.out.println(student);
  6.  
  7. }

  7.8 执行testUpdate()方法

  7.9 执行testDelete()方法

8.总结 

  - get和load的区别

    1.在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出SQL语句,返回持久化对象;load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出SQL语句

    2. 查询数据不存在的数据时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException

参考:http://www.imooc.com/video/7742

Hibernate学习六----------CRUD的更多相关文章

  1. hibernate学习 六 Hibernate缓存

    缓存: 如果在集群环境下使用Hibernate时,(集群有节点A ,节点B) 当请求,发往A节点,A在数据库中修改了一条记录,然后节点B的缓存中如何实时的更新节点A修改的新数据          hi ...

  2. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  3. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  4. Hibernate学习---缓存机制

    前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢. 在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我 ...

  5. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...

  6. Hibernate学习之——搭建log4j日志环境

    昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...

  7. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  8. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  9. TweenMax动画库学习(六)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

随机推荐

  1. 平滑升级nginx

    平滑升级nginx版本技术文档 作者 联系方式 日期 版本号 马坤 852115346@qq.com 2017-12-31 V1.0.0 备注:作者水平有限,难免出现错误.如若发现错误,请您及时与作者 ...

  2. 【报错】IntelliJ IDEA中绿色注释扫描飘红报错解决

    几天开机,突然发现自己昨天的项目可以运行,今天就因为绿色注释飘红而不能运行,很是尴尬: 解决办法如下: 1.在IDEA中的setting中搜索:"javadoc" 2.把Javad ...

  3. UIImage与Base64相互转换

    UIImage与Base64相互转换 采用第三方类 Address:https://github.com/l4u/NSData-Base64/ 经测试好用. 2013-07-17

  4. TCP/IP协议详解笔记——IP协议

    简介 TCP/IP协议族中最核心的协议,提供不可靠.无连接的数据报传输服务. 不可靠:不能保证IP数据报能成功送达. 无连接:并不维护后续数据报的状态信息,每个数据报的处理都是相互独立.数据报可能不会 ...

  5. 归并排序Merge sort(转)

    原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 2 4 1 5 9] 先看一下每个步骤下的状态, ...

  6. error LNK2001: unresolved external symbol __imp__WSAStartup@8 SOCKET(转)

    VC6.0下的错误信息: error LNK2001: unresolved external symbol __imp__socket@12 error LNK2001: unresolved ex ...

  7. Integer.ParseInt()异常

    这里传参数:bookPage.nextPage,action接收到的是string型. 程序需要将string转成int来使用. 用上try { pageNUmber = Integer.parseI ...

  8. CCCC L2-003. 月饼[贪心/类似hdu贪心老鼠]

    L2-003. 月饼 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不 ...

  9. c++语言虚函数实现多态的原理(更新版)

    自上一个帖子之间跳过了一篇总结性的帖子,之后再发,今天主要研究了c++语言当中虚函数对多态的实现,感叹于c++设计者的精妙绝伦 c++中虚函数表的作用主要是实现了多态的机制.首先先解释一下多态的概念, ...

  10. 洛谷——P1462 通往奥格瑞玛的道路

    P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...