Hibernate学习六----------CRUD
© 版权声明:本文为博主原创文章,转载请注明出处
实例
1.项目结构
2.pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.hibernate</groupId>
- <artifactId>Hibernate-CRUD</artifactId>
- <packaging>war</packaging>
- <version>0.0.1-SNAPSHOT</version>
- <name>Hibernate-CRUD Maven Webapp</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <hibernate.version>5.1.6.Final</hibernate.version>
- </properties>
- <dependencies>
- <!-- Junit -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
- <!-- hibernate -->
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${hibernate.version}</version>
- </dependency>
- <!-- MySQL -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.42</version>
- </dependency>
- </dependencies>
- <build>
- <finalName>Hibernate-CRUD</finalName>
- </build>
- </project>
3.Student.java
- package org.hibernate.model;
- import java.util.Date;
- public class Student {
- private long sid;// 学号
- private String sname;// 姓名
- private String gender;// 性别
- private Date birthday;// 生日
- private String address;// 地址
- public Student() {
- }
- public Student(String sname, String gender, Date birthday, String address) {
- this.sname = sname;
- this.gender = gender;
- this.birthday = birthday;
- this.address = address;
- }
- public long getSid() {
- return sid;
- }
- public void setSid(long sid) {
- this.sid = sid;
- }
- public String getSname() {
- return sname;
- }
- public void setSname(String sname) {
- this.sname = sname;
- }
- public String getGender() {
- return gender;
- }
- public void setGender(String gender) {
- this.gender = gender;
- }
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- @Override
- public String toString() {
- return "Student [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", birthday=" + birthday
- + ", address=" + address + "]";
- }
- }
4.Student.hbm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="org.hibernate.model.Student" table="STUDENT">
- <id name="sid" type="java.lang.Long">
- <column name="SID"/>
- <generator class="native"/>
- </id>
- <property name="sname" type="java.lang.String">
- <column name="SNAME"/>
- </property>
- <property name="gender" type="java.lang.String">
- <column name="GENDER"/>
- </property>
- <property name="birthday" type="date">
- <column name="BIRTHDAY"/>
- </property>
- <property name="address" type="java.lang.String">
- <column name="ADDRESS"/>
- </property>
- </class>
- </hibernate-mapping>
5.hibernate.cfg.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <!-- SessionFactory相关配置 -->
- <session-factory>
- <!-- 数据库连接相关配置 -->
- <property name="connection.username">root</property>
- <property name="connection.password">***</property>
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="connection.url">
- jdbc:mysql:///hibernate?useSSL=true&characterEncoding=UTF-8
- </property>
- <!-- 常用配置 -->
- <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
- <property name="hbm2ddl.auto">update</property>
- <property name="show_sql">true</property>
- <property name="format_sql">true</property>
- <!-- 引入映射文件 -->
- <mapping resource="hbm/Student.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
6.TestCRUD.java
- package org.hibernate.test;
- import java.util.Date;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import org.hibernate.model.Student;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- public class TestCRUD {
- private SessionFactory sessionFactory;
- private Session session;
- private Transaction transaction;
- @Before
- public void before() {
- Configuration config = new Configuration().configure();// 加载配置信息
- sessionFactory = config.buildSessionFactory();// 创建SessionFactory对象
- session = sessionFactory.openSession();// 创建Session对象
- transaction = session.beginTransaction();// 开启事务
- }
- @After
- public void after() {
- transaction.commit();// 提交事务
- session.close();// 关闭Session
- sessionFactory.close();// 关闭SessionFactory
- }
- @Test
- public void testCreate() {
- Student student = new Student("张三", "男", new Date(), "北京市");// 创建Student对象
- session.save(student);// 保存对象
- }
- @Test
- public void testRetrieveByGet() {
- Student student = session.get(Student.class, 1L);// 通过get查询信息
- System.out.println(student);
- }
- @Test
- public void testRetrieveByLoad() {
- Student student = session.load(Student.class, 1L);// 通过load查询信息
- System.out.println(student);
- }
- @Test
- public void testUpdate() {
- Student student = session.load(Student.class, 1L);// 通过load查询信息
- student.setAddress("上海市");// 修改信息
- session.update(student);// 保存修改信息
- }
- @Test
- public void testDelete() {
- Student student = session.load(Student.class, 1L);// 通过load查询信息
- session.delete(student);// 删除信息
- }
- }
7.效果预览
7.1 执行testCreate()方法
7.2 执行testRetrieveByGet()方法(带输出语句)
7.3 执行testRetrieveByGet()方法(不带输出语句)
7.4 执行testRetrieveByGet()方法(将主键由1L改为2L)
- @Test
- public void testRetrieveByGet() {
- Student student = session.get(Student.class, 2L);// 通过get查询信息
- System.out.println(student);
- }
7.5 执行testRetrieveByLoad()方法(带输出语句)
7.6 执行testRetrieveByLoad()方法(不带输出语句)
7.7 执行testRetrieveByLoad()方法(将主键由1L改为2L)
- @Test
- public void testRetrieveByLoad() {
- Student student = session.load(Student.class, 2L);// 通过load查询信息
- System.out.println(student);
- }
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的更多相关文章
- hibernate学习 六 Hibernate缓存
缓存: 如果在集群环境下使用Hibernate时,(集群有节点A ,节点B) 当请求,发往A节点,A在数据库中修改了一条记录,然后节点B的缓存中如何实时的更新节点A修改的新数据 hi ...
- Hibernate学习笔记(一)
2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
- Hibernate学习---缓存机制
前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢. 在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我 ...
- hibernate学习系列-----(2)hibernate核心接口和工作机制
在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...
- Hibernate学习之——搭建log4j日志环境
昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- TweenMax动画库学习(六)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
随机推荐
- 平滑升级nginx
平滑升级nginx版本技术文档 作者 联系方式 日期 版本号 马坤 852115346@qq.com 2017-12-31 V1.0.0 备注:作者水平有限,难免出现错误.如若发现错误,请您及时与作者 ...
- 【报错】IntelliJ IDEA中绿色注释扫描飘红报错解决
几天开机,突然发现自己昨天的项目可以运行,今天就因为绿色注释飘红而不能运行,很是尴尬: 解决办法如下: 1.在IDEA中的setting中搜索:"javadoc" 2.把Javad ...
- UIImage与Base64相互转换
UIImage与Base64相互转换 采用第三方类 Address:https://github.com/l4u/NSData-Base64/ 经测试好用. 2013-07-17
- TCP/IP协议详解笔记——IP协议
简介 TCP/IP协议族中最核心的协议,提供不可靠.无连接的数据报传输服务. 不可靠:不能保证IP数据报能成功送达. 无连接:并不维护后续数据报的状态信息,每个数据报的处理都是相互独立.数据报可能不会 ...
- 归并排序Merge sort(转)
原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 2 4 1 5 9] 先看一下每个步骤下的状态, ...
- error LNK2001: unresolved external symbol __imp__WSAStartup@8 SOCKET(转)
VC6.0下的错误信息: error LNK2001: unresolved external symbol __imp__socket@12 error LNK2001: unresolved ex ...
- Integer.ParseInt()异常
这里传参数:bookPage.nextPage,action接收到的是string型. 程序需要将string转成int来使用. 用上try { pageNUmber = Integer.parseI ...
- CCCC L2-003. 月饼[贪心/类似hdu贪心老鼠]
L2-003. 月饼 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不 ...
- c++语言虚函数实现多态的原理(更新版)
自上一个帖子之间跳过了一篇总结性的帖子,之后再发,今天主要研究了c++语言当中虚函数对多态的实现,感叹于c++设计者的精妙绝伦 c++中虚函数表的作用主要是实现了多态的机制.首先先解释一下多态的概念, ...
- 洛谷——P1462 通往奥格瑞玛的道路
P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...