Hibernate的前期学习的配置文件基本都是用最简单的配置,只需要:连接数据库,添加表的映射。因此具体的配置就不贴出来了。想了解的可以参考初学Hibernate
这里主要讲Hibernate Web项目的servlet类。
1.前期准备
首先建立一个servlet类EventManagerServlet,因为是最简单的只需要doGet 方法就行。
public class EventManagerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//TODO
}
}
1.设置响应编码
如果不设置的话,有可能回出现汉字乱码现象
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
2.调用的方法
页面需要展示数据,把数据库中表的数据打印出来。为了方便
,就把后台代码和前台代码混合在一起了,实际操作中最好自己新建一个页面进行数据的展示
/**
* 打印列表
*/
@SuppressWarnings("unused")
private void listEvents(PrintWriter out,SimpleDateFormat dateFormatter){
@SuppressWarnings("deprecation")
List result = HibernateUtil.getSessionfactory().getCurrentSession().createCriteria(Event.class).list();
if (result.size() > 0) {
out.println("<h2>Events in database:</h2>");
out.println("<table border='1'>");
out.println("<tr>");
out.println("<th>Event title</th>");
out.println("<th>Event date</th>");
out.println("</tr>");
Iterator it = result.iterator();
while (it.hasNext()) {
Event event = (Event) it.next();
out.println("<tr>");
out.println("<td>" + event.getTitles() + "</td>");
System.out.println(event.getTitles());
out.println("<td>" + dateFormatter.format(event.getDate()) + "</td>");
out.println("</tr>");
}
out.println("</table>");
}
}
添加数据的时候需要一个表单来进行提交。表单提交的方法如下,一般需要注意action提交的路径。不过现在就一个页面,因此不需要具体的action路径,只需要在提交给当前页面就行,servlet里面会进行判断
/**
* 打印表单
*/
private void printEventForm(PrintWriter out ){
out.println("<h2>Add new event</h2>");
out.print("<form>");
out.print("Title:<input name = 'eventTitle' length = '50'/></br>");
out.print("Date(e.q.24.12.2009):<input name = 'eventDate' length = '10'/></br>");
out.print("<input type = 'submit' name = 'action' value = 'store'/>");
out.print("</form>");
}
当提交的数据的时候应该有个方法保存到 数据库中。
/**
* 保存event
*/
protected void createAndStoreEvent(String title,Date theDate){
Event event = new Event();
event.setId(UUID.randomUUID()+"");
event.setTitles(title);
event.setDate(theDate);
HibernateUtil.getSession().save(event);
}
3.doGet方法
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置响应时的编码格式
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//定义日期的格式
SimpleDateFormat dateFormatter = new SimpleDateFormat();
try {// begin 流程开始
//事物开始 HibernateUtil.getSessionfactory().getCurrentSession().beginTransaction();
// process 流程
// Write HTML header
PrintWriter out = response.getWriter();
out.println("<html><head><title>Event Manager</title></head><body>");
// Handle actions
//判断通过什么方式访问,如果是提交表单的话
if ( "store".equals(request.getParameter("action")) ) {
//获取action提交的信息,判断是否有数据
String eventTitle = request.getParameter("eventTitle");
String eventDate = request.getParameter("eventDate");
//无数据 提示信息
if ( "".equals(eventTitle) || "".equals(eventDate) ) {
out.println("<b><i>Please enter event title and date.</i></b>");
}
else {
//有数据则保存数据
createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));
out.println("<b><i>Added event.</i></b>");
}
}
// Print page
printEventForm(out);
listEvents(out, dateFormatter);
// Write HTML footer
out.println("</body></html>");
out.flush();
out.close();
// end
//事物结束 HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().commit();
} catch (Exception ex) {
//出现异常回滚事物 HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().rollback();
if (ServletException.class.isInstance(ex)) {
throw (ServletException) ex;
} else {
throw new ServletException(ex);
}
}
}
4.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>Event Manager</servlet-name>
<servlet-class>org.grgbanking.servlet.EventManagerServlet</servlet-class>
</servlet>
<!-- 设置访问路径 -->
<servlet-mapping>
<servlet-name>Event Manager</servlet-name>
<url-pattern>/eventmanager</url-pattern>
</servlet-mapping>
</web-app>
5.运行
发布项目,可以采用tomcat来发布,通过下面这个路径访问,其中
/hibernate是你的项目名
/eventmanager是你在web.xml设置的访问路径
http://localhost:8080/hibernate/eventmanager
6.servlet完整的代码
package org.grgbanking.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.grgbanking.pojo.Event;
import org.grgbanking.util.HibernateUtil;
/**
*
* @author cjyun
* @Date 2016年11月23日
*/
public class EventManagerServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
SimpleDateFormat dateFormatter = new SimpleDateFormat();
try {// begin
HibernateUtil.getSessionfactory().getCurrentSession().beginTransaction();
// process
// Write HTML header
PrintWriter out = response.getWriter();
out.println("<html><head><title>Event Manager</title></head><body>");
// Handle actions
if ( "store".equals(request.getParameter("action")) ) {
String eventTitle = request.getParameter("eventTitle");
String eventDate = request.getParameter("eventDate");
if ( "".equals(eventTitle) || "".equals(eventDate) ) {
out.println("<b><i>Please enter event title and date.</i></b>");
}
else {
createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));
out.println("<b><i>Added event.</i></b>");
}
}
// Print page
printEventForm(out);
listEvents(out, dateFormatter);
// Write HTML footer
out.println("</body></html>");
out.flush();
out.close();
// end
HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().commit();
} catch (Exception ex) {
HibernateUtil.getSessionfactory().getCurrentSession().getTransaction().rollback();
if (ServletException.class.isInstance(ex)) {
throw (ServletException) ex;
} else {
throw new ServletException(ex);
}
}
}
/**
* 打印表单
*/
private void printEventForm(PrintWriter out ){
out.println("<h2>Add new event</h2>");
out.print("<form>");
out.print("Title:<input name = 'eventTitle' length = '50'/></br>");
out.print("Date(e.q.24.12.2009):<input name = 'eventDate' length = '10'/></br>");
out.print("<input type = 'submit' name = 'action' value = 'store'/>");
out.print("</form>");
}
/**
* 打印列表
*/
@SuppressWarnings("unused")
private void listEvents(PrintWriter out,SimpleDateFormat dateFormatter){
@SuppressWarnings("deprecation")
List result = HibernateUtil.getSessionfactory().getCurrentSession().createCriteria(Event.class).list();
if (result.size() > 0) {
out.println("<h2>Events in database:</h2>");
out.println("<table border='1'>");
out.println("<tr>");
out.println("<th>Event title</th>");
out.println("<th>Event date</th>");
out.println("</tr>");
Iterator it = result.iterator();
while (it.hasNext()) {
Event event = (Event) it.next();
out.println("<tr>");
out.println("<td>" + event.getTitles() + "</td>");
System.out.println(event.getTitles());
out.println("<td>" + dateFormatter.format(event.getDate()) + "</td>");
out.println("</tr>");
}
out.println("</table>");
}
}
/**
* 保存event
*/
protected void createAndStoreEvent(String title,Date theDate){
Event event = new Event();
event.setId(UUID.randomUUID()+"");
event.setTitles(title);
event.setDate(theDate);
HibernateUtil.getSession().save(event);
}
}
HibernateUtil工具类为
package org.grgbanking.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*
* @author cjyun
* @date 2016年11月22日
*/
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SssionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionfactory() {
return sessionFactory;
}
}