Hibernate操作数据库

从网上学着用Hibernate操作数据库:

   通过Hibernate可以简化对数据库的操作,本节首先创建一个HibernateUtil类,用于管理session,然后介绍如何通过Hibernate实现数据库的查询、插入、删除和更新操作。 
SessionFactory用来创建Session实例,通过Configuration实例构建SessionFactory。Configuration实例根据当前的配置信息,构造SessionFactory实例并返回。一旦SessionFactory构造完毕,即被赋予特定的配置信息。 
   Session是持久层操作的基础,相当于JDBC的Connection。通过SessionFactory实例构建。Session实例提供的saveOrUpdate、delete和createQuery方法分别实现了数据库的插入更新、删除和查询操作,简化了数据库的基本操作。

 先给出代码,再做具体分析:

package com.wjy.hiboperation;

import java.io.File;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


public class HibernateUtil {
	private static SessionFactory sessionFactory;
	static{
		try{
			File file=new File("./file/hibernate.cfg.xml");
		sessionFactory=new Configuration().configure(file).buildSessionFactory();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
}

 分别来看看基本操作:

增和改:

//取得SessionFactory实例 
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
 //打开一个Session实例 
Session session = sessionFactory.openSession();         
 //开始事务 
Transaction tx = session.beginTransaction(); 
//创建UserTable类实例 
 UserTable userTable=new UserTable();
//设置userName属性  userTable.setUserName("张三");         
 //设置password属性 
 userTable.setPassword("123456");         
 //设置power属性 
 userTable.setPower("图书管理员");         
 //插入和更新数据库 
 session.saveOrUpdate(userTable);         
 //提交事务
 tx.commit();         
 //关闭会话 
session.close();

删:

//取得SessionFactory实例 
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
 //打开一个Session实例 
Session session = sessionFactory.openSession();
 //开始事务 
Transaction tx = session.beginTransaction();       
   //创建UserTable类实例 
 UserTable userTable=new UserTable();          
 //设置userName属性  userTable.setUserName("张三");        
   //设置password属性 
userTable.setPassword("123456");          
 //设置power属性 
 userTable.setPower("图书管理员");
 // 删除操作 
// session.delete(userTable);         
 //提交事务
 tx.commit(); 
//关闭会话 
session.close();

 查询:

//取得SessionFactory实例 
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
//打开一个Session实例 
Session session = sessionFactory.openSession(); 
//开始事务 
Transaction tx = session.beginTransaction(); 
// 查询hql语句 
String hql = "from UserTable where UserName='张三' and Password='123456'"; 
  //执行查询,查询结果为Query实例Query userList = session.createQuery(hql);        
  //将查询结果放到一个list中
 List list = userList.list();        
  //提交事务 
tx.commit();          // 这里好像不用commit因为是查询操作,list都获得了还提交什么。 
 //关闭session 
session.close();

 //**********************************************************************************************************************************

 

好了,到了这里,我试着操作上一篇博客中提到的数据库看看,结果发生了很多问题。

 

问题分析:

1,jar包不够,要将网上下的hibernate的完整包中的provider和required文件夹中的jar包建立依赖。

2,

Exception in thread "main" org.hibernate.MappingException: Unknown entity: XXXXXxxxxx

 解决办法:

需要在hibernate.cfg.xml中加入

例如:
<mapping class="com.wjy.models.Dogstable" resource="com/wjy/models/Dogstable.hbm.xml"/>

 3,

关于org.hibernate.service.jndi.JndiException: Error parsing JNDI name [foo]

 解决办法:

其实问题出在hibernate.cfg.xml中
在<session-factory name="">
 </session-factory>
中多了一个name属性,把name属性删除了,就不会报异常了。即将name=""删掉即可。

 4,

org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1

 解决办法:

使用的是hibernate的saveOrUpdate方法保存实例。saveOrUpdate方法要求ID为null时才执行SAVE,在其它情况下执行UPDATE。在保存实例的时候是新增,但你的ID不为null,所以使用的是UPDATE,但是数据库里没有主键相关的值,所以出现异常。

 5,

Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException:  XXXxxx   is not mapped

 

原因就是:Hibernate中的HQL查询是基于持久化类查询的,而不是基于数据库表查询的。我的数据库表名是XXX,而我的数据库的表所对应的持久化类的名为xxx。所以在hql语句中,String hql = "from xxx where id=10";xxx可以到hibernate.cfg.xml文件中查到映射的表名称。

 我写的用Hibernate操作MySQL数据库的例子见附件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值