`

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数据库的例子见附件。

分享到:
评论

相关推荐

    Hibernate操作数据库的步骤

    以下是对"Hibernate操作数据库的步骤"的详细解释: 1. **读取并解析配置文件**:在Hibernate中,配置文件(通常是`hibernate.cfg.xml`)包含了数据库连接信息,如URL、用户名、密码等。`Configuration`类用于加载这...

    java使用hibernate操作数据库jar

    Java使用Hibernate操作数据库是现代Java应用中常见的技术实践,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库的交互。它允许开发者用Java对象来表示数据库中的记录,而无需关心底层SQL的实现...

    Java封装hibernate操作数据库.rar

    本资料包"Java封装hibernate操作数据库.rar"主要涉及了如何使用Hibernate进行数据库操作,并通过DAO(Data Access Object)层的封装来实现更加高效、简洁的代码结构。 首先,让我们深入了解Hibernate。Hibernate是一...

    Hibernate操作数据库的方法

    Hibernate操作数据库时,主要通过以下几个核心组件来实现持久层操作: 1. **Session**:Session是Hibernate用来和数据库进行交互的一个轻量级对象,它相当于JDBC中的Connection。Session对象是应用程序与数据库进行...

    hibernate操作数据库笔记

    使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: ...

    使用Hibernate操作数据库的7个步骤.txt

    使用Hibernate操作数据库的7个步骤.txt ,很简单的

    hibernate数据库相关操作步骤

    Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的简便方法。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是通过面向对象的方式来管理和操作数据。本文将...

    Hibernate 多数据库支持解决方案

    Hibernate是一个强大的Java持久化框架,它允许开发者将对象模型与关系数据库进行映射,从而简化了数据库操作。在处理多数据库支持时,Hibernate提供了一些策略和技巧来确保应用程序能够在不同类型的数据库之间灵活...

    hibernate动态数据库进化版

    ORM允许开发者使用面向对象的方式来操作数据库,而无需关注底层的SQL语句。通过配置文件或注解,Hibernate可以将Java对象与数据库表进行映射,实现了数据的透明访问。 在动态数据库进化版中,我们可能涉及到以下几...

    hibernate连接金仓数据库所需jar包集合lib.7z

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,极大地简化了数据库操作。金仓数据库,又称为Kingbase,是一款国产的高性能、高可靠性的关系型数据库管理...

    Hibernate配置数据库连接

    配置数据库连接是使用 Hibernate 进行数据库操作的基础步骤。正确地配置数据库连接不仅能够确保应用程序能够顺利访问数据库,还能够提高程序的运行效率。此外,合理的配置还可以帮助我们更好地管理数据库资源,减少...

    Hibernate与JDBC对于数据库CRUD操作性能示例

    Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源

    hibernate动态数据库改进版

    Hibernate是一个开源的ORM框架,它允许开发者使用面向对象的方式来操作数据库,通过映射机制将Java对象与数据库表进行对应,从而避免了繁琐的SQL语句编写。 1.2 动态数据库需求 在实际开发中,我们可能需要根据用户...

    hibernate框架下对oracle数据库操作所需jar包.zip

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了与数据库交互的过程,使得开发者可以使用面向对象的方式来操作数据库。对于Oracle数据库的支持,Hibernate提供了专门的驱动和配置,使得...

    Hibernate 显示数据库数据

    在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以用Java对象来操作数据库记录。本教程针对初学者,将介绍如何使用Hibernate从数据库中查询并显示数据。 ...

    封装好的hibernate数据库操作(增,删,改,查,分页)

    对hibernate的数据库操作封装: 1.分页查询 2.保存对象 3.保存对象组 4. 更新对象 5.更新对象组 6.保存或更新对象 7.保存或更新对象组 8. 删除对象 9. 删除对象组 10.删除对象(此类的所有对象) 11.删除(HQL) 12....

    hibernate和数据库的各种包

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库,极大地简化了数据库操作。在Java开发中,Hibernate是连接Java应用程序与多种数据库(如MySQL和Oracle)的重要桥梁...

    根据hibernate反向生成数据库的java代码

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过Java对象来操作数据库,而无需编写大量的SQL语句。"根据Hibernate反向生成数据库的Java代码"这一主题涉及到的主要知识点包括...

    Hibernate不同数据库的连接及SQL方言

    Hibernate不同数据库的连接及SQL方言 在Hibernate中,连接不同的数据库需要使用不同的数据库连接驱动程序和SQL方言。下面我们将详细介绍如何在...通过配置文件中的设置,我们可以轻松地连接和操作不同的数据库。

Global site tag (gtag.js) - Google Analytics