Java持久性API(JPA)第2讲——完成信息添加

目标:
  • 通过如下调用过程完成用户信息的添加,在JSP页面输入用户信息,提交给Servlet,Servlet调用会话Bean,会话Bean调用实体类。
  • 掌握JPA的基本概念。
包括两部分内容:
  • 添加功能
  • JPA概述
添加功能的开发过程如下:
  • 在UserSession会话Bean中添加业务方法
  • 编写输入用户信息的界面addUser.jsp
  • 编写添加功能的控制器AddUserServlet.java
JPA概述的内容包括:
  • 使用JPA完成与数据库的交互,与使用JDBC完成与数据库的交互,这两种方式之间的区别
  • Java持久性要解决的问题
  • 编写实体类需要编写的文件
  • 如何访问实体类
  • 常用的JPA接口
下面分别进行介绍。
注意:本次内容的实例基于第一讲。
第一部分:添加功能
在UserSession会话Bean中添加业务方法
首先需要在业务接口中添加方法的声明,然后在Bean类中实现该方法。
在业务接口UserManagerRemote.java中添加如下方法声明:
public void addUser(String userid,String username,String userpass,char usertype);
在Bean类UserManagerBean.java中添加如下方法:
public void addUser(String userid,String username,String userpass,char usertype){
Userinfo user = new Userinfo(userid,username,userpass,usertype);
em.persist(user);
}
em是上一次实例中在Bean类中注入的EntityManager对象,persist方法完成持久化,相对于数据库的插入操作。通过这个方法对象user中的信息就被写入到数据库了。
编写输入用户信息的界面addUser.jsp
在UserWeb中添加JSP文件,用于添加用户信息,代码如下:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%--
The taglib directive below imports the JSTL library. If you uncomment it,
you must also add the JSTL library to the project. The Add Library... action
on Libraries node in Projects view can be used to add the JSTL 1.1 library.
--%>
<%--
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>JSP Page</h1>
<form action="AddUserServlet" method="POST">
用户ID:<input type="text" name="userid" value="" /><br>
用户名:<input type="text" name="username" value="" /><br>
口令:< input type="password" name="userpass" value="" /><br>
权限:<select name="usertype">
<option value="0"> 普通用户</option>
<option value="1"> 管理员< /option>
</select><br>
<input type="submit" value=" 提交" /><input type="reset" value="重置" />
</form>
</body>
</html>
其中红色部分的代码声明了要提交给AddUserServlet进行处理。
编写添加功能的控制器AddUserServlet.java
AddUserServlet控制器完成的功能如下:
u 获取用户输入的信息
u 调用业务方法
u 转向显示信息的界面
AddUserServlet的代码如下(红色部分是需要自己添加的代码):
/*
* AddUserServlet.java
*
* Created on 2007 年5月23日, 上午6:22
*/
package jpa.web;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.EJB;
import jpa.UserManagerRemote;
/**
*
* @author Administrator
* @version
*/
public class AddUserServlet extends HttpServlet {
@EJB
UserManagerRemote user;
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String userid = request.getParameter("userid");
String username = request.getParameter("username");
String userpass = request.getParameter("userpass");
String usertype = request.getParameter("usertype");
user.addUser(userid,username,userpass,usertype.charAt(0));
RequestDispatcher rd = request.getRequestDispatcher("FindAllUserServlet");
rd.forward(request,response);
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
测试
重新部署EJB和Web应用,然后访问: http://localhost:8080/UserWeb/addUser.jsp。
在这个界面输入一个用户信息,然后提交,提交之后可以看到新添加的用户。
第二部分:JPA概述
JPA与JDBC的比较
以前我们通过JDBC完成与数据库的交互,基本过程如下:
n 加载驱动程序;
n 创建连接
n 编写SQL语句
n 创建语句对象;
n 执行SQL语句;
n 对结果进行处理
使用JPA完成查询的过程如下:
em.createQuery(…).getSingleResult()或者em.createQuery(…).getResultList()
使用JPA完成添加的过程如下:
em.persist(User)
相比之下,使用JPA大大减少了编程人员的工作量。但前提是由持久性提供者提供很多实现,编程人员需要编写实体类。下面介绍持久性提供者需要解决的主要问题以及如何编写实体类。
Java持久性要解决的问题
简单的说,Java持久性要解决的主要问题就是内容中对象与数据库中实体之间的同步,涉及的主题如下:
n 数据库信息配置,包括数据库位置、名字、用户名和口令等,另外需要JDBC驱动程序;
n 对象数据的加载,从实体到对象;
n 实体数据的更新,从对象到实体;
n 数据的查询,从数据库加载数据;
n 数据库中实体的关系与内存中对象之间关系的映射;
n 批量处理,包括批量添加、删除、修改等;
n 安全问题;
n 事务问题。
如何编写实体类
所有的实体类应该有一个持久单元来管理,持久单元在一个xml文档中声明。下面的代码就是前面实例中用到的配置文件persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="UserPU" transaction-type="JTA">
<provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
<jta-data-source>entity2</jta-data-source>
<properties>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
最主要的作用就是声明持久单元对应的数据库,通常使用数据源的名字来确定。另外可以声明有哪些实体类。
实体类用于表示数据库中的表,实体类的编写主要确定如下信息:
n 该实体与数据库中的哪个表对应;
n 实体类中的属性与表中的哪个字段对应;
n 实体类中的哪个属性是主键。
编写实体类的时候的主要知识点包括:
声明该类为实体类:
@Entity
声明该实体类与哪个表对应:
@Table(name = "userinfo")
声明该实体类与表中的哪个列对应:
@Column(name = "userid", nullable = false)
private String userid;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "userpass", nullable = false)
private String userpass;
@Column(name = "usertype", nullable = false)
private char usertype;
声明该实体类的主键:
@Id
@Column(name = "userid", nullable = false)
private String userid;
完整的代码参考第一讲。
如何访问实体类
从前面的查询所有用户的功能和添加用户的功能可以看出,对实体的操作主要是通过EntityManager接口完成,如果要查询,需要使用Query接口。
常用的JPA接口
常用的接口如下:
EntityManager接口,完成实体的管理,包括创建查询、删除实体、查询实体和添加实体等。
Query接口,完成各种查询,通常有EntityManager创建,主要使用JPA的查询语言完成,也可以使用标准的SQL语言。
EntityManagerFactory接口,用于创建EntityManager,如果不能注入EntityManager,需要使用EntityManagerFactory创建。
Persistence接口,用于创建EntityManagerFactory对象。

更多内容可以参考《Java EE 5实用教程——基于WebLogic和Eclipse》

采用的是servlet+JSP+JPA的学生信息管理系统 本系统是学生信息管理系统,主要演示JPA在实际项目中的使用,采用的是servlet+JSP+JPA.是EJB JPA 这本书里的例子。 立即下载

相关推荐

Springboot+ajax+jpa实现异步删除修改添加用户

实现了Ajax异步添加修改删除用户,整合了SpringSecurity,jpa等一堆框架...文章说明在https://blog.youkuaiyun.com/woshilishu/article/details/89351894

基于Servlet和JSP的用户管理(三)--添加用户信息功能

思路分析 在添加联系人按钮绑定跳转信息 <form action="${pageContext.request.contextPath}/addUserServlet" method="post"> 第一步:编写addUserServlet package edu.swpu.web.servlet; import edu.swpu.domain.User; import...

lizhi_0813的博客 1592

【智能机器人开发全流程:硬件选型、软件架构与ROS实战,打造高效机器人系统】

通过模块化设计与ROS框架的灵活扩展,可快速搭建适应不同场景的机器人系统。实际开发中需重点关注。

dally2的博客 6046

springboot中+JPA 实现简单的添加用户的功能

springboot中+JPA 实现简单的添加用户的功能 创建springboot项目 我使用的sts开发springboot项目,所以这里介绍的是关于如何在sts中创建项目。其他软件开发也类似,可以去网上搜索如何创建springboot项目。 打开sts --&amp;gt; 点击左上角的File --&amp;gt; New --&amp;gt; Spring Starter Project , ...

strive_for_myself的博客 4079

实战解析:从Innovus到Calibre的LVS错误排查全流程

本文详细解析了从Innovus到Calibre的LVS错误排查全流程,涵盖物理验证关键步骤与工具链协同。通过实战案例分享,重点解决器件不匹配、连接性错误等常见问题,并提供GDS导出规范、网表修正策略等实用技巧,帮助工程师高效完成芯片设计物理验证。

9o8p7i6u5y的博客 1038

基于Web的智能家居(源码+开题)

实践上,智能家居系统的普及和应用将极大改善人们的居住体验,提高生活质量,同时也有助于促进智能家居产业链的发展和完善,为社会经济发展注入新的活力。此外,本研究还将对基于Web的智能家居系统的用户体验进行深入研究,通过用户调研和数据分析,不断优化系统功能和界面设计,提升用户的使用体验和满意度。针对以上问题,本研究将综合运用物联网、云计算、大数据等新一代信息技术,通过系统架构设计、功能模块开发、安全性保障、用户体验优化等多个方面的研究工作,力求为基于Web的智能家居系统的研发和应用提供全面而有效的解决方案。

sryue06的博客 1904

【JSP】用户信息界面操作 ---- 用户信息修改

文章目录用户信息界面操作 ---- 用户信息修改Ⅰ.修改userinfo.jsp 实现修改页面跳转Ⅱ.创建 userUpdate.jsp 修改页面Ⅲ.完善 dbHelper类,添加用户修改方法Ⅳ.创建 upDataServlet,实现用户信息修改功能Ⅴ.效果展示 用户信息界面操作 ---- 用户信息修改 Ⅰ.修改userinfo.jsp 实现修改页面跳转 之前在设计userinfo.jsp中的操作内容时,并没有具体的实现。今天来实现一个简单的用户修改功能。 href="userUpdate.jsp?..

懂得一千零一种,赋予你失败的方法! 1万+

2023华为od机试C卷【启动多任务排序】C++ 实现

一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则立刻开始执行,如果同时有多个任务要执行,则根据任务名称字母顺序排序。

MISAYAONE的博客 888

jpa数据库增删改查基本操作

1.插入一条数据(保存实体) save(T entity) 2.查找一个特定实体 findOne(Id) 3.删除指定实体 delete(T entity); delete(Id); 4.更新实体 @Transaction @Modifying @Query("update Customer as c set c.name = ?1 where c.userid=?2") i

落日流年 2万+

【Python3教程】Python3高级篇之uWSGI 安装配置

本文介绍了在Python 3环境中安装和配置uWSGI的完整流程,涵盖基本安装、Flask/Django应用部署、Nginx集成以及systemd管理等关键环节。主要内容包括:uWSGI的安装前提条件,创建简单WSGI应用,编写uWSGI配置文件(.ini格式),与Nginx配合实现生产环境部署,以及使用systemd实现服务管理。文章还提供了常见Web框架(Flask、Django)的部署示例和高级配置建议,如负载均衡、HTTPS设置等。最后列出了权限、端口占用等常见问题的解决方案,为开发者提供了一套完整

No8g攻城狮的博客 438

STM32实战开发(120):基于STM32的智能pH值检测系统开发

pH值检测:通过pH传感器实时检测溶液的酸碱度。数据采集与处理:STM32单片机通过模拟信号采集并进行数字化处理。数据显示与控制:通过LCD或OLED屏幕实时显示pH值。数据存储与上传:将数据保存在本地SD卡,或通过Wi-Fi模块上传至云平台。低功耗设计:适合长时间运行,减少能源消耗。本文介绍了如何基于STM32单片机开发智能pH值检测系统,涉及硬件设计、软件开发及应用实现。该系统可以实时检测pH值,并将数据展示、存储、上传至云平台,适用于环境监测、农业、水处理等多个领域。

2201_76125393的博客 1818

什么是JPA? Java Persistence API简介

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-XtqzCGB1-1713465135075)]

2401_84010836的博客 833

数学史学习资料:史前数学

著名物理学家伽莫夫(宇宙大爆炸理论以及核聚变理论的提出者)在他的科普书《从1到无穷大》中举了这样一个例子。两个原始部落的酋长比赛,看谁说的数字大。第一个酋长说了三,第二个酋长想了半天,然后说你赢了。你今天听起来觉得这两个人真可笑,至少说出四,岂不就赢了?但是对这两位酋长来讲,所拥有的东西就很少超过三个,比三个多的东西他们就觉得没有必要数清楚了,就用许多来形容了。也就是说,他们生活的环境限制了他们的认知。

howard2005的专栏 902

什么是JPA?Java Persistence API简介

作为规范,Java Persistence API关注持久性,它将Java对象的创建过程和具体的创建形式解耦。并非所有Java对象都需要持久化,但大多数应用程序都会保留关键业务对象。JPA规范允许您定义应该保留哪些对象,以及如何在Java应用程序中保留这些对象。 JPA本身不是一个工具或框架; 相反,它定义了一组可以由任何工具或框架实现的概念。虽然JPA的对象关系映射(ORM)模型最初基于Hibe...

Java_fenxiang的博客 1820

YOLO11改进|注意力机制篇|引入ELA注意力机制

YOLO11添加ELA注意力机制

A1983Z的博客 3648

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java持久性API(JPA)第4讲——删除和修改.doc

 Java持久性API(JPA)——删除和修改目标:使用JPA完成删除和修改功能。主要内容包括:u       根据主键查询u       删除信息u       修改信息因为删除功能和修改功能都是对已有的实体进行操作,通常需要先得到实体,然后对实体进行操作,得到实体需要根据主键进行查询。所以在介绍删除和修改信息之前先介绍如何根据主键查询。1、根据主键查询在第3

李绪成的一亩三分地 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

使用EJB3 Java Persistence API标准化Java持久性

持久性对于大多数企业应用程序都非常关键,因为它们需要访问关系数据库(例如Oracle Database 10g)。如果您正在使用Java开发应用程序,您可能需要完成一些常规任务(例如数据库更新和检索),这是通过编写JDBC和SQL来完成的。最近几年,几种对象关系(O-R)映射框架(例如Oracle TopLink、JBoss Hibernate和BEA Kodo)开始流行,因为它们简化了持久性问题

yzhjisji的专栏 651

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java:使用 JPA 了解 Java 对持久性的支持

Java 平台已经有标准的 API 以 JDBC API 的形式与数据库系统一起工作。这些 API 非常擅长使用数据库,并提供了从 Java 语言方便地与数据库交互所需的方法。

yueqian_edu的博客 149

Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型

 Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型 原文连接:http://java.sun.com/developer/technicalArticles/J2EE/jpa/文章索引Java平台企业版(Java EE)第五版本最重要的主题是易于开发。贯穿整个平台的改变使开发企业Java应用程序变得更简单,需要少的多的代码。值得

龙行天下的专栏 1479

jpa是什么api_什么是JPA? Java Persistence API简介

jpa是什么api 作为规范, Java Persistence API与persistence有关,它宽松地表示Java对象在创建它们的应用程序进程中不存在的任何机制。 并非所有Java对象都需要保留,但是大多数应用程序都可以保留关键业务对象。 JPA规范使您可以定义应保留哪些对象,以及如何在Java应用程序中保留这些对象。 JPA本身不是工具或框架; 相反,它定义了可以由任何工具或框架实...

cxu0262的博客 632

java persistence 2.0_JPA(Java Persistence API)学习一

1.介绍Java持久性API(JPA)是Java的一个规范。它用于在Java对象和关系数据库之间保存数据。JPA充当面向对象的领域模型和关系数据库系统之间的桥梁。由于JPA只是一个规范,它本身不执行任何操作。 它需要一个实现。因此,像Hibernate,TopLink和iBatis这样的ORM工具实现了JPA数据持久性规范。2.JPA版本作为EJB 3.0规范的一部分,Java持久API的第一个版...

weixin_42298128的博客 284

JPA-深度理解

Java应用程序传统上使用JDBC (Java数据库连接)等技术访问关系数据库,来持久存储数据。 由于面向对象技术和关系技术之间的差异,JDBC API要求开发人员手工编写SQL中最基本的CRUD(创建、读取、更新和删除)操作,而这些操作缺乏可移植性。 另外,代码完全依赖于SQL,当从一个数据库转换到另一个数据库时会更加困难。 因为关系技术关注的是数据及其关系,而面向对象不仅强调数据,而且还强调在数据上执行的操作。这导致了面向对象与面向关系不适配。 一个被广泛接受的解决方案是对象关系映射(ORM)。 J

海的那边,还是海吗 6903
上一篇: Java持久性API(JPA)第1讲——简单实例
下一篇: Java持久性API(JPA)第3讲——使用查询
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值