Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

Hibernate 之菜鸟入门

$
0
0

HibernateHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

下面通过在myeclipse中新建java web项目来完成第一个Hibernate 项目,因为在myeclipse中增加了对Hibernate 支持,所以可以很快速的构建一个Hibernate项目,这个项目完成如下功能,用户通过jsp提交注册信息,包括姓名,年龄和地址。

首先任意新建一个java web项目,例如新建HibernateTest,之后完成java web项目的各种配置。

  然后选中我们新建的项目,点击myeclipse 进行如图的选择

然后出现如下对话框,我们需要hibernate的包放入到web项目的lib文件夹中,然后点击next


这一步我们在src目录新建了一个hibernate.cfg.xml文件,这是hibernate中最为重要的配置文件,其中包含了与数据库相连接的基本信息,之后继续点击下一步

这一步中可以完成对数据库的相关配置,但是在这里我们先不写,等会可以直接操作hibernate.cfg.xml文件来配置数据,所以不要勾选specify database connection details,点击下一步

这一步我们同样不要勾选create sessionFactory class ,我们会在后面来创建这个类,点击Finish完成。到这里基本的项目设置就算完成了,下面我们来其他的配置

Hibernate既然是要与数据库打交道,那么就需要告诉Hibernate与其交互的数据库的基本信息,打开src目录下面的hibernat.cfg.xml文件,在其中添加如下代码

<?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="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
 		<property name="connection.username">root</property>
 		<property name="connection.password">123456</property>
 		<property name="show_sql">true</property>
 		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
 		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
 		<mapping resource="User.hbm.xml"/>
 	</session-factory>
 
 
 
 </hibernate-configuration>
相信的其中代码的意思大家都能够明白,其中show_sql表示在每次调用hibernate的api的时候,如果有sql语句的生成,那么就在控制台打印出sql语句,dialect属性表示采用Hibernate中对哪个数据的优化方式来优化数据库,这里使用的是mysql,那么就采用了org.hibernate.dialect.MySQLDialect。

然后在src目录下新建一个com.value.bean包,在其中新建一个javabean  User,在Hibernate中这个javabean被称为持久化对象。User代码如下

public class User {

	private String name;
	private String address;
	private int age;
	private int id;
	
	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public User(){
		
	}
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
然后再src目录下,新建一个xml文件,名称为User.hbm.xml

<?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.hibernatetest.domain.User" table="users">
    	<id name="id" column="id" type="int">
    		<generator class="increment"></generator>
    	</id>
       	<property name="name" column="name" type="string"></property>
        <property name="address" column="address" type="java.lang.String"/>
        <property name="age" column="age" type="java.lang.Integer"/>
    </class>
</hibernate-mapping>
通过这个文件,我们就是实现了pojo(持久化对象)与数据库中的表的对应关系,class 标签name属性表示对应的java类,table表示对应的数据表, property标签的name 都是java类的属性,需要注意区别大小写,column表示表中的列,type即为数据的类型。

其中有个id属性,这个属性用来标识java类与表中的每一条记录的唯一对应关系,其子标签generator可以在博客中查看详细的解释。

准备工作都做好了,现在就需要来真正的操作数据库了,Hibernate操作数据库表,是通过Session来完成的,那么session的实例又是通过sessionFactory来完成的,那么现在我们就需要创建一个sessionFactory。

新建一个HibernateSessionFacotry类,代码如下

package com.hibernatetest.util;

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

public class HibernateSessionFactory {

	private static SessionFactory factory ;
	
	static 
	{
		factory = new Configuration().configure().buildSessionFactory();
	}
	
	
	public  static Session openSession()
	{
		Session session = factory.openSession();
		return session;
	}
	
	
	public static void closeSession(Session session)
	{
		if(session != null)
		{
			session.close();
		}
	}
	}
	
	
在静态代码块里面我们构建了一个Configuration对象,调用了configure方法这个方法返回了一个Configuration对象,这个对象其中就包含了我们在hibernate.cfg.xml配置的各种数据的信息,然后将Configuration对象绑定到了SesssionFactory上(调用了buildSessionFactory方法),这样就获取了与我们定义数据库相关的sessionfactory对象,通过这个对象可以获取session来完成数据的操作。

下面是UserDao的代码

public class UserDao {

	private Session session;
	
	
	public UserDao(Session session)
	{
		this.session = session;
	}
	
	public void saveUser(User user)
	{
		Transaction tx = session.beginTransaction();
		try
		{
			tx.begin();
			session.save(user);
			tx.commit();
		}
		catch(Exception ex)
		{
			tx.rollback();
		}
		finally
		{
			session.close();
		}
	}
	
需要注意的事情是,在使用session的时候,一定要将事务打开,否则无法完成数据的操作。

下面是用来做测试的Servlet代码

public class addServlet extends HttpServlet {


	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		int id = Integer.valueOf(request.getParameter("id"));
		String username = request.getParameter("username");
		int age = Integer.valueOf(request.getParameter("age"));
		String address = request.getParameter("address");
		
		User user = new User();
		user.setId(id);
		user.setAddress(address);
		user.setName(username);
		user.setAge(age);
		
		Session session = HibernateSessionFactory.openSession();
		UserDao dao = new UserDao(session);
		dao.saveUser(user);
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

}


这样我们就完成第一个Hibernate的项目


文章系原创,转载请注明


作者:liuwei0604 发表于2013-5-4 20:38:01 原文链接
阅读:23 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>