`

【转】HIbernate对数据库的操作

 
阅读更多

以前听起hibernate总感觉是一个很奇怪的东西,不知道是用做什么,只知道是一个框架,今天对hibernate的学习,使我受益匪浅,知道了hibernate的作用。
以前在写程序的时候看,特别是在编写连接数据库程序的时候,总要用到jdbc,提前都感觉到jdbc是一个很好的手工方式,并没有想到更好的实现方法,也不知道jdbc的缺点是什么,因为在做大型项目的时候,必定会要写很多的程序,当然操作数据库的更不可缺,所以每次的有很多都是重复的,而且在对象模型和关系模型之间总会遇到很多的问题,也往往会转来转去的,当用了hibernate后,可以很方便的操作数据,不用写那么麻烦的代码,节省了很多的操作和代码的编写,这样大大提高了代码编写的效率,提高了开发的速度!现在将走向hibernate的世界:
一:首先要使用hibernate框架,必定要引入hibernate2.jar包,当然还要引入很多的包,然后写一个与数据表对应的JavaBean类,与数据库的字段对应,比如一个简单的java类如下:

package tmc.hibernat.domian; 

import java.util.Date; 

public class User { 

private int id; 
private String name; 
private Date date; 
public int getId() { 
return id; 
} 
public void setId(int id) { 
this.id = id; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public Date getDate() { 
return date; 
} 
public void setDate(Date date) { 
this.date = date; 
} 


} 

 

然后编写一个映射的文件,

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="tmc.hibernat.domian"> 

<class name="User"> 
<id name="id"> 
<generator class="native" /> 
</id> 

<property name="name" unique="true" /> 
<property name="date" /> 
</class> 
</hibernate-mapping> 

 

在写一个加载数据库和连接数据库的的配置文件:

<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
<session-factory> 
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="connection.url">jdbc:mysql:///test</property> 
<property name="connection.username">root</property> 
<property name="connection.password">root</property> 
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
<property name="hbm2ddl.auto">update</property> 
<property name="show_sql">true</property> 
<mapping resource="tmc/hibernat/domian/User.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

 

在此,一切的准备都已经完成,接下来执行写一些service的java类对数据库进行操作,就可以实现对数据库的操做了
写一个service的java类:

package tmc.hibernate.service; 

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

public final class HibernateUitl { 

private static SessionFactory sessionFactory; 
private HibernateUitl(){ 

} 
/** 
* 初始化代码 
*/ 
static{ 

//配置的一个实例说明属性允许应用程序在测绘文件被用来当创造一个SessionFactory  
Configuration cfg = new Configuration(); 
cfg.configure();//读取配置文件 
sessionFactory = cfg.buildSessionFactory();//找出配置文件的所有信息 
} 
/** 
*  获取SessionFactory的方法 
* @return 
*/ 
    public static SessionFactory getSessionFactory(){ 
    
    return sessionFactory; 
    } 
    /** 
     * 获取session的方法 
     * @return 
     */ 
    public static Session getSession(){ 
    return sessionFactory.openSession(); 
    } 
} 

 

然后写对数据库的各种操作:
1.写一个接口:

package tmc.hibernat.domian; 

public interface UserDao { 

public void saveUser(User user); 
public User findUserById(int id); 
public User findUserByName(String name); 
public void updateUser(User user); 
public void remove(User user); 
} 

 

2.实现接口:

package tmc.hibernate.service; 

import org.hibernate.Criteria; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 
import org.hibernate.criterion.Restrictions; 

import tmc.hibernat.domian.User; 
import tmc.hibernat.domian.UserDao; 

public class UserHibernateImp implements UserDao{ 
    
/** 
* 根据id获取查询数据库的内容 
*/ 
@Override 
public User findUserById(int id) { 
Session s = null; 
try{ 
s = HibernateUitl.getSession(); 
//Criteria c = s.createCriteria(User.class); 
//c.add(Restrictions.eq("name",name)); 
User user =(User)s.get(User.class,id);//User.class方便找到映射文件 
return user; 
}finally{ 
if(s!=null){ 
s.close(); 
} 

} 
} 
   /** 
    * 根据用户名,查询用户的信息 
    */ 
@Override 
public User findUserByName(String name) { 
Session s = null; 
try{ 
s = HibernateUitl.getSession(); 
Criteria c = s.createCriteria(User.class); 
c.add(Restrictions.eq("name",name)); 
User user =(User)c.uniqueResult();//映射是唯一的 
return user; 
}finally{ 
if(s!=null){ 
s.close(); 
} 

} 
} 
/** 
* 和上面的使用是一样的,只是用不同的查询方式而已 
* @param name 
* @return 
*/ 
public User findUserByName1(String name) { 
Session s = null; 
try{ 
s = HibernateUitl.getSession(); 
//Criteria c = s.createCriteria(User.class); 
//c.add(Restrictions.eq("name",name)); 
String hql = "from User as user where user.name=:n"; 
Query q = s.createQuery(hql); 
q.setString("n",name); 

User user =(User)q.uniqueResult();//映射是唯一的 
return user; 
}finally{ 
if(s!=null){ 
s.close(); 
} 

} 
} 
    /** 
     * 移除数据库一条记录 
     * @see tmc.hibernat.domian.UserDao#remove(tmc.hibernat.domian.User) 
     */ 
@Override 
public void remove(User user) { 
Session s = null; 
//创建一个事务 
Transaction tx = null; 
try{ 
s = HibernateUitl.getSession(); 
tx = s.beginTransaction(); 
s.delete(user); 
tx.commit(); 
}finally{ 
if(s!=null){ 
s.close(); 
} 

} 

} 
    /** 
     * 向数据库添加数据 
     */ 
@Override 
public void saveUser(User user) { 
Session s = null; 
//创建一个事务 
Transaction tx = null; 
try{ 
s = HibernateUitl.getSession(); 
tx = s.beginTransaction(); 
s.save(user); 
tx.commit(); 
}finally{ 
if(s!=null){ 
s.close(); 
} 

} 
} 
  /** 
   * 修改数据库数据 
   */ 
@Override 
public void updateUser(User user) { 
Session s = null; 
//创建一个事务 
Transaction tx = null; 
try{ 
s = HibernateUitl.getSession(); 
tx = s.beginTransaction(); 
s.update(user); 
tx.commit(); 
}finally{ 
if(s!=null){ 
s.close(); 
} 

} 

} 

} 

 

3.测试上面的类:

package tmc.hibernate.service; 

import java.util.Date; 

import tmc.hibernat.domian.User; 
import tmc.hibernat.domian.UserDao; 

public class TestDao { 

public static void main(String[] args){ 
UserDao dao = new UserHibernateImp(); 
User user = new User(); 
user.setName("name"); 
user.setDate(new Date()); 
System.out.println("1111"); 
dao.saveUser(user); 


user.setName("new name"); 
System.out.println("222"); 
dao.updateUser(user); 

User u = dao.findUserByName(user.getName()); 
System.out.println("3333"); 
} 
} 

 

这样的话,就可以完成了对数据库的各种操作,这样写真的很方便,很灵活,减少了很多的重复代码,但就是配置文件的时候很麻烦,呵呵,反正很多都这样的,没有十全十美的东西,但只要好用,就足够了!

 

原文地址:http://www.blogjava.net/weishuangshuang/archive/2011/01/23/343401.html

分享到:
评论

相关推荐

    hibernate数据库相关操作步骤

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

    Hibernate操作数据库的步骤

    Hibernate是一款强大的Java持久化框架,它简化了与关系型数据库如SQL Server的交互。通过将对象映射到数据库表,...总之,熟练掌握Hibernate的操作步骤和特性,对于提高Java开发中的数据库操作效率有着重要作用。

    java使用hibernate操作数据库jar

    在Java项目中,Hibernate通过jar包的形式提供服务,使得开发人员能够快速集成并进行数据库操作。 一、Hibernate概览 Hibernate是由JBoss公司开发的一个开源ORM框架,它实现了Java Persistence API(JPA),使得Java...

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

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

    Hibernate 多数据库支持解决方案

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

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

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

    Java封装hibernate操作数据库.rar

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

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

    下面我们将详细探讨在Hibernate框架下对Oracle数据库操作所需的知识点。 1. **Hibernate框架简介** Hibernate是一个开源的Java库,它允许开发者在Java应用中使用对象关系映射技术,将Java对象与关系数据库的数据表...

    Hibernate操作数据库的方法

    Hibernate是一种流行的Java ORM(对象关系映射)框架,它用于简化数据库操作,使得Java开发人员能够以面向对象的方式来操作关系数据库。使用Hibernate,开发者无需直接使用JDBC API,因为Hibernate封装了大部分...

    hibernate动态数据库进化版

    【hibernate动态数据库进化版】是一个关于Java持久层框架Hibernate深入学习的主题,它主要探讨了如何在实际项目中让Hibernate更加灵活地适应不同的数据库环境,实现动态的SQL生成和执行。这一进化的版本旨在提高开发...

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

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

    Hibernate配置数据库连接

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

    Hibernate操作数据库

    ORM将数据库表映射为Java类,表中的记录映射为类的实例,列映射为类的属性,使得数据库操作与具体的SQL语法分离。 2. **配置文件**: Hibernate 的使用始于配置文件(hibernate.cfg.xml),该文件定义了数据库连接...

    基于Spring与Hibernate的数据库操作进阶

    本主题“基于Spring与Hibernate的数据库操作进阶”将深入探讨如何利用这两个框架进行高级的数据库交互。 首先,Spring是一个开源的Java平台,它简化了应用程序的开发,并提供了全面的框架支持,包括依赖注入(DI)...

    Hibernate数据库操作实例.zip

    标题"Hibernate数据库操作实例.zip"表明这是一个关于使用Hibernate框架进行数据库操作的实际案例。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发人员使用面向对象的方式来处理数据库交互,而无需...

    hibernate动态数据库改进版

    在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇文章将深入探讨如何利用Hibernate实现动态数据库操作,并结合具体的实例,介绍一个改进版的实现方式。文章来源于...

    Hibernate 显示数据库数据

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

    基于hibernate的简单数据库实现

    **基于Hibernate的简单数据库实现** Hibernate是一个开源的对象关系映射(ORM)框架...在实际项目中,可以根据需求选择合适的方式进行数据库操作,同时利用Hibernate的高级特性,如缓存、查询优化等,来提升应用性能。

    hibernate自动生成数据库文件

    Hibernate是一款强大的Java持久化框架,它允许开发者将Java对象映射到关系数据库中,从而简化了数据库操作。本文将深入探讨Hibernate如何自动生成数据库文件,以及相关知识点。 首先,Hibernate的核心概念是对象...

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

    总的来说,"根据Hibernate反向生成数据库的Java代码"是提高开发效率的有效手段,它帮助开发者快速建立模型层,并简化了数据库操作。同时,这也体现了Hibernate框架的强大功能和灵活性,让Java开发者能更专注于业务...

Global site tag (gtag.js) - Google Analytics