`
twincle
  • 浏览: 41874 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Hibernate 3.6.3 入门程序

阅读更多

最近在打算搞定SSH,所以一样一样来,今天是Hibernate

 

首先下载Hibernate最新版,地址:http://sourceforge.net/projects/hibernate/files/hibernate3/

 

首先hibernate3.jar是一定要的

 

required文件夹下面的jar包是全部需要的(其中的每个包我都到官方网站上找了最新版来,以slf4j包最特殊,hibernate自带的slf4j的版本是1.6.1,我在官方网站上下到的1.6.1版本是将其中的各个组件分为不同jar包发布的,因此,这里需要引用slf4j-api-1.6.1.jar和slf4j-nop-1.6.1.jar两个jar包)

 

另外3.6需要jpa包的支持,所以要到JPA文件夹下面把hibernate-jpa-2.0-api-1.0.0.Final.jar拿过来

 

最后就是数据库连接驱动,我这里使用的是mysql数据库,因此驱动程序包mysql-connector-java-5.1.15-bin.jar也是必不可少的

 

今天和上次一样,追求最少包处理,下面是运行hibernate入门程序所需要的最少包列表:

 

Hibernate 3.6.3 入门程序 最小包列表

 

同样的,下面附有各个非hibernate官方包的官方下载地址:

 

Antlr: http://www.antlr.org/download.html

Common-collections: http://commons.apache.org/collections/download_collections.cgi

Dom4j: http://sourceforge.net/projects/dom4j/files/dom4j/

Javassist: http://sourceforge.net/projects/jboss/files/Javassist/

Jta: http://java.sun.com/products/jta/

Slf4j: http://www.slf4j.org/download.html

Mysql-driver: http://dev.mysql.com/downloads/connector/j/

 

终于可以开始正式编程了,首先使用hibernate至少要有一个数据库一个数据表一条数据记录吧,数据库建立工作开始,我建立了一个名字叫hibernatedemo的数据库,添加了一个叫做user的数据表,数据表结构如下:

 

DROP TABLE IF EXISTS `hibernatedemo`.`user`;
CREATE TABLE  `hibernatedemo`.`user` (
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(45) NOT NULL,
  `PASSWORD` varchar(45) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

一共就三列,一列ID,一列用户名name,一列密码password,然后手动插入一条记录:张三; zhangsan.

 

由于只是入门程序,所以不事先增删改功能,手工插入一条记录,只要能显示出来就行了

 

对应的,有数据表相关联的JavaBean类,定义如下:

 

package com.iteye.twincle.HibernateDemo.main;

public class User {

	long id;
	String name;
	String password;
	
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}
	
}

 

没什么特别的,三个属性,三对get和set方法。

 

数据表有了,javabean有了,下面需要建立对应关系,也就是建立User.hbm.xml文件,这是约定俗成的名字:"类名.hbm.xml",hbm是hibernate-mapping的缩写,当然也可以叫其他名,只不过这样叫可读性好。

 

<?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>

	<class name="com.iteye.twincle.HibernateDemo.main.User" table="user">
	
		<!-- 配置主键信息 -->
		<id name="id" column="ID" type="long">
			<generator class="native" />
		</id>
		
		<!-- 配置属性信息,默认type为string类型,所以不需要配置 -->
		<property name="name" column="NAME" not-null="true" />
		<property name="password" column="PASSWORD" not-null="true" />
	
	</class>

</hibernate-mapping>

  

对应关系也是很清晰的,一个字段对应一个属性

 

 

数据库建立好之后,需要配置hibernate与数据库交互的配置文件,也就是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">

<hibernate-configuration>

	<session-factory>
	
		<!-- 数据库方言设置 -->
		<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://127.0.0.1:3306/hibernatedemo</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">welcome</property>
		
		<!-- 后台打印执行的SQL语句 -->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		
		<!-- 映射文件配置 -->
		<mapping resource="com/iteye/twincle/HibernateDemo/config/mysql/User.hbm.xml" />
		
	</session-factory>
	
</hibernate-configuration>

 

 

这个文件应该放在src的根目录下,以便读取,当然放在别的地方也是可以的,这里的配置都是取的最简模式,其中后台打印执行的SQL语句的配置可以不要,但是这样配置方便一会查看输出内容。

 

终于完成了基本的配置,可以开始使用Hibernate处理事务了,编写一个处理事务的类,这里叫做UserService

 

package com.iteye.twincle.HibernateDemo.main;

import java.util.ArrayList;

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

public class UserService {

	public static SessionFactory sessionFactory;
	
	//初始化sessionFactory,创建实例
	static {
		
		try {
			
			//从默认位置读取hibernate.cfg.xml
			Configuration config = new Configuration().configure();
			sessionFactory = config.buildSessionFactory();
			
		} catch (RuntimeException e) {
			
			e.printStackTrace();
			throw e;
			
		}
		
	}
	
	public void printAllUser() {
		
		Session session = sessionFactory.openSession();
		Transaction tx = null;
		
		ArrayList<User> userList = new ArrayList<User>();
		
		try {
			
			tx = session.beginTransaction();
			Query query = session.createQuery("from User as u order by u.name asc");
			userList = (ArrayList<User>)query.list();
			tx.commit();
			
			for (int i = 0; i < userList.size(); i ++) {
				
				System.out.println(userList.get(i).getName() + ": " + userList.get(i).getPassword());
				
			}
			
		} catch (Exception e) {
			
			System.out.println(e.toString());
			
		} finally {
			
			session.close();
			
		}
		
	}
	
}

 

主要功能就是读取配置文件,建立连接,读取user表中的记录并打印出来。

 

最后测试类UserMain,只是执行以下service中的方法

 

package com.iteye.twincle.HibernateDemo.main;

public class UserMain {
	
	public static void main (String[] args) {
		
		UserService userServ = new UserService();
		
		userServ.printAllUser();
		
	}

}

 

 

运行测试即可看到以下输出结果

 

Hibernate: 
    select
        user0_.ID as ID0_,
        user0_.NAME as NAME0_,
        user0_.PASSWORD as PASSWORD0_ 
    from
        user user0_ 
    order by
        user0_.NAME asc
张三: zhangsan

 

除最后一行外,是hibernate执行查询时的语句,最后一行是输出结果,各位可以在数据库中多插入几条数据看一下结果。所有源代码可以在下面下载,导入eclipse就可以直接运行了。

 

总之我认为hibernate还是比spring容易掌握的,但是需要提前有一些数据库、SQL基础,而spring要有很好的接口、注解、工厂模式、IOC思想等基础。

 

不过听说hibernate管理数据库连接还不是很好,可以选择c3p0或者proxool来管理数据库连接,下一个目标:hibernate和proxool整合!

1
5
分享到:
评论

相关推荐

    hibernate3.6.3中文api

    综上所述,Hibernate 3.6.3 中文 API 提供了一个强大而灵活的框架,用于简化 Java 应用程序与关系型数据库之间的交互。通过深入理解这些核心概念和技术细节,开发人员能够更加高效地利用 Hibernate 构建高性能的企业...

    iBATIS实战

    11.1.1 Hibernate版本的DAO实现 194 11.1.2 JDBC版本的DAO实现 199 11.2 为其他数据源使用DAO模式 203 11.2.1 示例:为LDAP使用DAO 203 11.2.2 示例:为Web服务使用DAO 208 11.3 使用Spring DAO 209 11.3.1 编写代码...

    Spring攻略(第二版 中文高清版).part2

    3.6.3 工作原理 128 3.7 在你的Bean中引入行为 132 3.7.1 问题 132 3.7.2 解决方案 132 3.7.3 工作原理 132 3.8 为你的Bean引入状态 135 3.8.1 问题 135 3.8.2 解决方案 135 3.8.3 工作原理 135 ...

    Spring攻略(第二版 中文高清版).part1

    3.6.3 工作原理 128 3.7 在你的Bean中引入行为 132 3.7.1 问题 132 3.7.2 解决方案 132 3.7.3 工作原理 132 3.8 为你的Bean引入状态 135 3.8.1 问题 135 3.8.2 解决方案 135 3.8.3 工作原理 135 ...

Global site tag (gtag.js) - Google Analytics