实验4.JPA基本用法 实验内容 创建客户表,使用MyEclipse提供的工具,根据客户表生成实体类,并生成对实体进行 操作的会话Bcan,能够完成基本的增删改查操作,编写Web客户端程序进行测试。 实验目的 ◆掌握实体类的基本概念: ◆能够在MyEclipse中创建实体类: ◆能够通过JPA完成基本的增删改查。 实验介绍(整体与本实验) 本试验要求学生对Web应用比较熟悉,对会话Bean的概念比较了解。 环境要求 服务器:Jboss6.0 集成开发环境:Eclipse8.5 MyEclipse8.6 数据库:MSq及其驱动程序 实验指导 步豫1:创建数据库表 1.(可选)启动MySql数据库 如果数据库己经启动,则不用启动。 2. 打开数据库操作视图 在主菜单中选择Window】→【Open Perspective】→【MyEclipse Database Explorer】, 如果没有找到【MyEclipse Database Explorer】,选择【Other..】,在出现的列表中选择 [MyEclipse Database Explorer 3.新建数据库连接 a)在【DB Browser】窗口中的空白位置,点击右键,弹出如图4.1所示的菜单
实验 4. JPA 基本用法 实验内容 创建客户表,使用 MyEclipse 提供的工具,根据客户表生成实体类,并生成对实体进行 操作的会话 Bean,能够完成基本的增删改查操作,编写 Web 客户端程序进行测试。 实验目的 ◆ 掌握实体类的基本概念; ◆ 能够在 MyEclipse 中创建实体类; ◆ 能够通过 JPA 完成基本的增删改查。 实验介绍(整体与本实验) 本试验要求学生对 Web 应用比较熟悉,对会话 Bean 的概念比较了解。 环境要求 服务器:Jboss6.0 集成开发环境:Eclipse8.5/MyEclipse 8.6 数据库:MySql 及其驱动程序 实验指导 步骤 1:创建数据库表 1. (可选)启动 MySql 数据库 如果数据库已经启动,则不用启动。 2. 打开数据库操作视图 在主菜单中选择【Window】→【Open Perspective】→【MyEclipse Database Explorer】, 如果没有找到【MyEclipse Database Explorer】,选择【Other…】,在出现的列表中选择 【MyEclipse Database Explorer】。 3. 新建数据库连接 a) 在【DB Browser】窗口中的空白位置,点击右键,弹出如图 4.1 所示的菜单
目MyEcpse Dorby 图4.1 DB Browser窗口 b)选择【New】,弹出如图4.2所示界面。进行如下设置: ◆Driver template:驱动程序的类型,选择“MySQL Connetor/小”: ◆Driver name:该连接的名字,可以任意去,这里设置为“bookstore”: ◆Connection 根据实际情况调整,“entitytest”是数据库的名字。如果数据库还没有创 建,可以不写数据库的名字: ◆User name:连接数据库的用户名: ◆Password:对应用户名的口今 ◆D 驱动程序对应的压缩包,使用【AddJARs】选择驱动程序。 rMer name mch270.0.13 cm.myad.db:.Drtver Test Driver eotearoehsehsdnctbd ctt>ntsh Cancel 图42添加驱动程序 点击【Nex】进入下一个界面选择数据库,如果不选择可以直接点击【Finish】, 完成连接的建立,在【DB Browser】窗口中会生成“bookstore”节点: d)右键点击“bookstore”节点,选择【Open Connection.】,如果连接成功,展开 之后可以看到己有的数据库
图 4.1 DB Browser 窗口 b) 选择【New】,弹出如图 4.2 所示界面。进行如下设置: ◆ Driver template:驱动程序的类型,选择“MySQL Connetor/J”; ◆ Driver name:该连接的名字,可以任意去,这里设置为“bookstore”; ◆ Connection URL :数据库的位置,修改为 “jdbc:mysql://127.0.0.1:3306/entitytest”,其中 127.0.0.1 是主机地址,需要 根据实际情况调整,“entitytest”是数据库的名字。如果数据库还没有创 建,可以不写数据库的名字; ◆ User name:连接数据库的用户名; ◆ Password:对应用户名的口令; ◆ Driver JARs:驱动程序对应的压缩包,使用【Add JARs】选择驱动程序。 图 4.2 添加驱动程序 c) 点击【Next】进入下一个界面选择数据库,如果不选择可以直接点击【Finish】, 完成连接的建立,在【DB Browser】窗口中会生成“bookstore”节点; d) 右键点击“bookstore”节点,选择【Open Connection】,如果连接成功,展开 之后可以看到已有的数据库
4.(可选)创建数据库表 a)进入SQL编辑器:在“bookstore”节点下的“Connected to bookstore”上点击 在弹出的菜单中选择【New SQL Editor】,如图4.3所示,进入SqL编 辑器: 图4.3进入S9L编辑器 b)(可选)创建数据库,如果没有创建数据库,输入下面的$QL语句,然后点 击SQL编辑器窗口中的执行按钮>执行SQL语句完成数据库的创建: CREATE DATABASE ENTITYTEST c 可选)创建数据库表, 如 果没有创建数据库表,输入下面的SQL执行,执 行过程与创建数据库的过程基本相同。 CREATE TABLE BOOK BID CHARO3)PRIMARY KEY BNAME CHAR(30)NOT NULL PRICE FLOAT, AUTHOR VARCHAR(30) PRESS VARCHAR(30) 注意:在创建执行创建表语句的时候,要选择Catogory中的数据库“entitytest”。 步2:创建Web应用 l.创建工程:在主菜中选择【Nem】今【Web Project】,弹出如图4.4所示的界面。 在Project Name中输入工程的名字EntityTest,选择“Java EE5.0”作为J2EE 的版本。然后点击【Finish】创建Web应用
4. (可选)创建数据库表 a) 进入 SQL 编辑器:在“bookstore”节点下的“Connected to bookstore”上点击 右键,在弹出的菜单中选择【New SQL Editor】,如图 4.3 所示,进入 SQL 编 辑器; 图 4.3 进入 SQL 编辑器 b) (可选)创建数据库,如果没有创建数据库,输入下面的 SQL 语句,然后点 击 SQL 编辑器窗口中的执行按钮 执行 SQL 语句完成数据库的创建: CREATE DATABASE ENTITYTEST; c) (可选)创建数据库表,如果没有创建数据库表,输入下面的 SQL 执行,执 行过程与创建数据库的过程基本相同。 CREATE TABLE BOOK ( BID CHAR(13) PRIMARY KEY, BNAME CHAR(30) NOT NULL, PRICE FLOAT, AUTHOR VARCHAR(30), PRESS VARCHAR(30) ); 注意:在创建执行创建表语句的时候,要选择 Catogory 中的数据库“entitytest”。 步骤 2:创建 Web 应用 1. 创建工程:在主菜中选择【New】→【Web Project】,弹出如图 4.4 所示的界面。 在 Project Name 中输入工程的名字 EntityTest,选择“Java EE 5.0”作为 J2EE 的版本。然后点击【Finish】创建 Web 应用
T1.0 h☐cd 图4.4创建Web应用 2.创建包:在“src”上点击右键选择【New Package】,在弹出的界面中输入 cn.edu.entity”,点击右键选择【Finish】 3.添加JPA支持 a)在工程上点击右键,在弹出菜单中选择【MyEclipse】→【Add JPA Capabilities..】,进入JPA的设置界面,如图4,5所示。 Go Into 康+ht+w Cbolc 城Be 时Pa计 Aod Web Service Capa ☑Epgt Rh ing Sets, 图4.5添加JPA支持
图 4.4 创建 Web 应用 2. 创建包:在“src”上点击右键选择【New Package】,在弹出的界面中输入 “cn.edu.entity”,点击右键选择【Finish】。 3. 添加 JPA 支持 a) 在 工 程 上 点击 右 键 ,在 弹 出 菜单 中 选 择【 MyEclipse 】 → 【 Add JPA Capabilities…】,进入 JPA 的设置界面,如图 4.5 所示。 图 4.5 添加 JPA 支持
Ad Capb1 ities 回X可 AddPACapabilities d lciseA and User libraries to project re:@G2i园题l Kibernste OpenJPA ASL Eclipselick Select the libreries te add to traieet baildnath Sho:Vclipse Librarieser Libraries Toplink Essentialsirieslips-Library) 听y and edit1 ilrsries. 图4.6选择持久性提供者 b)选择JPA的实现,可以使用TopLink和Hibernate,采用默认值(Toplink)即 可。之后点击【ext)】,进入持久单元的配置界面。 回X可 Configure Persistence Unit Configure the datasource to be used by this project Persistence mit nme:EntityTestPU river bookstore Copy D driver jr(s)te project andad tobuildpth? Catalog/Schena: ☐,Update List iaetiedtitataeretaivg0gritettitn 〈k☐t☐iish☐cacl c)配置持久单元:首先需要设置持久单元的名字,默认值是“EntityTestPU”, 用默认值即可,在驱动程序中选择“bookstore”,在Catalog/Schema中选择 “entitytes"”,然后点击【Finish】。 注意:创建之后会在“src”下面的“META-INF”下生成一个配置文件persistence..Xml
图 4.6 选择持久性提供者 b) 选择 JPA 的实现,可以使用 TopLink 和 Hibernate,采用默认值(Toplink)即 可。之后点击【Next>】,进入持久单元的配置界面。 图 4.7 配置数据源 c) 配置持久单元:首先需要设置持久单元的名字,默认值是“EntityTestPU”,采 用默认值即可,在驱动程序中选择“bookstore”,在 Catalog/Schema 中选择 “entitytest”,然后点击【Finish】。 注意:创建之后会在“src”下面的“META-INF”下生成一个配置文件 persistence.xml
在包cn.edu.entity下面会生成多个文件:Book.java,IBookDAO.java,BookDAO.java和 步骤3:创建实体类 1.选择表 a)切换到数据库视图。 b)选择book表,点击右键选择“JPA Reverse Engineering.”,如图7.8所示。然 后进入到实体类设置界面4.10。 tor +-boo 。-百bookdb -年db.exansystem TABLE s画ewI1 吉Cr3 Forsi y -与mCTi由Nev Index aTG0t国dit Date 其Ua1eteu1ow3 -与jbc 的Re丘resh Generate lyEclipse Derby 居JPA Rever5 Engineering J3 Reverse Engineering 图48洗择表生成实体类 或者 a)在entityTest工程上点击右键选择【MyEclipse】→【Generate Entites& DA0s】。弹出如图4.9所示界面:
在包 cn.edu.entity 下面会生成多个文件:Book.java,IBookDAO.java,BookDAO.java 和 EntityManagerHelper.java。 步骤 3:创建实体类 1. 选择表 a) 切换到数据库视图。 b) 选择 book 表,点击右键选择“JPA Reverse Engineering…”,如图 7.8 所示。然 后进入到实体类设置界面 4.10。 图 4.8 选择表生成实体类 或者 a) 在 entityTest 工程上点击右键选择【MyEclipse】→【Generate Entites & DAOs…】。弹出如图 4.9 所示界面:
JPA Reverse Engineering 回x可 Create Entity Relationship Diagram Select tables to reverse engineer Locate tables Table:(s=any string ?any character) Available tables Selected tables 国bok Add All--> ←-Renove 】,然后点击【Next>】。 然后进入到实体类设置界面4.10。 JPA Reverse Engineering 回x JPA Reverse Engineering entity beans and DAOs from database Java sre folder:/Practice04A_EntityTestl/sre 门Browse. Java package: cn.edu.entity Browse. VEntity Bean Generation Create abstract class Update persistence.xml with generated entities VJava Data Access Generation Enable pagination for query results VGenerate precise findBy methods Generate Java interfaces ③☐Einish☐Cancel 图4.10实体类设置界面
图 4.9 选择要生成实体类的表 b) 选择左边列表中的“book”表,然后点击中间的【Add-->】,然后点击【Next>】。 然后进入到实体类设置界面 4.10。 图 4.10 实体类设置界面
2.设置实体类和DO:在如图所示界面中,如果通过数据库视图选择表,需要选择 “lava sre folder”,可以币时右边的【Browse】按钮洗拯。另外需要洗轻存放实 体类的包名。其他按照如图设置即可。然后点击【Next>】进入下 一个界面。如图 4.11所示: JA Reverse Engineerine 回x JPA Reverse Engineering Conficure type msppine details I Rev-eng settings file: Setup.. Custom rev-eng strategy: ☐Browse..· Generate version and tinestanp tags Enable many-to-man Enable one-to-one detection Customized Type Mappings: JDB...Jav...Length Seale Pre... Not. Add 〈Baek☐ext)☐Einish☐Cancel 图4.11类型映射详细 3.采用默认设置即可,选择【Next>】进入下一个界面。如图4.12所示:
2. 设置实体类和 DAO:在如图所示界面中,如果通过数据库视图选择表,需要选择 “Java src folder”,可以通过右边的【Browse…】按钮选择。另外需要选择存放实 体类的包名。其他按照如图设置即可。然后点击【Next>】进入下一个界面。如图 4.11 所示: 图 4.11 类型映射详细 3. 采用默认设置即可,选择【Next>】进入下一个界面。如图 4.12 所示:
⊙A Reverse Engineering 回x JPA Reverse Engineering Configure reverse engineering details Generate artifacts for the following tables D用book Select a table or col Include referenced tables (A->B) Include referencing tables (AUnlistedTable Gonerate support for UnlistedTable(fk)-ListedTable 图4.12生成实体类的详细 4.注意不要选择下面的两个复选框,然后点击【Finish】. 通过上面的过程就完成了实体类的创建以及相应D0的创建。可以自己查看一下生成的 文件。 步骤4:创建Application测试程序 L.创建客户端类Te a)利用类向导生成类:在包com.neu.entity上点击右键选择【New】→【Class】, 在弹出的对话框上输入类名“Test”,并洗中复选框“ublic static void main(String[]args)". b)添加属性及方法,参考代码如下: private IBookDAO dao; public Test() dao new BookDAO(); c)在main方法中填写代码,参考代码如下: Test test new Test ( 2.添加图书 a)在Test类中添加保存图书的方法,参考代码如下: public void addBook( Book book=new Book() book.setAuthor(李绪成") book.setBid("0001"方 book.setBname("Java Web程序设计基础教程") book.setPress("西安电子科技大学出版社"方
图 4.12 生成实体类的详细 4. 注意不要选择下面的两个复选框,然后点击【Finish】。 通过上面的过程就完成了实体类的创建以及相应 DAO 的创建。可以自己查看一下生成的 文件。 步骤 4:创建 Application 测试程序 1. 创建客户端类 Test a) 利用类向导生成类:在包 com.neu.entity 上点击右键选择【New】→【Class】, 在弹出的对话框上输入类名“Test”,并选中复选框“public static void main(String[] args)”。 b) 添加属性及方法,参考代码如下: private IBookDAO dao; public Test(){ dao = new BookDAO(); } c) 在 main 方法中填写代码,参考代码如下: Test test = new Test(); 2. 添加图书 a) 在 Test 类中添加保存图书的方法,参考代码如下: public void addBook(){ Book book = new Book(); book.setAuthor("李绪成"); book.setBid("0001"); book.setBname("Java Web 程序设计基础教程"); book.setPress("西安电子科技大学出版社");
book.setPrice(Float.valueOf(25)): EntityManagerHelper beginTransaction() dao.save(book Entity ManagerHelper.commit() b)在main方法中原有代码之后添加一行代码,添加后的代码如下: Test test new Testo taddBook 。运行测试:在编 区点击右键 选择【Run】→【As Application】,在console 中会提示成功的信息。然后切换到数据库视图,通过SQL语句查询book表中 的信息,看是否添加成功。 3.修改图书 a)在Tcst类中添加修改图书的方法,参考代码如下: public void updateBook( Book book new Book() book.setauthor"李绪成张阳")y book.setBid("0001"): book.setBname("JavaWeb程序设计基础教程") book.setPress“西安电子科技大学出版社") book.setPrice(Float.valueOf(25)): EntityManagerHelper.beginTransaction(). dao.update(book): EntityManagerHelper.commit() b)修改main方法中原有代码,注释掉代码 test.addBook(). 然后添加: test undateBooko ©)运行测试:运行之后查看数据库,看作者是否修改成功。 4. 删除图书 a)在Test类中添加别除图书的方法,参考代码如下(注意在删除的时候只需要 主键即可): public void deleteBook( Book book=new Book() book.seBid() EntityManagerHelper.beginTransaction(). dao.delete(book月 EntityManagerHelper.commit(): b)修改main方法中原有代码,注释掉代码: test.updateBook(): 然后添加: test.deleteBook(). ©)运行测试:运行之后查看数据库,看是否刷除成功
book.setPrice(Float.valueOf(25)); EntityManagerHelper.beginTransaction(); dao.save(book); EntityManagerHelper.commit(); } b) 在 main 方法中原有代码之后添加一行代码,添加后的代码如下: Test test = new Test(); test.addBook(); c) 运行测试:在编辑区点击右键,选择【Run】→【As Application】,在 console 中会提示成功的信息。然后切换到数据库视图,通过 SQL 语句查询 book 表中 的信息,看是否添加成功。 3. 修改图书 a) 在 Test 类中添加修改图书的方法,参考代码如下: public void updateBook(){ Book book = new Book(); book.setAuthor("李绪成 张阳"); book.setBid("0001"); book.setBname("Java Web 程序设计基础教程"); book.setPress("西安电子科技大学出版社"); book.setPrice(Float.valueOf(25)); EntityManagerHelper.beginTransaction(); dao.update(book); EntityManagerHelper.commit(); } b) 修改 main 方法中原有代码,注释掉代码: test.addBook(); 然后添加: test.updateBook(); c) 运行测试:运行之后查看数据库,看作者是否修改成功。 4. 删除图书 a) 在 Test 类中添加删除图书的方法,参考代码如下(注意在删除的时候只需要 主键即可): public void deleteBook (){ Book book = new Book(); book.setBid("0001"); EntityManagerHelper.beginTransaction(); dao.delete(book); EntityManagerHelper.commit(); } b) 修改 main 方法中原有代码,注释掉代码: test. updateBook(); 然后添加: test.deleteBook(); c) 运行测试:运行之后查看数据库,看是否删除成功