Hibernate关键API详解

在java中使用Hibernate的步骤


---创建Hibernate的配置文件

---创建持久化类

---创建对象-关系映射文件

---通过Hibernate API编写访问数据库代码


开始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="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
    	<property name = "connection.username">root</property>
    	<property name = "connection.password">baother520</property>
    	<property name = "connection.driver_class">com.mysql.jdbc.Driver</property>
    	<property name = "dialect">org.hibernate.dialect.MySQL5Dialect</property>
    	<property name = "show_sql">true</property>
    </session-factory>

</hibernate-configuration>
主配置文件

创建持久化类

——持久化类符合JavaBean的规范,包含一些属性以及与之对应的getXXX()和

setXXX()方法。

——持久化类有一个id(并不是名字是id)属性,用来唯一标识Person类的每个对象。

在面向对象术语中,这个id属性被称为对象标识符(OID,Object Identifier)

——Hibernate要求持久化了必须提供一个不带参数的默认构造方法。


SessionFactory接口

-一个sessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。

SessionFactory有以下特点:

-它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。

-它是重量级的,这个意味着不能随意创建或者销毁它的实例。如果应用值访问一个数据库,只需要创建一个SessionFactory

实例,在应用初始的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。

Session接口

-Session接口是Hibernate应用使用的最广泛的接口。

-Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加,更新,删除,加载和查询对象。

Session有以下的特点:

-不是线程安全的,因此在设计软件架构时,应该避免多个线程共享一个Session实例。

-Session实例亲量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这就意味着在程序中经常可以创建或者销毁Session对象,例如:

每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。

注意:次session非hthpSession的session。



第一个hibernate:

register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'register.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  		<form action = "savePerson.action">
  			username:<input type = "text" name = "username" size = "20"><br/>
  			password:<input type = "password" name = "password" size = "20"><br/>
  			age:<input type = "text" name = "age" /><br/>
  			<input type = "submit" value = "submit" />
  		</form>
  </body>
</html>
action包:

package action;

import service.PersonService;
import service.imp.PersonServieImpl;
import model.Person;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;



@SuppressWarnings("serial")
public class PersonAction extends ActionSupport{
	private String username;
	private String password;
	private int age;
	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;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String savePerson () throws Exception {
		Person person = new Person ();
		person.setUsername(username);
		person.setPassword(password);
		person.setAge(age);
		java.sql.Date registerDate = new java.sql.Date(new java.util.Date().getTime());
		person.setRegisterDate(registerDate);
		PersonService personService = new PersonServieImpl();
		personService.savePerson(person);
		return Action.SUCCESS;
	}
}

service包:

package service;

import model.Person;

public interface PersonService {
	public void savePerson (Person person);
}

service.impl包:

package service.imp;

import service.PersonService;
import dao.PersonDao;
import dao.impl.PersonDaoImpl;
import model.Person;

public class PersonServieImpl implements PersonService{
	public void savePerson (Person person) {
			PersonDao pd = new PersonDaoImpl();
			pd.savePerson(person);
	}
}

dao包:

package dao;

import model.Person;

public interface PersonDao {
	public void savePerson (Person person);
}

dao.impl包:

package dao.impl;

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

import util.HibernateUtil;
import model.Person;
import dao.PersonDao;

public class PersonDaoImpl implements PersonDao {
	
	public void savePerson(Person person) {
		Session session = HibernateUtil.getSession();
		/**
		 *
		 */
		Transaction tx = session.beginTransaction();
		try {
			session.save(person);
			tx.commit();
		}catch(Exception ex){
			if (null != tx) {
				tx.rollback();
			}
		}finally{
			HibernateUtil.close(session);
		}
		
	}
}

util包:

package util;

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

public class HibernateUtil {
	private static SessionFactory sessionFactory;
	/**
	 *
	 ***/
	static {
		try {
			sessionFactory  = new Configuration().configure()
			.buildSessionFactory();
			
		}catch(Exception e) {
			
		}
	}
	//获得session
	public static Session getSession () {
		Session session =  sessionFactory.openSession ();
		return session;
	}
	//关闭session
	public static void close (Session session) {
		if (null != session) {
			session.close();
		}
	}
}

hibernate.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">baother520</property>
    	<property name = "connection.driver_class">com.mysql.jdbc.Driver</property>
    	<property name = "dialect">org.hibernate.dialect.MySQL5Dialect</property>
    	<property name = "show_sql">true</property>//显示出sql语句
    	<mapping resource="Person.hbm.xml" />
    </session-factory>
</hibernate-configuration>

Person.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 = "model.Person" table = "person">
		<id name = "id" column = "id" type = "int">
			<generator class="increment"></generator>//自增
		</id>
		<property name = "username" column = "username" type = "string"></property>
		<property name="age" column = "age" type = "int"></property>
		<property name = "registerDate" column = "registerDate" type = "date"></property>
	</class>
</hibernate-mapping>

输入数据然后提交:输出的sql语句为:

Hibernate: select max(id) from person
Hibernate: insert into person (username, age, registerDate, id) values (?, ?, ?, ?)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值