Hibernate对数据库删除、查找、更新操作实例代码

网友投稿 234 2023-05-19


Hibernate对数据库删除、查找、更新操作实例代码

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

Hibernate对数据删除操作

删除User表中个一条数据,是需要更具User表的主键id值来删除的。首先根据id值向数据库中查询出来对应的对象。可以采用两种方式一是sesfijipJnsion的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());

fijipJn }

http://

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);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:EOLINKER EPC 私有云 5.8 版本更新:API文档支持全局变更通知、自动化测试支持设置全局超时时间等
下一篇:java数据结构与算法之桶排序实现方法详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~