前言:这是一篇帮助小伙伴在本次项目中快速进入到java EE开发的一些说明,为了让同组小伙伴们开发的时候,有个清晰点的思路。昨天给大家演示分享了基本概况,但没有留下文字总结说明,预防后期有人再次问我,特写此篇博客!

本篇博客的结构主要分为两个部分:第一个是关键执行点,也就是在项目中,每个人都要去做去注意的;第二个是其他注意点,这个部分是一些大家提到的问题

一、关键执行点

重中之重:严禁引入任何Spring体系的技术(关于昨天提到的 定时任务,消息,java EE有相应的技术体系)

1.1,事务

与Spring不同,在Spring中咱们需要配置:

    <!-- 对数据源进行事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<aop:aspectj-autoproxy/>

并在实现类上使用@Transactional注解(注意这里的proxy-target-class=“true”,标志使用CGlib代理)

小伙伴们:着重关注第二点内容,涉及到咱们的具体使用!    

在咱们的项目中,第一点:了解事务的基础内容:https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html 
  第二点:了解JTA(java transaction api)的基本用法:http://docs.oracle.com/javaee/7/api/javax/transaction/package-summary.html  (要求,在本项目中,准确指定Exception类型(Exception
summary)及其对应的事务回滚操作(Annotation types summary))  第三点:维基百科中对于JTA的说明:https://en.wikipedia.org/wiki/Java_Transaction_API#.40Transactional_annotation

1.2,JPQL使用

备注:底层的实现框架,目前选择的是EclipseLink。

在entitymanager中,提供了很多的接口,有一些是直接传入实体类型就可用。而有一些,则是提供接口进行扩展。结合到咱们的业务,我们会需要创建自己的SQL语句,去查询相关的数据,那么在此,我说明一下相关用法:

第一,执行咱们自建的SQL有两种方法:a,使用JPQL进行查询;b,使用原生SQL

先说简单的原生SQL:可供选择的接口有:

    public Query createNativeQuery(String sqlString);

    public Query createNativeQuery(String sqlString, Class resultClass);

    public Query createNativeQuery(String sqlString, String resultSetMapping);

    public StoredProcedureQuery createNamedStoredProcedureQuery(String name);

    public StoredProcedureQuery createStoredProcedureQuery(String procedureName);

    public StoredProcedureQuery createStoredProcedureQuery(String procedureName, Class[] resultClasses);

    public StoredProcedureQuery createStoredProcedureQuery(String procedureName, String[] resultSetMappings);

而使用JPQ语句,可供选择的接口有:

    public Query createQuery(String qlString);

    public <T extends Object> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery);

    public Query createQuery(CriteriaUpdate updateQuery);

    public Query createQuery(CriteriaDelete deleteQuery);

    public <T extends Object> TypedQuery<T> createQuery(String qlString, Class<T> resultClass);

    public Query createNamedQuery(String name);

    public <T extends Object> TypedQuery<T> createNamedQuery(String name, Class<T> resultClass);

当咱们的业务需要执行自定义SQL查询到 时候,这两种方式,在项目的Repository层,自行选择一种进行实现。

接下来,介绍一下相对不熟悉的JPQ,着重说明一下NameQuery。备注:为了便于管理统计,只自己使用的接口,一律写在Repository层,而被多次(自己及他人)使用的,一律写在Entity层,并加注所属实体,例如:TOpinion.findByStatus

第一点:NameQuery的所在地方,有两个,第一种用法:

    /**
* JPA第一种NameQuery语句写法
*/
public void exampleForNameQuery() {
Query query = this.em.createNamedQuery("select * from TOpinion o where o.id=?");
List<TOpinion> opinion = query.getResultList();
System.out.println(opinion.get(0).getContent());
}

也就是说,直接在Repository层编辑,第二种,在实体上统一编辑,然后调用,这一点类似于Mybatis的调用层次:

@Entity
@Table(name = "t_opinion")
@NamedQueries({
@NamedQuery(name = "TOpinion.findById", query = "SELECT o FROM TOpinion o WHERE o.id=?1")
,
@NamedQuery(name = "TOpinion.findByStatus", query = "SELECT o FROM TOpinion o WHERE o.status=:status")
})
public class TOpinion implements Serializable { @Column(name = "id", table = "t_opinion", nullable = false, length = 22)
@Id
private String id;

调用:

    /**
* JPA第二种NameQuery语句写法,赋值方式参考Hibernate,调用结构参考Mybatis
*/
public void exampleForNameQuery1() {
Query query = em.createNamedQuery("TOpinion.findById");
query.setParameter(1, "2");
List<TOpinion> opinion = query.getResultList();
}

两种赋值方式:query.setParameter(1, "2"); 和 query.setParameter("status", status.get(0));

扩展学习链接:http://www.objectdb.com/java/jpa/query/named

1.3,关于注入

在Spring中,咱们使用@Autowired进行bean注入,在此项目中,咱们使用的是Jboss实现的CDI规范,应该使用@Inject注入!

二、其他注意点

1,数据库连接池

在项目中,没有明确配置数据库连接池,但是,这不代表,我们没有连接池,只不过,我们的数据库连接池,配置在Jboss里面。有兴趣的可以看看配置文件中对于数据库的配置信息

2,事务的执行策略和传播行为

这一点,也在Jboss里面呢,项目中并没有配置

3,怎样快速构建的后端工程

这一点我专门写篇博客或者文档,说明一下操作过程,以及前后两种开发模式的效率对比说明

4,swagger在这之中所做的工作

同第三点,我会再写篇博客,关于swagger编辑器,swagger API发布,swagger API代码生成,借助swagger构建可访问的mock service,API集成其他工具快速构建开发框架

三、总结

平台的开发模式,开发技术,都跟之前的Spring有所微小差异,但对于大家来说,一切都不是问题,从目前的现况来看,接收速度和效率都很不错。很开心啊

后续关于安全控制,测试框架Arquillian的使用,再出文档!

java EE技术体系——CLF平台API开发注意事项(1)——后端开发的更多相关文章

  1. java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明

    文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...

  2. java EE技术体系——CLF平台API开发注意事项(2)——后端测试

    前言:上篇博客说到了关于开发中的一些情况,这篇博客主要说明一些关于测试的内容. 一.宏观说明 要求:每一个API都必须经过测试.   备注:如果涉及到服务间调用(如权限和基础数据),而对方服务不可用时 ...

  3. java EE技术体系——CLF平台API开发注意事项(3)——API安全访问控制

    前言:提离职了,嗯,这么多年了,真到了提离职的时候,心情真的很复杂.好吧,离职阶段需要把一些项目中的情况说明白讲清楚,这篇博客就简单说一下在平台中对API所做的安全处理(后面讲网关还要说,这里主要讲代 ...

  4. [置顶] 遵循Java EE标准体系的开源GIS服务平台架构

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  5. [置顶] 遵循Java EE标准体系的开源GIS服务平台之二:平台部署

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  6. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  7. Spring 4 官方文档学习 Spring与Java EE技术的集成

    本部分覆盖了以下内容: Chapter 28, Remoting and web services using Spring -- 使用Spring进行远程和web服务 Chapter 29, Ent ...

  8. 揭秘Java架构技术体系

    Web应用,最常见的研发语言是Java和PHP. 后端服务,最常见的研发语言是Java和C/C++. 大数据,最常见的研发语言是Java和Python. 可以说,Java是现阶段中国互联网公司中,覆盖 ...

  9. java EE中使用PO和VO的注意事项

    1.基本定义  PO(Persistence Object 持久化对象)是直接跟持久层数据库打交道的java Bean (model,entity,bean等叫法都是可以的),里面除了私有的成员变量之 ...

随机推荐

  1. Literals

    Uppercase or lowercase L means long (however, using a lowercase l is confusing because it can look l ...

  2. 进度条插件使用demo

    1.下载地址: http://down.htmleaf.com/1502/201502031710.zip 2.效果图: 3.HTML代码:其中80设置当前所占百分比,即蓝色部分比例:注意引入必须的j ...

  3. 火狐浏览器不支持location.reload()(以改变页面大小时重新刷新页面为例)

    背景:当页面大小改变时需要重新刷新页面,以适应相应的尺寸 解决方法: var url = window.location.href; var parm = parseInt(Math.random() ...

  4. 2017.10.5 QBXT 模拟赛

    题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...

  5. CF Gym 100463D Evil (二维前缀和+离散)

    题意:给一些带颜色的点,求一个最小的矩形,恰好包括一半的红色点,且不包括蓝色点. 题解:暴力,求个二维前缀和,用容斥原理更新一下.N很小所以我采用了离散优化,跑了个0ms. 之前没写过二维前缀和,加上 ...

  6. 《毛毛虫团队》第八次团队作业:ALPHA冲刺

    一:实验名称:软件测试与ALPHA冲刺 二:实验目的与要求 (1)掌握软件测试基础技术. (2)学习迭代式增量软件开发过程(Scrum). 三:实验步骤 任务一:各个成员今日完成的任务: 任务二:明日 ...

  7. Python——三目运算符

    一.三目运算符 1.if语句三目运算符语法格式 Python可以通过if'语句来实现三目运算符的功能,因此可以把这种if语句当做三目运算符,具体语法格式如下: 返回True执行 if 表达式 else ...

  8. iOS开发遇到的坑之五--解决工程已存在plist表,数据却不能存入的问题

    想写这篇博客其实在一两个月前开发遇见的时候就想把这个问题写成博客的,奈何自己一直懒外加一直没有时间,就把这个事情给耽搁了,好在当时知道下自己一定要把这个问题给描述出来,免得以后其他人遇到这个问题会纠结 ...

  9. 洛谷 P5015 标题统计

    第一道题很简单,标签:字符串.模拟. 只需要一个判断去除空格就对了: if(a[i]!=' ' && a[i]!='\n') v++; code: #include<iostre ...

  10. 【哈希 二分】bzoj2084: [Poi2010]Antisymmetry

    可以用manacher或者SA搞过去的:非常有趣的hash题 Description 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串.比如0000 ...