Hibernate入门(4)- Hibernate数据操作
Hibernate加载数据
Session.get(Class clazz, Serializable id)
clazz:需要加载对象的类,例如:User.class
id:查询条件(实现了序列化接口的对象):
返回值: 此方法返回类型为Object,也就是对象,然后我们再强行转换为需要加载的对象就可以了。
如果数据不存在,则返回null;
注:执行此方法时立即发出查询SQL语句。加载User对象
加载数据库中存在的数据,代码如下
@Test
public void testLoad() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
User user = (User) session.get(User.class,"4028802c46d255740146d25576320000");
// 数据加载完后的状态为persistent状态。数据将与数据库同步。
System.out.println("user.name=" + user.getName());
// 因为此的user为persistent状态,所以数据库进行同步为龙哥。
user.setName("龙哥");
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
}
Object Session.load(Class clazz, Serializable id)
clazz:需要加载对象的类,例如:User.class
id:查询条件(实现了序列化接口的对象):例"4028802c46d255740146d25576320000"字符串已经实现了序列化接口。
此方法返回类型为Object,但返回的是代理对象。
执行此方法时不会立即发出查询SQL语句。只有在使用对象时,它才发出查询SQL语句,加载对象。
因为load方法实现了lazy(称为延迟加载、赖加载)
延迟加载:只有真正使用这个对象的时候,才加载(才发出SQL语句)
hibernate延迟加载实现原理是代理方式。
采用load()方法加载数据,如果数据库中没有相应的记录,则会抛出异常对象不找到(org.hibernate.ObjectNotFoundException)
复制代码
@Test
public void testLoad() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
User user = (User) session.load(User.class,
"4028802c46d255740146d25576320000");
// 只有在使用对象时,它才发出查询SQL语句,加载对象。
System.out.println("user.name=" + user.getName());
// 因为此的user为persistent状态,所以数据库进行同步为龙哥。
user.setName("发哥");
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
}
Hibernate两种加载数据方式的区别
- get()方法默认不支持lazy(延迟加载)功能,而load支持延迟加载
- get()方法在查询不到数据时,返回null,而load因为支持延迟加载,只有在使用对象时才加载,所以如果数据库中不在数据load会抛出异常(org.hibernate.ObjectNotFoundException)。
- get()和load()只根据主键查询,不能根据其它字段查询,如果想根据非主键查询,可以使用HQL
hibernate更新数据
建立使用hibernate进行更新数据时,先加载数据,然后再修改后更新。
否则一些字段可以会被null替换。
@Test
public void testDelete() {
Session session = null;
Transaction tx = null
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
User user = (User) session.load(User.class,
"4028802c46d255740146d25576320000");
session.delete(user);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
}
query接口初步
Query session.createQuery(String hql)方法;
- hibernate的session.createQuery()方法是使用HQL(hibernate的查询语句)语句查询对象的。
- hql:是查询对象的,例如:"from User",其中from不区分大小写,而User是区分大小写,因为它是对象。是User类
- 返回Query对象。
-执行这条语句后,Hibernate会根据配置文件中所配置的数据库适配器自动生成相应数据库的SQL语句。如:
hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.password as password0_,
user0_.createTime as createTime0_, user0_.expireTime as expireTime0_ from User user0_
代码示例
public Iterator getSomeDept(String name) throws HibernateException {
String queryString = "select u from Dept as u where u.name like :name";
beginTransaction();
Query query = session.createQuery(queryString);
query.setString("name", "%" + name + "%");
Iterator it = query.iterate();
return it;
}
Hibernate入门(4)- Hibernate数据操作的更多相关文章
- Hibernate入门6.Hibernate检索方式
Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...
- Hibernate入门1. Hibernate基础知识入门
Hibernate入门1. Hibernate基础知识入门 20131127 前言: 之前学习过Spring框架的知识,但是不要以为自己就可以说掌握了Spring框架了.这样一个庞大的Spring架构 ...
- Hibernate入门1 - Hibernate概述及第一个小例子
一.什么是ORM? ORM,即Object Relational Mapping.我们知道,利用面向对象的思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是需要编写与底层数据库相关的 ...
- hibernate 入门([数据访问中间件] 开源框架)
1.内容: hibernate 也是一个经典的[数据访问中间件] 开源框架. 2.hibernate核心组件 SessionFactory[整个数据的操作]重量级组件 ...
- 第八章 Hibernate数据操作技巧
第八章 Hibernate数据操作技巧8.1 分组统计数据 语法:[select]... from ...[where] [group by...[having...]] [order by ...
- hibernate入门-基本配置及简单的crud操作
框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...
- Hibernate的数据操作(4.*以上版本)
Hibernate的基本数据操作 适用于4.* ..sessionFactory的创建区别 public class NewsTest { private Session session = null ...
- 三大框架之hibernate入门
hibernate入门 1.orm hibernate是一个经典的开源的orm[数据访问中间件]框架 ORM( Object Relation Mapping)对象关 ...
- 浅谈Hibernate入门
前言 最近打算做一个自己的个人网站,经过仔细思考,打算使用hibernate作为开发的ORM框架,因此各种找资料,由于本人是刚刚接触这技术的,所以就找了比较基础的知识来分享下 基本概述 Hiberna ...
- Hibernate入门5持久化对象关系和批量处理技术
Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...
随机推荐
- Alphabetic Removals(模拟水题)
You are given a string ss consisting of nn lowercase Latin letters. Polycarp wants to remove exactly ...
- Java Class Object
Object类 它是所有类的基类. public class Person { } //实际上是 public class Person extends Object { } Object类的方法 t ...
- Java之I/O流(第2部分)
1. 节点类类型: 2. 访问文件: Demo_1: import java.io.FileInputStream; import java.io.FileNotFoundException; imp ...
- VS2005、VS2008中的快捷键、组合键大全
Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL ...
- iOS- 如何从Boujour里解析出IP地址(sockaddr *的解析)?
1.前言 之前有网友跟我留言说到: 如何从Boujour 解析完的数组里解析出ip地址? 因为Boujour本身解析完毕之后的addresses是一个数组 那我们如何从这个数组里解析出我们需要的IP地 ...
- 图解linux安装tomcat(附常用命令)
本例使用的是centos6.5版本,具体内容如下 一.首先到官方下载tomcat服务 http://tomcat.apache.org/download-70.cgi 二.将tomcat上传至linu ...
- Firefox火狐浏览器 修改默认搜索引擎
如图:
- (转)Linux NUMA引发的性能问题
最近某客户的核心业务系统又出了翻译缓慢的情况.该问题在6月份也出现过,当时进行了一次调整. 我们首先来看下故障时间段的awr报告: 单纯的从TOP 5 event,基本上是看不出任何东西的,可能有人会 ...
- ubuntu 只有客人会话登录(第一次深刻感受文件权限的威力 )
为了测试docker的挂载权限,把宿主机的/etc/passwd文件挂载到了虚机当中,进入虚机想看下能不能直接对我宿主机上的文件进行操作,把/etc/passwd删掉了最后十行...结果宿主机上的/e ...
- 显示系统中所有的socket信息
netstat -aon /proc/net/tcp /proc/net/udp /proc/net/unix 相关的代码是:tcp4_seq_show(struct seq_file *file, ...