Hibernate架構與入門

初次接觸到Hibernate,這裏將簡單介紹一下Hibernate,然後做一個簡單的項目,看看Hibernate是如何架構和配置文件如何寫等。

O/R Mapping

對象關係映射(Object Relational Mapping,簡稱ORM)技術,是通過使用描述對象和數據庫之間映射的元數據,將Java程序中的對象自動持久化到關係數據庫中。

Hibernate體系結構

步驟:

第1步: 先建一個Java工程導入使用Hibernate最小必要包。可以到網站下載Hibernate最新的包,如果訪問數據庫,則需要導入數據庫驅動包。最小必要包:

 

第2步:在src創建配置文件hibernate.cfg.xml,放置在src目錄中。

第3步:編寫一個會話工廠類。通過會話工廠類產生一個會話Session對象。Session對象是Hibernate的核心。任何對數據庫操作都在會話中進行的。

第4步:編寫POJO類以及映射文件。

第5步:編寫測試文件

 

代碼:

canHibWeb

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <servlet>
    <servlet-name>HibDemoServlet</servlet-name>
    <servlet-class>cn.hncu.servlet.HibDemoServlet</servlet-class>
    <init-param>
    	<param-name>show</param-name>
    	<param-value>/jsps/show.jsp</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>HibDemoServlet</servlet-name>
    <url-pattern>/HibDemoServlet</url-pattern>
  </servlet-mapping>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


 

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
    <jsp:forward page="/HibDemoServlet"></jsp:forward>
  </body>
</html>


HibDemoServlet.java(由於這是一個簡單的項目,爲了儘量簡略一點,service層和dao層的接口就不再寫了)

package cn.hncu.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.hncu.domain.Student;
import cn.hncu.service.HibDemoServiceImpl;

public class HibDemoServlet extends HttpServlet {
	private HibDemoServiceImpl service=new HibDemoServiceImpl();
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		List<Student> students=service.queryAllStudents();
		request.setAttribute("students",students);
		String resultPage=getInitParameter("show");
		request.getRequestDispatcher(resultPage).forward(request, response);
	}

}


HibDemoServiceImpl.java

package cn.hncu.service;

import java.util.List;

import cn.hncu.dao.HibDemoJdbcDao;
import cn.hncu.domain.Student;

public class HibDemoServiceImpl {
	private HibDemoJdbcDao dao=new HibDemoJdbcDao();
	public List<Student> queryAllStudents(){
		return dao.queryAllStudents();
	}
}	


HibDemoJdbcDao.java

package cn.hncu.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import cn.hncu.domain.Student;
import cn.hncu.hib.HibernateSessionFactory;

public class HibDemoJdbcDao {
	public List<Student> queryAllStudents(){
		Session session=HibernateSessionFactory.getSession();
		//SQL  ---Structured Query Language ---面向R(關係--表)
		//HQL  ---Hibernate Query Language ---面向O(值對象)
		Query query=session.createQuery("from Student");//HQL
		List<Student> students=query.list();
		return students;
	}
}


hibernate.cfg.xml(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.username">hncu</property>
	<property name="connection.url">
		jdbc:mysql://127.0.0.1:3306/hib
	</property>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<property name="connection.password">1234</property>
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	
	
	<mapping resource="cn/hncu/domain/Student.hib.xml" />

</session-factory>

</hibernate-configuration>



值對象Student.java

package cn.hncu.domain;

public class Student {
	private String id;
	private String name;
	private Integer age;
	private String deptId;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getDeptId() {
		return deptId;
	}
	public void setDeptId(String deptId) {
		this.deptId = deptId;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age
				+ ", deptId=" + deptId + "]";
	}
	
}


Student.hib.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 package="cn.hncu.domain">
	<class name="Student" table="students" catalog="hib">
		<id name="id" column="id"></id>
		<property name="name">
			<column name="name"></column>
		</property>
		<property name="age">
			<column name="age"></column>
		</property>
		<property name="deptId">
			<column name="deptId"></column>
		</property>
	</class>

</hibernate-mapping>


show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
	  <style type="text/css">
	  		table{
	  			border: 1px solid blue;
	  			border-collapse: collapse;
	  			width:60%;
	  		}
	  		td,th{
	  			border: 1px solid blue;
	  			padding: 5px;
	  		}
  	  </style>
  </head>
  
  <body>
    <h2>演示Hibernate進行單表的增刪改查技術</h2>
    <table>
    	<tr align="center">
    		<th>學號</th>
    		<th>姓名</th>
    		<th>年齡</th>
    		<th>學院編號</th>
    		<th>操作</th>
    	</tr>
    	
    	<c:forEach items="${students}" var="student">
    		<tr align="center">
    			<td>${student.id }</td>
    			<td>${student.name }</td>
    			<td>${student.age }</td>
    			<td>${student.deptId }</td>
    			<td><a href="#">刪除</a></td>
    		</tr>
    	</c:forEach>
    </table>
  </body>
</html>
   


結果圖:

 

個人總結:

Hibernate是對象關係映射,面向的是dao與數據庫,不再是使用sql語句,而是使用對象操作。所以需要hibernate自己的配置文件而且需要值對象映射文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章