用MyEclipse JPA创建项目
http://www.myeclipsecn.com/learningcenter/persistence-development/myeclipse-jpa/
用MyEclipse JPA创建项目
本教程介绍了MyEclipse中的一些基于JPA的功能。 阅读本教程时,了解JPA和实体映射如何与注释一起工作的基本概念将会很有帮助。 在本教程中,您将学习如何:
- 为JPA设置一个项目
- 连接到数据库
- 反向设计一个数据库表来生成实体
- 实现创建、检索、编辑和删除功能
持续时间:30分钟
没有MyEclipse? 现在下载
一、设置一个项目
JPA Facet最常添加到Java或Web项目中。在本教程中,您将使用一个简单的Java项目来了解JPA如何工作。
注意:您可以下载本教程中开发的项目,然后导入到你的工作区中。
1. 单击下拉菜单,然后选择Java Project。
2. 在Project Name字段中输入SampleJPAProject,接受默认选项,然后单击Finish。

3. 单击图标,然后选择MyEclipse Database Explorer来打开透视图。
4. 在DB Browser中选择MyEclipse Derby connection,然后单击下面的图标。

注意:因为您需要选择要使用的连接,所以在设置数据库连接之前无法添加JPA Facet。
5. 切换回MyEclipse Java Enterprise透视图,右键单击项目,然后选择MyEclipse> Project Facets>Install JPA Facet。
6. 在Target Runtime下拉列表中选择MyEclipse Generic Java Runtime,然后单击Next。

7. 从平台下拉列表中选择一个平台,如果JPA实现类型默认为用户库,请选择与所选平台对应的库。 如果未列出库,请单击下载图标来下载相应的库。

8. 在Connection字段中选择MyEclipse Derby,检查Add driver library to build path和Override default schema from connection复选框,然后从Schema下拉列表中选择CLASSICCARS,单击Finish。

现在该项目已添加了完整配置的JPA Facet,其中包括JPA配置信息,DB连接信息以及添加到项目构建路径中的所有必需的JDBC和JPA库。 如果这是一个Web项目,那么当项目部署到应用程序服务器并在其上运行时,所有构建路径添加都将准备好部署。

二、创建一个Java包
在下一节中,您将对数据库表中的数据进行反向工程,并为您的项目生成实体。 在逆向工程之前,您需要创建一个放置这些实体的Java包。
1. 展开该项目,右键单击src文件夹,然后选择New>Package。

2. 在Name字段中输入com.myeclipseide.jpa,然后单击Finish。

三、反向设计数据库表
现在该项目已经建立,您已准备好将PRODUCTLINE表逆向工程并将其转换为项目并开始使用生成的实体。
1. 右键单击该项目,然后选择MyEclipse>Generate Entities & DAOs。
注意:您可以选择使用MyEclipse反向工程工具或DALI实体生成器。 进行选择,单击OK,然后完成向导。本教程使用MyEclipse反向工程工具。

2. 选择PRODUCTLINE表,然后单击Add,点击Next。

3. 在Java Package字段中,单击Browse,然后选择您之前创建的com.myeclipseide.jpa包。 选择以下复选框:
- Entity Bean Generation:告诉MyEclipse生成注释为用作JPA实体的纯Java类。
- Create abstract class:如果你想自定义生成的类而不担心每次都覆盖修改,MyEclipse可以生成基本的抽象类以及可以自定义和使用的具体子类。每次逆向工程时,MyEclipse只会覆盖抽象基类,并在具体的子类中维护更改。
- Update persistence.xml:类似于Hibernate;你可以列出在JPA配置文件中使用的所有JPA实体。
- Java Data Access Generation:告诉MyEclipse为你生成的DAO实用程序类,可以立即保存/查找/更新/删除数据库中的实体。 这段代码包装了JPA实体管理器,使得使用实体和数据库非常容易。
- Generate Precise findBy Methods:告诉MyEclipse生成findByXXX方法,其中XXX与被颠倒实体上的每个属性相关。 这使得可以使用任何属性轻松访问数据库中的实体,以此作为查找它们的手段。
- Generate Java Interfaces:选择此选项将创建一个具有相应DAO实现类的接口类。 取消选择此选项将仅生成DAO实现类,而不用单独定义接口的类。

4.单击Finish, 查看通过扩展com.myeclipseide.jpa包生成的MyEclipse资源。

生成的实体描述如下:
- EntityManagerHelper:当使用直接的JPA时,开发人员需要使用EntityManager类。 通过提供静态方法来访问管理器以及可以随时调用的最常见操作,这个生成的帮助器类使得使用EntityManager更容易一些。
- IProductline:定义相应DAO实现类接口的类。
- Productline:这个类是表示数据库表PRODUCTLINE的JPA实体(POJO)。 此POJO包含PRODUCTLINE表的字段,并表示DB中的一行。
- ProductlineDAO:这个类包装了EntityManagerHelper,为我们提供了易于使用的方法,专门用于从数据库中添加/查找/更新和删除产品。
注意:逆向工程完成后,可以打开Persistence透视图来使用某些持久性和数据源工具来分析数据库和项目中的数据。
四、编写应用程序
由于MyEclipse生成了大量的代码,因此您可以快速专注于编写“业务逻辑”,或者更具体地说,“实际执行的代码”。在本节中,您将编写一个带有main方法的Java类,该方法将Productline插入到数据库中,检索并更新它,然后删除。使用这段代码,您应该能够看到在自己的应用程序中使用JPA实体是多么容易,而无需编写JDBC代码或任何其他持久性代码。
4.1 创建一个类
1. 右键单击com.myeclipseide.jpa包,然后选择New>Class。
2. 在Name字段中输入RunJPA,选择Public static void main复选框,然后单击Finish。

在生成新的类和main方法后,您需要编写代码来成功处理Productline的实例。
注意:下面的代码看起来很长很复杂,但这是因为我们试图在一个代码块中显示四个不同的示例。 如果您查看每个操作(保存,加载,更新,删除),它们都不会包含多行代码。
3. 将以下代码添加到main方法中,然后按Ctrl + S进行保存。
/* 1. Create a reference to our ID */
String productLineID = "Men's Shoes"; /* 2. Create a new Productline instance */
Productline newProductline = new Productline(
productLineID,
"Shoes for men.", "<strong>Men's Shoes</strong>", null); /* 3. Create a DAO instance to use */
ProductlineDAO dao = new ProductlineDAO(); /* 4. Store our new product line in the DB */
EntityManagerHelper.beginTransaction();
dao.save(newProductline);
EntityManagerHelper.commit(); /* 5. Now retrieve the new product line, using the ID we created */
Productline loadedProductline = dao.findById(productLineID); /* 6. Print out the product line information */
System.out.println("*NEW* Product Line [productLine="
+ loadedProductline.getProductline() + ", textDescription="
+ loadedProductline.getTextdescription() + ", image="
+ loadedProductline.getImage() + "]"); /* * 7. Now let's change same value on the product line, and save the
* change
*/
loadedProductline.setTextdescription("Product line for men's shoes.");
EntityManagerHelper.beginTransaction();
dao.save(loadedProductline);
EntityManagerHelper.commit(); /*
* 8. Now let's load the product line from the DB again, and make sure
* it text description changed
*/
Productline secondLoadedProductline = dao.findById(productLineID); System.out.println("*REVISED* Product Line ["
+ "productLine=" + secondLoadedProductline.getProductline()
+ ", textDescription=" + secondLoadedProductline.getTextdescription()
+ ", image=" + secondLoadedProductline.getImage() + "]"); /* 9. Now let's delete the product line from the DB */
EntityManagerHelper.beginTransaction();
dao.delete(secondLoadedProductline);
EntityManagerHelper.commit(); /* * 10. To confirm the deletion, try and load it again and make sure it
* fails
*/
Productline deletedProductline = dao.findById(productLineID); /*
* We use a simple inlined IF clause to test for null and print
* SUCCESSFUL/FAILED
*/
System.out.println("Productline deletion: "
+ (deletedProductline == null ? "SUCCESSFUL" : "FAILED"));
注意: 将事务数据库的代码片段换成事务是一个好主意,所以如果操作失败(例如DB崩溃),那么试图在事务中发生的所有更改都会回滚到它们的原始值,而不是只有一半 工作完成。
上面的代码看起来令人望而生畏,但它背靠背做了很多简单的事情。 例如,如果您只想将新项目存储在数据库中,则只需要程序中步骤1-3的代码,这些代码将三行代码相减(减去注释)即可。 以下是每个编号部分的细目:
- PRODUCTLINE表使用产品线的名称作为主键。 为了使本教程更容易遵循,我们在字符串中定义产品线名称,并在整个代码中重复使用(创建并存储产品线,然后再检索两次)。 您可以多次轻松输入“Men’s Shoes”,我们认为这使得教程更易于遵循。
- 这将创建一个由MyEclipse生成的Productline POJO的新实例,并将插入到数据库中。 为了本教程的目的,这些值并不重要,所以我们只是使用示例信息。
- 这将创建一个要使用的DAO实例。 数据库访问需要DAO,这也是由MyEclipse生成的。
- 这告诉DAO将新的Productline存储在数据库中。 因为你要写一些东西给数据库,所以把保存的调用包装在一个事务中。
- 为了确保Productline正确存储,使用步骤1中定义的ID,我们要求DAO获取Productline,并将结果分配给一个全新的对象,以确保加载的内容来自数据库。 (我们可以将这个值赋给newProductline,但是为了本教程的目的,我们希望非常明显地知道对象来自哪里以及意外地在代码中加载的实例不存在之前)。
- 这将打印出加载实体的值,以确保它是刚存储在数据库中的值。
- 这会更改刚刚加载的POJO上的值,以显示更新记录的工作方式。 然后使用DAO将更改提交回数据库。 再次,这个操作被封装在一个事务中,以确保安全地更改数据库。
- 就像在第5步中一样,使用步骤1中定义的ID从数据库重新加载记录,以确保更新操作有效。 POJO值将被打印出来,以确保新的描述被保存到数据库中。
- 这显示了如何从DB中删除记录。 因为这需要对数据库进行更改,所以此代码被封装在事务中。
- 与步骤8和步骤5类似,为了证明删除起作用,我们尝试使用我们提供的ID从数据库加载实体。 这个操作应该会失败,因为我们已经删除了Productline。 从DAO获得结果后,将使用嵌入式IF子句打印语句以确保结果为空。
4.2 运行应用程序
1. 右键单击该项目,然后选择Run As>Java Application。
2. 选择RunJPA应用程序,然后单击OK。

输出显示在Console视图中。

红色文本是MyEclipse中生成的DAO和EntityHelper类的默认日志消息,黑色文本是用于跟踪进度的代码中的System.out.println文本。如您所见,从步骤6开始的第一个打印以及从步骤8开始的更新打印都按预期工作。 此外,删除也是成功的,因为删除后查询中没有Productline返回。
五、资源
用MyEclipse JPA创建项目的更多相关文章
- 用MyEclipse JPA创建项目(四)
MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于PA的功能. 阅读本教程时,了解J ...
- 用MyEclipse JPA创建项目(三)
MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于PA的功能. 阅读本教程时,了解J ...
- 用MyEclipse JPA创建项目(二)
MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于PA的功能. 阅读本教程时,了解J ...
- 用MyEclipse JPA创建项目(一)
MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于JPA的功能. 阅读本教程时,了解 ...
- 使用MyEclipse 2014创建项目
1. 打开MyEclipse 2014,如果是第一次运行,会提示设置workspace路径,如图: WorkSpace路径是指日后你自己利用MyEclipse创建项目时,项目文件的存放路径.通常不要放 ...
- MyEclipse下创建的项目导入到Eclipse中详细的图文配置方法
一.情景再现. 有些人比较喜欢用Myeclipse开发,有些人却比较喜欢用eclipse开发.但是其中有一个问题,Myeclipse里面的项目导入的时候出现了一个小小的问题. 如下: 二.说明问题 导 ...
- 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
http://jijiaa12345.iteye.com/blog/1739754 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程 本文是一篇在Myeclipse下构建Jav ...
- MyEclipse下创建的项目 导入eclipse
1.导入在MyEclipse下创建的项目 2.把项目变成Web项目,在项目上右键-->Properties-->选择Project Facets-->点击Convert to fac ...
- Eclipse和MyEclipse使用技巧--MyEclipse下创建的项目导入到Eclipse中详细的图文配置方法
一.情景再现. 有些人比较喜欢用Myeclipse开发,有些人却比较喜欢用eclipse开发.但是其中有一个问题,Myeclipse里面的项目导入的时候出现了一个小小的问题. 如下: 二.说明问题 导 ...
随机推荐
- c++ 中的 set
set (集合) 中的元素是排序好的,而且是不重复的. 例题:hdu 4989 题目大意:求一组数列中任意两个不重复元素和,再求不重复和的和. #include <bits/stdc++.h&g ...
- ENUMSTXT.H中的指针数组
/************************************************************************ ...
- python基础教程笔记 第1单元 && 第2单元
1.http://docs.python.org/dev/3.0/whatsnew/3.0.htmlpython-announce-listpython-help2.交互式编译器3.非整数除法 .1. ...
- bzoj1073
题意: k短路 题解: A* 当然是抄了zzd的代码 然而需要特判 为什么把bool改成int爆空间!!! 代码: #include<bits/stdc++.h> using namesp ...
- PHP网站自动化配置的实现
一直都在用yii2做项目,有在用自动化配置,但是没有自己去配置过.中午没事去看了下yii的初始化代码,发现都是php而已! yii2初始化项目代码 所以,我们做项目肯定是可以用php做的,于是我新建了 ...
- specialized English for automation-Lesson 1 Analog Amplifiers
要求每天阅读一篇技术文档,不需要记下来,只是能看懂就好..后发现,这就是专业英语的课程资料. ----------------------------------------------------- ...
- HDU 2292
http://acm.hdu.edu.cn/showproblem.php?pid=2292 题意:1-n个节点,题目给出了完全二叉树的定义(这个定义似乎有歧义,此题以题目描述为准),且要保持最小堆性 ...
- C语言——第四次作业(2)
作业要求一 项目wordcount 设计思路:输入需统计的文件名,打开此文件,输入功能对应的字符,分别实现对应的功能,关闭文件. 主要代码 #include<stdio.h> #inclu ...
- flask第二十九篇——一个例子+【更新内容通知】
请关注公众号:自动化测试实战 大家先自己写一下,船长写这个花了半个小时,因为我和大家一样,也是新手: 写一个页面如下,点击书名以后跳转到书的详情页 书的信息如下: books = [ { 'id': ...
- 浅谈闭包(Closure)
一.闭包 好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识.今天查看了一下维基百科,顺便写下来. 二.闭包的定义 在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范 ...