Hibernate的基本开发流程

今天药忘吃喽~ 2022-09-27 06:28 316阅读 0赞

一、Hibernate开发的基本流程

20170307214135588

二、Hibernate开发的环境搭建

1、引入Hibernate核心包以及Hibernate依赖包即可。可以在Hibernate目录下的\lib\required目录下找到所需jar包。

20170307213143849

2、加入数据库驱动。这里主要是采用Mysql数据库来操作,所以在这里引入MysqL的JDBC驱动。

3、提供核心配置文件hibernate.cfg.xml文件(在src文件夹下即可)。

20170307215429302

三、数据库方面的操作

在mysql中新建一个数据库Hibernate5,然后建立如下的一个表来进行测试。

create table T_register
(
id int primary key,
userName varchar(30),
userPwd varchar(30),
sex varchar(10),
age int
)

20170307220006535

四、编写POJO类

根据数据表的字段情况,创建如下持久化类,实际上是一个javaBean类

  1. package com.chen;
  2. public class TRegister{
  3. //定义基本属性,与数据库中的字段对应。注意都是引用类型
  4. private Integer id;
  5. private String userName;
  6. private String userPwd;
  7. private String sex;
  8. private Integer age;
  9. // Constructors
  10. /** default constructor */
  11. public TRegister() {
  12. }
  13. /** minimal constructor */
  14. public TRegister(Integer id) {
  15. this.id = id;
  16. }
  17. /** full constructor */
  18. public TRegister(Integer id, String userName, String userPwd, String sex, Integer age) {
  19. this.id = id;
  20. this.userName = userName;
  21. this.userPwd = userPwd;
  22. this.sex = sex;
  23. this.age = age;
  24. }
  25. // 定义get set方法
  26. public Integer getId() {
  27. return this.id;
  28. }
  29. public void setId(Integer id) {
  30. this.id = id;
  31. }
  32. public String getUserName() {
  33. return this.userName;
  34. }
  35. public void setUserName(String userName) {
  36. this.userName = userName;
  37. }
  38. public String getUserPwd() {
  39. return this.userPwd;
  40. }
  41. public void setUserPwd(String userPwd) {
  42. this.userPwd = userPwd;
  43. }
  44. public String getSex() {
  45. return this.sex;
  46. }
  47. public void setSex(String sex) {
  48. this.sex = sex;
  49. }
  50. public Integer getAge() {
  51. return this.age;
  52. }
  53. public void setAge(Integer age) {
  54. this.age = age;
  55. }
  56. }

五、配置相关的xml文件

1、配置hibernate.cfg.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <!-- 配置连接数据库的基本信息 -->
  8. <property name="connection.username">root</property>
  9. <property name="connection.password">root</property>
  10. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  11. <property name="connection.url">jdbc:mysql://192.168.1.148:3306/hibernate5</property>
  12. <!-- 配置 hibernate 的基本信息 -->
  13. <!-- hibernate 所使用的数据库方言 -->
  14. <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
  15. <!-- 执行操作时是否在控制台打印 SQL -->
  16. <property name="show_sql">true</property>
  17. <!-- 是否对 SQL 进行格式化 -->
  18. <property name="format_sql">true</property>
  19. <!-- 指定关联的 .hbm.xml 文件 -->
  20. <mapping resource="com/chen/TRegister.hbm.xml"/>
  21. </session-factory>
  22. </hibernate-configuration>

注意:Hibernate4连接MySQL5.X数据库无法自动创建表,解决方法把数据库方言设为

org.hibernate.dialect.MySQL5InnoDBDialect

2、配置映射文件TRegister.hbm.xml

在持久化类所在的包中建立TRegister.hbm.xml ,可以通过eclipse Hibernate插件来完成

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!-- Generated 2017-3-7 22:14:28 by Hibernate Tools 3.4.0.CR1 -->
  5. <hibernate-mapping>
  6. <class name="com.chen.TRegister" table="TREGISTER">
  7. <id name="id" type="java.lang.Integer">
  8. <column name="ID" />
  9. <!-- 我在MYSQL中并没有设置该字段递增,但在Hibernate中依然可以设置为递增 -->
  10. <generator class="increment" />
  11. </id>
  12. <property name="userName" type="java.lang.String">
  13. <column name="USERNAME" />
  14. </property>
  15. <property name="userPwd" type="java.lang.String">
  16. <column name="USERPWD" />
  17. </property>
  18. <property name="sex" type="java.lang.String">
  19. <column name="SEX" />
  20. </property>
  21. <property name="age" type="java.lang.Integer">
  22. <column name="AGE" />
  23. </property>
  24. </class>
  25. </hibernate-mapping>

六、编写事务处理类HibernateUtil.java

  1. package hibernate;
  2. import org.hibernate.HibernateException;
  3. import org.hibernate.Session;
  4. import org.hibernate.SessionFactory;
  5. import org.hibernate.cfg.Configuration;
  6. import org.hibernate.service.ServiceRegistry;
  7. import org.hibernate.service.ServiceRegistryBuilder;
  8. public class HibernateUtil {
  9. private static final SessionFactory sessionFactory;
  10. static
  11. {
  12. try
  13. {
  14. Configuration config = new Configuration().configure();
  15. ServiceRegistry serviceRegistry=
  16. new ServiceRegistryBuilder().applySettings(config.getProperties())
  17. .buildServiceRegistry();
  18. sessionFactory = config.buildSessionFactory(serviceRegistry);
  19. }
  20. catch(Throwable e)
  21. {
  22. throw new ExceptionInInitializerError(e);
  23. }
  24. }
  25. public static final ThreadLocal session = new ThreadLocal();
  26. public static Session currentSession() throws HibernateException
  27. {
  28. Session s = (Session)session.get();
  29. //Open a new Session,if this Thread has none yet
  30. if(s == null || !s.isOpen())
  31. {
  32. s = sessionFactory.openSession();
  33. session.set(s);
  34. }
  35. return s;
  36. }
  37. public static void closeSession() throws HibernateException
  38. {
  39. Session s = (Session)session.get();
  40. session.set(null);
  41. if(s != null)
  42. s.close();
  43. }
  44. }

七、编写Servlet控制类RegisterServlet

  1. package servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import org.hibernate.HibernateException;
  10. import org.hibernate.Session;
  11. import org.hibernate.Transaction;
  12. import com.chen.TRegister;
  13. import hibernate.HibernateUtil;
  14. /**
  15. * Servlet implementation class RegisterServlet
  16. */
  17. @WebServlet("/RegisterServlet")
  18. public class RegisterServlet extends HttpServlet {
  19. private static final long serialVersionUID = 1L;
  20. private static final String CONTENT_TYPE = "text/html;charset=GBK";
  21. /**
  22. * @see HttpServlet#HttpServlet()
  23. */
  24. public RegisterServlet() {
  25. super();
  26. // TODO Auto-generated constructor stub
  27. }
  28. /**
  29. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  30. */
  31. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  32. response.setContentType(CONTENT_TYPE);
  33. request.setCharacterEncoding("GBK");
  34. PrintWriter out = response.getWriter();
  35. String userName = request.getParameter("userName");
  36. String userPwd = request.getParameter("userPwd");
  37. String sex = request.getParameter("sex");
  38. int age = Integer.parseInt(request.getParameter("age"));
  39. TRegister rg = new TRegister();
  40. rg.setAge(age);
  41. rg.setSex(sex);
  42. rg.setUserName(userName);
  43. rg.setUserPwd(userPwd);
  44. Session session = HibernateUtil.currentSession();//生成Session实例
  45. Transaction tx = session.beginTransaction();
  46. try
  47. {
  48. session.save(rg); //保存持久类对象
  49. tx.commit(); //提交到数据库
  50. session.close();
  51. response.sendRedirect("registerOK.jsp");
  52. }
  53. catch(HibernateException e)
  54. {
  55. e.printStackTrace();
  56. tx.rollback();
  57. }
  58. }
  59. /**
  60. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  61. */
  62. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  63. // TODO Auto-generated method stub
  64. doGet(request, response);
  65. }
  66. }

八、编写jsp页面进行测试

1、register.jsp

  1. <%@ page language="java" contentType="text/html; charset=GBK"
  2. pageEncoding="GBK"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=GBK">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <form action="RegisterServlet" method="POST">
  11. 用户名:<input type="text" name="userName" /><BR>
  12. 密 码:<input type="text" name="userPwd" /><BR>
  13. 性 别:<input type="text" name="sex" /><BR>
  14. 年 龄:<input type="text" name="age" /><BR>
  15. <input type="submit" value="save" />
  16. </form>
  17. </body>
  18. </html>

2、 registerOK.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. 数据已保存到数据库,请查看.......
  11. </body>
  12. </html>

九、运行验证

运行register.jsp页面,填写信息,完成后点击save完成保存。查看数据库可以看到数据已保存。

发表评论

表情:
评论列表 (有 0 条评论,316人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hibernate运行流程

      首先了解什么是对象关系映射,ORM(Object/Relationship Mapping):对象关系映射。对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的

    相关 软件开发基本流程概述

    在很多人看来,计算机软件开发主要就是开发人员的工作,只要把想法告诉他们,他们就能把软件开发出来,这种情况是存在的,要不这个软件非常简单,要不有这样能力的开发人员综合能力是非常强