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

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

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

1、关键执行点

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

1.1,事务

与Spring不一样,在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代理)


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


在我们的项目中,第一点:了解事务的基础内容: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语句,去查询相关的数据,那么在此,我说明一下相关用法:api

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

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

    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注入!


2、其余注意点

1,数据库链接池

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

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

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

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

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

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

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


3、总结

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

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

相关文章
相关标签/搜索