- 浏览: 166067 次
- 性别:
- 来自: 唐山
文章分类
最新评论
-
wmx2003:
你好,第一次使用Netbeans RCP,有问题想请教下。刚用 ...
开篇:netbeans RCP介绍 -
fxbird:
http://netbeans.org/projects/um ...
netbeans UML插件 -
socket2008:
去试一下 phpDesigner 代码片段功能吧,[[curs ...
自制netbeans插件:代码收集插件——code collect征集帮助 -
archwuke:
我文章比较早了,我不知道楼主还能不能看到我的回贴我是个java ...
netbeans有望2010年实现完整的可视化设计器 -
ilikegirl123:
我也喜欢Netbeans并且不顾上面的用eclipse的压力. ...
netbeans(4):netbeans6.9新特征
系列文章之2:netbeans对jpa的支持
内容要点:1 实体向导的逆向正向支持 2 JPA控制器类的生成 以及定制spring下的服务类的模板
概括起来2点:
1 反向支持
2 正向支持
详细:
1 反向支持,即逆向工程
当设计好数据库以后,就可以选择面板里的从数据库里生成实体类了。
netbeans对mysql的支持非常好,生成的代码基本一个字不用改就能用了。sql server的只需改一个地方,就是添加主键的生成方式。就是复制一句 @GeneratedValue(strategy = GenerationType.AUTO)
不知是否是故意的,不过这样确实促进使用mysql。
缺点:可控制性不是很好,主要是字段名字可能不是自己期望的。当然了,自己随便改,因为生成的实体类里有字段的映射属性。也就是说,如果想复合自己的意愿,还是需要改动代码的。除非建立数据库时,字段名字就考虑使用规范好的。
2 正向支持
通过面板,创建实体类。 推荐这种做法,尤其学习的话,使用这个,能锻炼OO的编程能力。然后让框架自动创建数据库表。
2.1 通过向导 -----创建实体类
输入名称如 SaleOrder ,将生成如下代码,剩下就是自己添加多余的属性了。
@Entity public class SaleOrder implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof SaleOrder)) { return false; } SaleOrder other = (SaleOrder) object; if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { return false; } return true; } @Override public String toString() { return "com.test.SaleOrder[id=" + id + "]"; } }
比如添加订单总价:
private BigDecimal totalPrice;
注意:这里无需加注释,默认的就是@Column。可以充分利用默许方式。
完整的代码可以参考如下: 其他属性可以自己添加
@Entity public class SaleOrder implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private BigDecimal totalPrice; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public BigDecimal getTotalPrice() { return totalPrice; } public void setTotalPrice(BigDecimal totalPrice) { this.totalPrice = totalPrice; } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof SaleOrder)) { return false; } SaleOrder other = (SaleOrder) object; if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { return false; } return true; } @Override public String toString() { return "com.test.SaleOrder[id=" + id + "]"; } }
2.2 创建订单明细它与上面的订单是多对一关系
面板--创建实体类代码如下:
@Entity public class OrderItem implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof OrderItem)) { return false; } OrderItem other = (OrderItem) object; if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { return false; } return true; } @Override public String toString() { return "com.test.OrderItem[id=" + id + "]"; } }
建立他们间的关联:
在上面的类文件里输入
private SaleOrder saleOrder;
看截图:
左边有个黄色叹号,点击,提示生成实体映射关系:看截图:
选择创建双向ManyToOne关系,弹出设置属性,即SaleOrder 里用来与many对应的字段的名称,输入名称即会生成代码。
生成后的代码这里省略了。
最后总结2点:
1 一般的字段不需要加上注释,比如@Column除非是string的字段限制长度,默认是255,如果对性能要求不苛刻,那就万事都可省呀。
2 netbeans自动创建实体间映射。
2.3 生成实体控制器
面板————生成实体控制器类
添加要生成的实体:这里演示,我只添加SaleOrder,生成代码如下:
public class SaleOrderJpaController { public SaleOrderJpaController() { emf = Persistence.createEntityManagerFactory("testtempletePU"); } private EntityManagerFactory emf = null; public EntityManager getEntityManager() { return emf.createEntityManager(); } public void create(SaleOrder saleOrder) { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); em.persist(saleOrder); em.getTransaction().commit(); } finally { if (em != null) { em.close(); } } } public void edit(SaleOrder saleOrder) throws NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); saleOrder = em.merge(saleOrder); em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = saleOrder.getId(); if (findSaleOrder(id) == null) { throw new NonexistentEntityException("The saleOrder with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } } } public void destroy(Integer id) throws NonexistentEntityException { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); SaleOrder saleOrder; try { saleOrder = em.getReference(SaleOrder.class, id); saleOrder.getId(); } catch (EntityNotFoundException enfe) { throw new NonexistentEntityException("The saleOrder with id " + id + " no longer exists.", enfe); } em.remove(saleOrder); em.getTransaction().commit(); } finally { if (em != null) { em.close(); } } } public List<SaleOrder> findSaleOrderEntities() { return findSaleOrderEntities(true, -1, -1); } public List<SaleOrder> findSaleOrderEntities(int maxResults, int firstResult) { return findSaleOrderEntities(false, maxResults, firstResult); } private List<SaleOrder> findSaleOrderEntities(boolean all, int maxResults, int firstResult) { EntityManager em = getEntityManager(); try { Query q = em.createQuery("select object(o) from SaleOrder as o"); if (!all) { q.setMaxResults(maxResults); q.setFirstResult(firstResult); } return q.getResultList(); } finally { em.close(); } } public SaleOrder findSaleOrder(Integer id) { EntityManager em = getEntityManager(); try { return em.find(SaleOrder.class, id); } finally { em.close(); } } public int getSaleOrderCount() { EntityManager em = getEntityManager(); try { Query q = em.createQuery("select count(o) from SaleOrder as o"); return ((Long) q.getSingleResult()).intValue(); } finally { em.close(); } } }
可见,这代码适合单独使用JPA的环境。上面的方法名称不合意的话,可以动手修改模板。
工具---模板 找到持久性
选中 其下面的 基于实体类的JPA控制器, 这个它已经有的是不让你改的,选中它,在右边点复制,然后下面就会出来一个。重命名为 我的JPA控制器类:
然后,在编辑器中打开。发现是空白,持久性模块里的模板的扩展性做的不好,spring模块就可以自己编辑。
这里就当介绍一个方法吧,如何定制自己的模板,以便快速开发。
至于本文的这个问题,我想通过添加新插件来解决,当我做完善了,我再发文章。不过生成spring下的JPA服务类其实放在这里不如放在spring模块里,可能因此,netbeans开发组没给太多java持久性扩展模板支持。
下面我们打开spring的模板:
选中抽象控制器,然后复制,下面就出个新的,然后改名为JPA服务类,然后在编辑器中编辑。
小提示:看能不能扩展,看下原来那个能不能在编辑器中打开就知道了。,上面的Java持久性里的服务类是不能在编辑器中打开的。
我们照着改下:
package ${package}; </#if> import org.springframework.web.servlet.mvc.SimpleFormController; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * * @author ${user} */ @Service @Transactional public class ${name}ServiceBean extends DaoSupport<${name}> implements ${name}Service{ }
看到上面的DaoSupport以及实现的接口,我们的${name}就是向导里输入的名字,这里我们直接复制实体类名就可以了。DaoSupport是一个基础类,封装了每个实体类都具备的 添加 更新 删除 查询出List的功能。可以把这个类自己取个名字,打成jar包,固定下来,至于如何命名,那是自己的事情,但是千万别和人家的类库冲突了。
比如 打包成到 self.spring.service.base。 self代表自己的jar包。
在上述模板里加上:
self.spring.service.base.DaoSupport,
另外上面引入了注释
那么通过模板生成实体服务类时,就省去了这部分劳动了。是不是就等于提高效率了。
比如键入SaleOrder那么将生成如下代码:
package com.test.service; import org.springframework.web.servlet.mvc.SimpleFormController; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class SaleOrderServiceBean extends DaoSupport<SaleOrder> implements SaleOrderService{ }
好了,先到这里,不过有个问题,服务类不能和实体类放一起,否则输入名字时和实体类名相同,不能创建,因为服务类一般放在service这样命名的包中,因此,应该不用考虑这个问题。
上面的DaoSupport我还没打包,没添加到模板中。至于想生成方法,自己定制就可以了,总之,自己看着弄,适合自己就是最好的。
now!开始定制自己的IDE吧。由于我的水平有限,高级定制需要很长时间去学习与研究,不是短时间能具备的。但是通过定制已有模板,是最简单的提供效率的方法,它几乎不需要任何编程支持,仅仅改下模板就可以了。
如果有相关的文章,可以提供给我,万分感谢!共同进步。谢谢观看。。
发表评论
-
netbeans调试功能的优势以及使用技巧
2010-07-14 12:37 5561首先,为了避免无聊的猜测,我先亮明我的观点:我极力的喜欢用ne ... -
netbeans平台开发正在融合javafx
2010-03-24 13:35 1133这篇文章看的是javafx融入平台中。 javafx被 ... -
netbeans text-to-speech(文本至语音)工具被一所大学贡献,顺便推荐下netbeans平台
2010-03-24 12:47 1270http://netbeans.dzone.com/new-n ... -
转netbeans开发组的邀请外部人员加入测试甚至是贡献代码
2010-03-10 07:55 1057netbeans开发组,在传统节日 2010年3月8日,发布了 ... -
netbeans6.9已经可以直接针对不同操作系统生成其平台下的安装包
2010-03-07 19:32 1073当前6.9版本的开发进展,添加了 可以将基于netbeans ... -
netbeans6.8开始不用安装js插件,是内置的
2010-02-27 20:21 1792网上有部分文章好像存在误解,说6.8没有默认安装js库的支持。 ... -
netbeans6.8开始新增的API:common server API(注册新服务器)
2010-02-26 20:42 1278该API,目前仍旧在开发中,目的就是提供一个简单的API,可以 ... -
netbeans 6.9里程碑1可以下载并测试使用了
2010-02-17 13:59 2067由于我最近一直研究netbeans RCP,每天都去官网看文章 ... -
netbeans6.8惊现收费插件——Google的GO语言支持插件
2010-02-15 13:08 2703近日,从netbeans的官网插件中心了解到 netbeans ... -
netbeans有望2010年实现完整的可视化设计器
2010-02-13 10:33 3310关于netbeans6.9的特征官 ... -
netbeans6.9更加详细的计划已经发布
2010-02-04 20:35 2478netbeans官网发布了6.9详 ... -
netbeans6.8对maven的支持(推荐改用maven)
2010-02-04 19:16 3089看看netbeans的关于maven的向导,就可以知道netb ... -
oracle已经发布FAQ:阐述了如何处理netbeans
2010-01-28 19:34 1470oracle已经公布了如何处理netbeans,官方提供了一个 ... -
netbeans万一装了(如velocity plugin2.2.1)第三方插件,不能启动的解决办法
2010-01-19 10:17 38861月9日,netbeans的velocity插件更新到了2.2 ... -
netbeans(7):给自己开发些简单文件创建向导,实现自动化生成
2010-01-16 20:15 2098netbeans中自己做个简单 ... -
netbeans快捷键大总结
2010-01-13 19:28 4488没什么好介绍的,是netbeans的快捷键,比较全面。看到好多 ... -
netbeans(5):使用swing验证框架
2010-01-10 15:32 2763最近不知道吃错了什么药,发了很多netbeans的文章,net ... -
netbeans(4):netbeans6.9新特征
2010-01-10 14:11 2672netbeans6.9将会增加更多 ... -
netbeans(3):从java.net或kenai还有netbeans.org等上加入项目
2010-01-03 14:36 909netbeans(3):从java.net或kenai ... -
netbeans(1):开篇初步使用技巧
2010-01-03 11:06 1408首先,谈下自己对Java的认识吧! 网上 ...
相关推荐
在NetBeans 6中,支持JPA的集成使得开发者能够直接在IDE内进行数据库操作,大大提高了开发效率。 **J2EE(Java Platform, Enterprise Edition)**是Java技术的一个版本,专为构建企业级应用程序而设计。它包含一组...
你可以从官方网站下载并安装最新版本的Netbeans,确保它包含了JSF和JPA的支持。 在创建新项目时,选择"Java Web"类别下的"JSF 2.0"应用模板。接着,设置项目名称和位置,Netbeans将自动为你创建所需的文件结构。...
使用GlassFish的JPA,JSF和Arquillian演示的NetBeans版本 演示JPA和Arquillian用法的示例代码 有关创建该项目的故事, 该演示代码的原始版本是在2014年为JSF中的一门课程创建的。 学生使用JSF和JDBC创建了Web电子...
在 Netbeans 中创建一个名为 class_lastname_firstname_project2013 的 web 项目,例如:2Ti1_Mertens_Leen_project2013 湾使用 JPA 实现该类图的映射。 截止日期(通过托莱多的任务交付):2013 年 4 月 30 日,...
- **事务管理**:JPA支持事务管理,可以通过`EntityManager`或外部事务管理器控制事务的开始和结束。 #### 十一、嵌入式对象 - **定义**:嵌入式对象是指作为另一个实体的一部分存储的对象,通常不具有独立的主键...
1. **Java EE 支持**:NetBeans 6.1增强了对Java EE的支持,包括EJB 3.0、JPA 1.0、JSF 1.2等技术栈的支持,使得开发者可以更高效地开发企业级应用。 2. **Web 2.0开发工具**:该版本加强了对Web 2.0应用的支持,...
作者在开始时感到很难,但最终发现NetBeans非常易于使用,且支持中文开发。这个描述部分表明了作者的亲身体验和使用NetBeans的初步印象。 标签解读 标签“netbeans”表明了本文的主题是NetBeans开发环境。 部分...
**基于JPA的CRUD操作详解** ...这个“基于JPA的CRUD例子”就是对这一特性的简单演示,展示了如何利用JPA进行基本的数据管理。通过深入理解和实践,开发者可以更好地利用JPA来构建高效、可维护的Java应用程序。
而NetBeans作为一款功能丰富的集成开发环境(IDE),对Java开发提供了广泛的支持,包括对jBoss Seam的完美集成。下面我们将详细探讨如何在NetBeans中进行jBoss Seam的开发。 1. **安装准备**: 在开始开发前,确保...
9. **NETBEANS与J2EE 6的集成**:NETBEANS 7提供了对J2EE 6的完整支持,包括项目模板、自动部署、调试工具等,使得开发者能够在IDE内完成整个J2EE应用的生命周期管理。 通过阅读《NETBEANS7下J2EE6开发技术》这份...
- NetBeans 8.0.2 提供了对Java EE 7的全面支持,包括Servlet、JSP、JSF、EJB、JMS、JPA等框架和技术。 - 用户可以创建、编辑、调试和部署基于Java EE的应用程序,无需离开IDE。 - 内置的服务器支持包括GlassFish...
NetBeans IDE 7.3作为开发和部署工具,它提供了对Java EE 6的全面支持,包括JSF、EJB和JPA的集成开发环境。IDE的可视化工具使得创建和配置这些组件变得简单易行。此外,由于我们将使用Glassfish内置的数据库服务器...
通过使用JPA,开发者可以减少对底层SQL查询的关注,从而更加专注于业务逻辑的实现。 #### 二、核心概念 1. **实体(Entity)**:代表数据库中的表,通常用Java类表示。 2. **持久上下文(Persistence Context)**:持久...
除了上述基本操作,NetBeans还支持通过JPA(Java Persistence API)进行对象关系映射,这使得在Java应用程序中操作数据库变得更加便捷。你可以创建实体类来代表数据库表,然后利用NetBeans的代码生成工具自动生成...
- **Java EE集成**:对于Java EE(Enterprise Edition)项目,NetBeans支持包括JPA(Java Persistence API)、JMS(Java Message Service)和JAX-RS(Java API for RESTful Web Services)等多种标准。 - **...
3. **Java EE应用**:对于企业级开发,NetBeans支持Java EE平台,如EJB、JPA和Spring框架。实例可能包括构建MVC架构的项目,使用EJB进行业务逻辑处理,以及JPA进行持久化操作。 4. **PHP开发**:NetBeans对PHP...
然而,Netbeans 7.x 的默认界面并不直接支持生成JPA Entity对应的Metamodel类。本文将介绍如何通过Netbeans手动设置和配置,以自动生成这些Metamodel类。 ### 为何需要JPA Metamodel JPA Metamodel的主要作用在于...
开发者可以通过解压并导入到IDE(如Eclipse或NetBeans)中,进行进一步的学习和调试。 这个项目是一个很好的学习资源,因为它涵盖了JavaEE开发中的关键部分,从用户交互到业务处理再到数据存储。通过分析和理解这个...
2. **集成开发环境(IDE)**:如Eclipse、IntelliJ IDEA或NetBeans,它们都提供了对JPA的良好支持,可以通过插件轻松配置和使用JPA。 3. **Java Persistence Provider (JPA提供商)**:例如Hibernate、EclipseLink等,...