使用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);
}
}
关于使用Hibernate如何实现对数据库进行增删改查操作问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。