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

定时移动鼠标点击鼠标,防止电脑息屏的vba脚本

定时移动鼠标,使系统始终处于激活状态,防止系统息屏。

panfei263031的博客 5932

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

网络流量监测技术

NetFlow是Cisco公司提出的网络数据包交换技术,该技术首先被用于网络设备对数据交换进行加速,并可同步实现对高速转发的IP数据流(Flow)进行测量和统计。  随着宽带互联网在中国 的迅速发展,全国各大电信运营商的网络规模都在不断扩张,网络结构日渐复杂,网络业务日趋丰富,网络流量高速增长。电信运营商需要通过可靠、有效的网络业 务流量监测系统对其网络以及网络所承载的各类业务进行及时、准

红杉树(ecitnet)的博客 5540

告别手动改代码!用SSC工具5分钟搞定EtherCAT从站动态模块配置(含Excel模板)

本文详细介绍了如何利用SSC工具和Excel模板实现EtherCAT从站动态模块配置的自动化流程。通过零代码修改的动态配置方案,大幅提升工业自动化产线的灵活性和效率,配置时间从平均4小时缩短至8分钟,错误率下降96%。文章包含Excel模板设计、实战演示和避坑指南,助力工程师快速掌握这一高效工具。

weixin_28339967的博客 571

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

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

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

华为鸿蒙系统也能用!5分钟搞定谷歌三件套安装(附最新APK下载链接)

本文为华为鸿蒙系统用户提供了一份详尽的谷歌三件套(Google Play服务、商店及框架)手动安装指南。文章核心在于无需Root,通过ADB命令获取设备信息,并从可靠来源下载匹配版本的APK,按照正确顺序安装,从而解决海外应用依赖问题,实现5分钟快速部署。

c7d8e9的博客 6540

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万+

YOLOv5 改进点总览:轻量化、高精度的背后有哪些魔改?

YOLOv5是由Ultralytics团队开发的高效目标检测模型,其核心改进包括:主干网络采用CSPDarknet53提升梯度传播效率;特征融合使用PANet增强小目标识别;输出结构采用解耦头设计优化定位和分类任务。此外,YOLOv5通过CIoU损失函数、Mosaic数据增强和SimOTA标签分配机制进一步提升性能。模型支持多种推理格式(ONNX/TensorRT等),并具备自动锚框匹配和多尺度训练功能,使其在轻量化(yolov5s仅7MB)与高性能(最高51.2% mAP)间取得平衡,但缺乏正式论文支撑是

guoguozgw的博客 1806

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6419

什么是JPA? Java Persistence API简介

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

2401_84010836的博客 833

iOS自动化之打包-xcodebuild命令行打包.app并安装到ios模拟器

xcode xcodebuild xcrun ios模拟器 iOS UI自动化测试 ios自动打包安装到ios模拟器

z12347891的博客 5079

什么是JPA?Java Persistence API简介

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

Java_fenxiang的博客 1820

为何wait和notify方法必须加锁?

为何wait和notify方法必须加锁? 是为了避免Lost Wake Up问题,即丢失唤醒问题。 所谓Lost Wake Up,指的是:线程A调用wait()方法进入阻塞状态,接下来没有其他线程去唤醒线程A,或者其他线程唤醒的时机不对(早于线程A的wait()),导致线程A永远阻塞下去。 下面以一个生产者和消费者的案例来说明上述问题。 假如我们有两个线程,一个消费者线程,一个生产者线程。生产者线程的任务可以简化成将count加一,而后唤醒消费者;消费者则是将count减一,而后在减到0的时候陷入睡眠,.

打酱油的葫芦娃 9155

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

yzhjisji的专栏 651

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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、付费专栏及课程。

余额充值