本节继续hibernate对数据库的其他操作,删除、查询、修改。

Hibernate对数据删除操作
删除User表中个一条数据,是需要更具User表的主键id值来删除的。首先根据id值向数据库中查询出来对应的对象。可以采用两种方式一是session的get方法,一个是session的load方法。
Session的Get方法:调用这个方法会返回一个Object对象。然后我们对其强制转换。Useruser = (User)session.get(User.class,” 402881e5441c035e01441c0360510003”); 当我们传递id值在数据中查找没有相应的结果时,get方法会返回一个null值。
区别:get方法加载的时候会立刻发出sql语句去查询,而load方法在执行的时候没有立刻的发出sql去查询,生成一个代理User,没有生成真正的User。当我们真正的去用这个user的时候才会加载真正的User。Load()支持延迟加载,而Get()不支持延迟加载。Get加载的对象不存在时返回的是null对象,而Load()加载对象不存在时会抛出ObjectNotFoundException异常。
Session的Load方法:同样是调用这个方法返回一个Object对象,再进行强制转换。
然后我们通过get或load加载上来对应user表id的对象,再调用session的delete方法删除该对象同时删除表中的一条记录,代码如下所示。
第一种删除方式
publicvoid testDel1()
{
Sessionsession =null;
try
{
session= HibernateUtils.getSession();
//开启事务.
session.beginTransaction();
//采用load查询不存在的数据,hibernate会抛出object not found exception
Useruser = (User)session.load(User.class,"402881e5441c035e01441c0360510003");
//删除表中的记录.
//删除,建议用此种方式删除,先加载再删除.
session.delete(user);
//提交事务.把内存的改变提交到数据库上.
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
第二种删除方式,手动构造detached对象再删除。代码如下所示。
//测试方法以test开头.测试del方法.返回存在的加载的.
publicvoid testDel2()
{
Sessionsession =null;
try
{
session= HibernateUtils.getSession();
//开启事务.
session.beginTransaction();
//手动构造的Detached对象.
Useruser =new User();
user.setId("402881e4441b3d1c01441b3f5dfe0001");
session.delete(user);
//提交事务.把内存的改变提交到数据库上.
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
Hibernate对数据查询操作
一般查询,代码如下所示。
//查询方法.
publicvoid testQuery1()
{
Sessionsession =null;
try
{
session= HibernateUtils.getSession();
session.beginTransaction();
//参数是一个字符串,是HQL的查询语句.注意此时的的UserU为大写,为对象的,而不是表的.
Queryquery = session.createQuery("from User");
//使用List方法.
ListuserList = query.list();
//迭代器去迭代.
for(Iteratoriter=userList.iterator();iter.hasNext();)
{
Useruser =(User)iter.next();
System.out.println("id="+user.getId() + "name="+user.getName());
}
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
分页查询,代码如下所示。
//分页查询,从什么地方查,查几个;
publicvoid testQuery2()
{
Sessionsession =null;
try
{
session=HibernateUtils.getSession();
session.beginTransaction();
//参数是一个字符串,是HQL的查询语句.注意此时的的UserU为大写,为对象的,而不是表的.
Queryquery = session.createQuery("from User");
//从第一个开始查起.可以设置从第几个查起.
query.setFirstResult(0);
//最大条数为两个
query.setMaxResults(2);
//使用List方法.
ListuserList = query.list();
//迭代器去迭代.
for(Iteratoriter=userList.iterator();iter.hasNext();)
{
Useruser =(User)iter.next();
System.out.println("id="+user.getId() + "name="+user.getName());
}
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
Hibernate对数据更新操作
手动构造detached对象,调用session的update()方法,代码如下所示。
//测试方法以test开头.测试update方法.返回存在的加载的.
publicvoid testUpdate1()
{
Sessionsession =null;
try
{
session= HibernateUtils.getSession();
//开启事务.
session.beginTransaction();
//采用load查询不存在的数据,hibernate会抛出object not found exception
//手动构造的Detached对象.
Useruser =newUser();
user.setId("402881e5441bfb0601441bfb075b0002");
user.setName("周六");
session.update(user);
//提交事务.把内存的改变提交到数据库上.
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
加载对象,调用session的update()方法,让对象处于持久化状态的时候进行更新操作,代码如下所示。
//测试方法以test开头.测试update方法.返回存在的加载的.
publicvoid testUpdate2()
{
Sessionsession =null;
try
{
session= HibernateUtils.getSession();
//开启事务.
session.beginTransaction();
//采用load查询不存在的数据,hibernate会抛出object not found exception
//先把要更新的查出来.
//建议采用此种方式,先加载再更新的方式.
Useruser = (User)session.load(User.class,"402881e5441bfb0601441bfb075b0002");
//查出来的话就直接放入了.处于持久化状态.
user.setName("周日");
//显示的调用,因为为持久化状态也可以不显示调用.
session.update(user);
//提交事务.把内存的改变提交到数据库上.
session.getTransaction().commit();
}catch(Exceptione){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# hibernate4操作数据库
# hibernate查询数据库
# hibernate更新数据库
# Hibernate中Session增删改查操作代码详解
# hibernate通过session实现增删改查操作实例解析
# hibernate增删改查操作代码
# 全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制
# hibernate批量操作实例详解
# Java的Hibernate框架数据库操作中锁的使用和查询类型
# Java的Hibernate框架中用于操作数据库的HQL语句讲解
# Hibernate单表操作实例解析
# 加载
# 所示
# 不存在
# 抛出
# 是一个
# 迭代
# 几个
# 分页
# 当我们
# 此种
# 的是
# 而不是
# 法会
# 第一个
# 一是
# 才会
# 两种
# 对其
# 不支持
# 什么地方
相关文章:
存储型VPS适合搭建中小型网站吗?
网站网页制作专业公司,怎样制作自己的网页?
建站主机与虚拟主机有何区别?如何选择最优方案?
大连网站设计制作招聘信息,大连投诉网站有哪些?
中山网站制作网页,中山新生登记系统登记流程?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
建站之星安装路径如何正确选择及配置?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
如何零基础开发自助建站系统?完整教程解析
香港网站服务器数量如何影响SEO优化效果?
建站之星安装后界面空白如何解决?
如何通过虚拟主机快速搭建个人网站?
如何在万网自助建站中设置域名及备案?
如何在IIS7上新建站点并设置安全权限?
香港服务器租用费用高吗?如何避免常见误区?
如何彻底卸载建站之星软件?
建站之星备案是否影响网站上线时间?
如何配置IIS站点权限与局域网访问?
定制建站是什么?如何实现个性化需求?
,怎么在广州志愿者网站注册?
个人摄影网站制作流程,摄影爱好者都去什么网站?
建站之星安装模板失败:服务器环境不兼容?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
h5网站制作工具有哪些,h5页面制作工具有哪些?
宝塔面板创建网站无法访问?如何快速排查修复?
已有域名能否直接搭建网站?
建站org新手必看:2024最新搭建流程与模板选择技巧
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
非常酷的网站设计制作软件,酷培ai教育官方网站?
潮流网站制作头像软件下载,适合母子的网名有哪些?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
网站图片在线制作软件,怎么在图片上做链接?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
宁波自助建站系统如何快速打造专业企业网站?
,如何利用word制作宣传手册?
如何彻底删除建站之星生成的Banner?
北京的网站制作公司有哪些,哪个视频网站最好?
如何用花生壳三步快速搭建专属网站?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
b2c电商网站制作流程,b2c水平综合的电商平台?
如何快速搭建FTP站点实现文件共享?
如何快速查询网址的建站时间与历史轨迹?
,购物网站怎么盈利呢?
内部网站制作流程,如何建立公司内部网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。