jsp hibernate 数据保存操作的原理

JSP是Java Web应用中常用的视图层技术,而Hibernate则是Java编程语言中非常流行的ORM框架。这两种技术结合使用可以方便、快速地实现Web应用中的数据持久化操作。

在开发中,我们通常需要涉及到实例化Hibernate SessionFactory,并设置相关数据源连接池与映射文件路径等参数;创建Hibernate映射文件、实体对象类以及相关业务逻辑类,同时封装Hibernate的数据操作方法;在JSP页面中通过EL表达式或JSTL标签等方式调用业务逻辑类的方法实现数据的增删改查等操作。下面就进一步讲解这些步骤的具体实现方法:

一、Hibernate数据持久化配置与实现

1.1 配置 HibernateSessionFactory

用Java编写的Web应用开发时,可以通过在Web容器启动后创建一个全局的Hibernate SessionFactory实例来进行操作。Hibernate SessionFactory 的实现基于 Configuration 对象和 Java Bean 的 DataSource 对象,包括了 Hibernate 映射文件的属性、数据库的连接池等相关信息。下面是一个配置示例:

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    static {
        try {
            Configuration cfg = new Configuration();
            cfg.configure("hibernate.cfg.xml");
            sessionFactory = cfg.buildSessionFactory();
        } catch (Throwable ex) {
            // 打印异常信息
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    // 初始化 Session
    public static Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    // 关闭 Session
    public static void closeSession() {
        Session session = sessionFactory.getCurrentSession();

        if (session != null && session.isOpen()) {
            session.close();
        }
    }
}

在这个类中,我们创建了一个静态的 SessionFactory 变量,该变量是应用程序全局唯一的,用于 Hibernate ORM 操作时,使用 Hibernate SessionFactory 获取 Session 对象,再进行数据的持久化操作。

1.2 创建 Hibernate 的映射文件和实体对象类

在项目中,我们首先需要定义 Hibernate 映射文件,这些文件通常用 XML 格式编写,与实体对象的属性映射关系,如示例中的 Student.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.xxx.Student" table="tbl_student" catalog="db_test">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" />
        </property>
        <property name="age" type="java.lang.Integer">
            <column name="age" />
        </property>
    </class>
</hibernate-mapping>

同时,我们需要创建实体对象类,该类需要与数据库中的表结构相对应,具有对应的属性和get/set方法。如下面的 Student 类:

public class Student {
    private Integer id;
    private String name;
    private Integer age;

    /* getter and setter goes here */
}

1.3 创建业务逻辑类

我们可以通过封装 Hibernate 的常用数据操作方法,创建可复用的通用业务逻辑类,以便于后续的开发。下面是 StudentDao 的示例代码:

public class StudentDao {
    private Session session;
    private Transaction transaction;

    public StudentDao() {
        session = HibernateUtil.getSession();
        transaction = session.getTransaction();
    }

    public void save(Student student) {
        try {
            transaction.begin();
            session.save(student);
            transaction.commit();
        } catch (HibernateException e) {
            transaction.rollback();
        }
    }
}

在这个示例中,我们封装了 Hibernate CRUD 操作,包括创建保存、查询、删除、更新等方法,开发者可以通过继承并实现这个通用逻辑类,使得持久化操作更方便快速。

二、JSP页面操作 Hibernate 数据库

JSP 在 Java Web 应用中被广泛使用,主要用于呈现页面的视图模板。我们可以通过 JSP 完成具体的数据展示,实现类似增删改查等操作。

2.1 新建JSP页面,引入相关类

我们可以在 Web 应用的根目录下,新建一个 JSP 页面,如 create.jsp。在这个 JSP 文件中,我们需要引入 Hibernate 的常用类:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="org.hibernate.SessionFactory"%>
<%@ page import="org.hibernate.Session"%>
<%@ page import="org.hibernate.Transaction"%>
<%@ page import="java.util.List"%>
<%@ page import="com.xxx.Student"%>
<%@ page import="com.xxx.StudentDao"%>

同时,在页面中我们需要实例化 StudentDao 来操作数据库:

<%
    StudentDao studentDao = new StudentDao();
    Student student = new Student();
    student.setName("test");
    student.setAge(18);
    studentDao.save(student);
%>

2.2 在 JSP 页面中展示数据库的内容

除了保存操作之外,我们还可以在 JSP 页面中展示保存成功后的数据。假设我们已经对数据库进行了压测,现在需要在页面中根据用户输入来查询数据并展示。我们可以通过类似如下代码来完成:

<% 
  Query q = session.createQuery("from Student s where s.name = :name");
  q.setParameter("name", request.getParameter("name"));
  List students = q.list();
 %>

 <table>
   <tr>
     <th>ID</th>
     <th>Name</th>
     <th>Age</th>
   </tr>

   <% for (Student s : students) { %>
   <tr>
     <td><%= s.getId() %></td>
     <td><%= s.getName() %></td>
     <td><%= s.getAge() %></td>
   </tr>
   <% } %>
 </table>

上面的代码利用 session 查询数据库中的学生信息,并在页面上展示查询出来的相关信息。但是,在生产环境中,避免把大量的数据库操作放在页面中,这样可能会导致应用响应变慢、页面加载时间太长等问题。

三、完整示例

下面是一些完整的示例代码,其中包含了数据库操作和 JSP 页面展示相关的代码。

3.1 Hibernate数据持久化操作的示例

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    static {
        try {
            Configuration cfg = new Configuration();
            cfg.configure("hibernate.cfg.xml");
            sessionFactory = cfg.buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    // 初始化 Session
    public static Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    // 关闭 Session
    public static void closeSession() {
        Session session = sessionFactory.getCurrentSession();

        if (session != null && session.isOpen()) {
            session.close();
        }
    }
}
public class StudentDao {
    private Session session;
    private Transaction transaction;

    public StudentDao() {
        session = HibernateUtil.getSession();
        transaction = session.getTransaction();
    }

    public void save(Student student) {
        try {
            transaction.begin();
            session.save(student);
            transaction.commit();
        } catch (HibernateException e) {
            transaction.rollback();
        }
    }
}
public class Student {
    private Integer id;
    private String name;
    private Integer age;

    public Student() {}

    public Integer getId() {
        return id;
    }

    public void setId(Integer 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;
    }
}

3.2 JSP页面操作Hibernate数据库的示例

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="org.hibernate.SessionFactory"%>
<%@ page import="org.hibernate.Session"%>
<%@ page import="org.hibernate.Transaction"%>
<%@ page import="java.util.List"%>
<%@ page import="com.xxx.Student"%>
<%@ page import="com.xxx.StudentDao"%>

<%
    StudentDao studentDao = new StudentDao();
    Student student = new Student();
    student.setName("test");
    student.setAge(18);
    studentDao.save(student);

    Session session = HibernateUtil.getSession();
    Query q = session.createQuery("from Student s where s.name = :name");
    q.setParameter("name", "test");
    List<Student> students = (List<Student>) q.list();
    HibernateUtil.closeSession();
%>
<html>
<head>
    <meta charset="UTF-8">
    <title>Student Info</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Age</th>
            </tr>
        </thead>
        <tbody>
            <% for(Student s: students) { %>
            <tr>
                <td><%= s.getId() %></td>
                <td><%= s.getName() %></td>
                <td><%= s.getAge() %></td>
            </tr>
            <% } %>
        </tbody>
    </table>
</body>
</html>

在这个示例中,我们通过 JSP 展示了数据库中的数据,同时也展示了如何在 JSP 中完成 Hibernate 数据持久化的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp hibernate 数据保存操作的原理 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 教你如何使用Java输出各种形状

    如何使用Java输出各种形状 本文将介绍如何使用Java语言输出多种形状,包括矩形、三角形和菱形等。通过学习本文,您将了解到Java中输出各种形状的方法及实例。 矩形 矩形是最简单的图形之一,我们可以使用Java的for循环输出一个指定宽度和高度的矩形。以下是代码示例: // 输出一个5行4列的矩形 int width = 4; int height = 5…

    Java 2023年5月26日
    00
  • 使用IDEA配置Tomcat和连接MySQL数据库(JDBC)详细步骤

    以下是使用IDEA配置Tomcat和连接MySQL数据库(JDBC)详细步骤: 配置Tomcat 步骤1:下载Tomcat 首先,我们需要下载Tomcat。可以在Tomcat官网下载。下载完成后,将Tomcat压缩包解压到本地合适的目录。 步骤2:在IDEA中添加Tomcat服务器 1.打开IDEA,进入File -> Settings -> B…

    Java 2023年5月20日
    00
  • 详解spring mvc(注解)上传文件的简单例子

    Spring MVC是一种常用的Web框架,它提供了一种方便的方式来处理HTTP请求和响应。在Spring MVC中,我们可以使用注解来处理文件上传。本文将详细讲解“详解Spring MVC(注解)上传文件的简单例子”的完整攻略,并提供两个示例说明。 步骤一:添加依赖 我们需要在pom.xml文件中添加以下依赖: <dependency> &lt…

    Java 2023年5月18日
    00
  • JavaEE账号注册模拟网站邮箱激活

    JavaEE账号注册模拟网站邮箱激活是一个常见的Web应用程序开发需求。具体实现这个功能的步骤如下: 1. 搭建Web应用程序 首先,需要搭建一个基于JavaEE的Web应用程序,这个应用程序会充当网站的后端服务器,接收客户端请求并返回数据。可以使用诸如Tomcat、Jetty等开源的Web服务器来搭建这个Web应用程序。 2. 设计数据库 建立数据库表,通…

    Java 2023年6月15日
    00
  • java构造函数的三种类型总结

    Java构造函数是用来初始化类的对象的函数。在Java中,有以下三种类型的构造函数: 默认构造函数(Default Constructor) 默认构造函数是没有参数的构造函数,也就是说,如果一个类没有定义任何构造函数,那么默认会有一个不带参数的构造函数。当我们创建类的对象时,如果没有显式地调用构造函数,那么就会自动调用默认构造函数。 以下是默认构造函数的示例…

    Java 2023年5月26日
    00
  • Java中循环冗余校验(CRC32)的实现

    Java中循环冗余校验(CRC32)的实现 简介 循环冗余校验(CRC)是一种根据数据产生校验码的技术,它主要用于检测或者校验数据,以确定数据的完整性和准确性。在Java中,CRC32是循环冗余校验算法的一种常用实现。 实现步骤 1. 使用java.util.zip.CRC32类 Java提供了java.util.zip.CRC32类来实现CRC32算法。这…

    Java 2023年5月19日
    00
  • 教你怎么用Java操作Redis

    下面为你详细讲解如何使用Java操作Redis: 1. 前置条件 在使用Java操作Redis之前,你需要确保已经完成以下步骤: 在本地或者服务器上安装Redis并启动。 在Java项目中引入Redis的Java客户端依赖包,例如Jedis或Lettuce。 2. 连接Redis 在Java中连接Redis的方式很简单,只需要创建一个Redis客户端对象,设…

    Java 2023年5月26日
    00
  • Java实战之校园外卖点餐系统的实现

    Java实战之校园外卖点餐系统的实现攻略 本次攻略将介绍如何用Java实现一个校园外卖点餐系统。本系统涵盖了用户注册登录、商家上传餐品、用户下单、商家接单等功能。 思路分析 用户注册登录:用户需要填写基本信息,通过验证后才能注册成功。注册成功后,用户可以用自己的账号密码进行登录。 商家上传餐品:商家需要填写餐品名称、价格、描述和图片等信息,上传后用户可以浏览…

    Java 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部