Hibernate对数据库的操作

原创 2011年01月23日 16:14:00

以前听起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");
}
}

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

Hibernate提供的操作数据库的方法使用和比较

hibernate对于对象的操作提供了很多的方法,本文简单介绍一下这些方法的使用和比较. 在说明方法之前,说明一下hibernate中的对象的三种状态,transient,persistent,det...
  • kkdelta
  • kkdelta
  • 2010年07月09日 18:05
  • 5110

HIbernate对数据库的操作

原文地址:http://www.blogjava.net/weishuangshuang/archive/2011/01/23/343401.html
  • u013276166
  • u013276166
  • 2014年10月09日 12:25
  • 233

使用Java语言实现对MySQL数据库的基本操作

在数据库的使用中最为主要的就是对数据库的增、删、查、改操作,MySQL数据库作为关系型数据库的一种,其数据库管理系统是由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是...
  • Sweet_Harbour
  • Sweet_Harbour
  • 2017年10月26日 21:20
  • 520

Hibernate 的延迟加载(懒加载)简介1

什么是延迟加载: 在使用某些Hibernate方法查询数据时,Hibernate返回的只是一个空对象(除id外属性都为null),并没有真正查询数据库。而在使用这个对象时才会触发查询数据库,并将查询到...
  • qwdafedv
  • qwdafedv
  • 2015年07月23日 08:36
  • 326

Hibernate中的主键生成策略简介

对于映射文件中的主键,我们习惯于于让该字段能够自动增长,来保证其唯一性。    但是,不同的数据库自动增长的方式并不是相同的。如在SQLSERVER中,用identity,MYSQL中,有incre...
  • zhaodandan19910306
  • zhaodandan19910306
  • 2012年02月26日 19:02
  • 915

在Java的Hibernate框架中对数据库数据进行查询操作

Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性。 HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据...
  • zhengsaisai
  • zhengsaisai
  • 2016年07月14日 16:43
  • 4603

使用Hibernate操作数据库需要七个步骤

使用Hibernate操作数据库需要七个步骤
  • Android_MSK
  • Android_MSK
  • 2017年03月30日 15:43
  • 1783

使用java对操作数据库的封装例子

最初自己写的代码经常出现游标超出最大值的问题,后参考几篇博文后改进了下,虽然仍不够完善,但是和最初相比已经有了很大的改善。代码如下: private SQLException exception = ...
  • subuser
  • subuser
  • 2011年04月24日 09:35
  • 663

简述C#对数据库的操作

 **************************************************由于本人能力有限,其中内容有误之处请大虾们指出***另请对C#编程有兴趣的朋友加入群:115314...
  • davyfamer
  • davyfamer
  • 2006年04月19日 23:34
  • 1823

JDBC对数据库的基本操作

p { font-family: "宋体"; font-size: 12px; font-style: normal; line-height: 18px; font-weight: normal; ...
  • lldwolf
  • lldwolf
  • 2008年03月31日 10:29
  • 2609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate对数据库的操作
举报原因:
原因补充:

(最多只允许输入30个字)