前言:這是一篇幫助小夥伴在本次項目中快速進入到java EE開發的一些說明,爲了讓同組小夥伴們開發的時候,有個清晰點的思路。昨天給你們演示分享了基本概況,但沒有留下文字總結說明,預防後期有人再次問我,特寫此篇博客!css
本篇博客的結構主要分爲兩個部分:第一個是關鍵執行點,也就是在項目中,每一個人都要去作去注意的;第二個是其餘注意點,這個部分是一些你們提到的問題html
重中之重:嚴禁引入任何Spring體系的技術(關於昨天提到的 定時任務,消息,java EE有相應的技術體系) java
與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/>
小夥伴們:着重關注第二點內容,涉及到我們的具體使用! 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數據庫
備註:底層的實現框架,目前選擇的是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);
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);
接下來,介紹一下相對不熟悉的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();
}
擴展學習連接:http://www.objectdb.com/java/jpa/query/named
在Spring中,我們使用@Autowired進行bean注入,在此項目中,我們使用的是Jboss實現的CDI規範,應該使用@Inject注入!
1,數據庫鏈接池
在項目中,沒有明確配置數據庫鏈接池,可是,這不表明,咱們沒有鏈接池,只不過,咱們的數據庫鏈接池,配置在Jboss裏面。有興趣的能夠看看配置文件中對於數據庫的配置信息
2,事務的執行策略和傳播行爲
這一點,也在Jboss裏面呢,項目中並無配置
3,怎樣快速構建的後端工程
這一點我專門寫篇博客或者文檔,說明一下操做過程,以及先後兩種開發模式的效率對比說明
4,swagger在這之中所作的工做
同第三點,我會再寫篇博客,關於swagger編輯器,swagger API發佈,swagger API代碼生成,藉助swagger構建可訪問的mock service,API集成其餘工具快速構建開發框架
平臺的開發模式,開發技術,都跟以前的Spring有所微小差別,但對於你們來講,一切都不是問題,從目前的現況來看,接收速度和效率都很不錯。很開心啊
後續關於安全控制,測試框架Arquillian的使用,再出文檔!