欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第一个hibernate程序

程序员文章站 2022-05-23 14:16:54
...

hibernate是一个独立于web的框架,想一下我们使用的数据库如mysql,sqlserver,oracle,这些数据库处理的都是关系模型,我们使用jdbc来把数据存入数据库,java程序使用的是对象模型,数据库使用的是关系模型。这就产生了一个问题,这个问题有个书面名称叫做“阻抗不匹配”,也是用于这些原因之后出现了hibernate,toplink之类的框架。在实际应用中hibernate是使用做多的一个框架,只要学习了这个框架你就可以体会他的独特魅力。

1.下载hibernate开发包,这个包在jboss的网站上http://sourceforge.net/projects/hibernate/files/hibernate3/3.6.7.Final/可以下载到,下载的地方藏得比较隐蔽,注意找就可以了,之后把要用到的包全部拷贝到lib下面,如果不嫌多就全部拷贝进去。

2.找到hibernate的资源文件,里面有我们要用到的一些配置。来看下这个文件的位置

第一个hibernate程序

打开之后我们可以看到许多配置信息,这里我选择mysql来做开发,需要的配置如下

第一个hibernate程序

把这些配置复制到hibernate的配置文件中就OK了,现在来写下这个配置文件

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

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


配置文件写好了,现在来写个vo类,如下所示

package org.lxh.vo;

public class User {
	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;
	}

}

这些都弄好了,现在可以写映射文件了,命名规则是xxx.hbm.xml,如下所示

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.test.annotations">

    <class name="org.lxh.vo.User" table="user">

        <id name="id" column="id">
            <generator class="increment"/>
        </id>

        <property name="username" column="username"/>
        <property name="password" column="password"/>
       
        
    </class> 

</hibernate-mapping>


一切工作都准备就绪了,现在就来写个工具类,之后生成一个表

package org.lxh.util;

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

public final class HibernateUtil {
	

	private static SessionFactory sf = null;

	private HibernateUtil() {
	}

	static {
		sf = new Configuration().configure().buildSessionFactory();
	}
	public static SessionFactory getSf() {
		return sf;
	}
	public static Session getSession() {
		return sf.openSession();
	}
	
}

最后来写个JUNIT测试一下,看下运行效果。

package test;


import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.BeforeClass;
import org.lxh.util.HibernateUtil;
import org.lxh.vo.User;

public class Test {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}
	@org.junit.Test public void cascadeBook() {

		Session ses=null;
		Transaction tr=null;
		
		
		try{
			
			ses=HibernateUtil.getSession();   //取得session
			
			tr=ses.beginTransaction();
			
			User user=new User();
			user.setUsername("chenwill4");
			user.setPassword("123456");
			ses.save(user);     //把数据插入数据库
			//ses.persist(user);
			tr.commit();
		
		}catch(HibernateException e){
			throw e;
		}finally{
			if(ses!=null)
			{
				ses.close();
			}
			
		}
		
	}
}

第一个hibernate程序

第一个hibernate程序

到这里代码就写好了,如果有问题可以一起交流,联系方式就不用说了。