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的使用,再出文檔!

相關文章
相關標籤/搜索