第一个简单的hibernate程序

           目前主流的数据库一般都是关系型的数据库,而我们目前的高级程序语言都支持面向对象等特性,数据库的编程语言之间存在的一条鸿沟。在面向对象的数据库还没有得到普及的时候,ORM(对象,关系,映射)都将作为一种简化编程的工具存在。

     下面就演示一个简单的利用hibernate(一个orm框架)框架写的一个小程序。

      首先我们写一个javabean,Userbean,我们的类最好不要设置成final类,因为hibernate框架有时候优化执行的时候,会继承我们的类,如果我们设置成final类的话,他就无能为力。

     类要提供默认构造函数,因为hibernate利用反射技术生成我们的类(如果没有提供默认构造函数,hibernate框架就无法管理类的生命周期)

       

public class UserBean {
   
	private int id;
	private String username;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

    UserBean与数据库的表之间的映射文件,id表示主键,generator表示主键的生成策略,native表示使用本地数据库的生成策略。

    如果没有指定表名,则默认和java类名称一致,即UserBean。id和property,如果也没有指定名称(即列名),则默认也是和类的属性名称一致。

    

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.shizhan.hibernate.domain">
	
	<class name="UserBean">
	   <id name="id">
	     <generator class="native"/>
	   </id>
	  <property name="username"/>
	  <property name="password"/>
	</class>
	
</hibernate-mapping>

    利用oracle作为数据库的配置文件,像我们以前利用jdbc连接数据库一样,需要提供驱动名,url地址,用户名,密码等信息。这个配置文件中多了一个 <property name="dialect">用来告诉hibernate框架,我们使用的数据库名称。

   配置文件中还要指明我们的表与类映射的其他配置文件的位置。

     

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <!-- 数据定义语言,告诉hibernate帮我们创建表 -->
        <property name="hbm2ddl.auto">create</property>
        <!-- 告诉hibernate程序与哪种数据库连接,本例子使用oracle -->
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
      
        <property name="connection.url">jdbc:oracle:thin:localhost:1521:orcl</property>
        <property name="connection.username">scott</property>
        <property name="connection.password">tiger</property>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="myeclipse.connection.profile">oracle.jdbc.driver.OracleDriver</property>
         
        <!-- 告诉hibernate我们的user.hbm.xml在哪 -->
        <mapping resource="com/shizhan/hibernate/domain/User.hbm.xml"/>
    </session-factory>
  
</hibernate-configuration>

   hibernate工具类

  

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

public class HibernateUtil {
    
	private static  SessionFactory sessionFactory ;
	//不让其他用户轻易创建,因为我们有些操作只执行一次
	private HibernateUtil(){
		
	}
	static{
	  Configuration cfg = new Configuration();
	  cfg.configure();
	  sessionFactory = cfg.buildSessionFactory();
	}
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
    public static Session getSession(){
    	return  sessionFactory.openSession();
    }
}


   测试类

   

package com.shizhan.hibernate.test;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.shizhan.hibernate.domain.UserBean;
import com.shizhan.util.HibernateUtil;

public class TestHibernate {
   
	public static void main(String[] args) {
	     
		Session   s = HibernateUtil.getSession();
		Transaction t = s.beginTransaction();
		
		UserBean user = new UserBean();
		user.setUsername("shizhan");
		user.setPassword("123");
		
		s.save(user);
		t.commit();
		s.close();
	}
  

   从s.save(user)中,我们发现可以直接将对象存储到数据库中,这就是hibernate的魅力所在,简化了之间利用原始jdbc插入数据时编程步骤。

    hibernate默认的事务是 不自动提交,这和jdbc的自动提交有点不一致,所以如果我们发现数据没有插入到数据库中,这时候问题可能就是我们没有开启事务,并且提交。

     Configuration cfg = new Configuration();

     cfg.configure(); 用来加载hibernate.cfg.xml文件,所以时间比较久,应保证我们的应用程序只调用一次。configure()函数默认加载hibernate.cfg.xml文件,所以如果我们的配置文件是其他的名称,需要显示的传入值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值