初次接觸到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自己的配置文件而且需要值對象映射文件。