第三篇,總體架構dao、service、action篇

一、一個spring配置文件,它是核心。這個xml配置的東東有:
     1)、一個號稱目前最快的數據源:BoneCPDataSource。
     2)、數據庫鏈接properties文件。
     3)、spring 自動掃描註冊在application context中的組件:<context:component-scan base-package="com.jroo" />
     4)、aop、註解事務管理:<aop:aspectj-autoproxy/>、<tx:annotation-driven/>
     5)、增刪改查,就僅此一個spring配置文件,架構搭好了,開發人員不用管任何spring配置文件了。
     6)、見下圖:

圖片


二、實體層:使用jpa註解或hibernate註解標註每一個實體,如: java

@Entity
@Table(name = "SYS_DEPT")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class SysDept extends BaseEntity implements java.io.Serializable {
        private static final long serialVersionUID = -7969250614159287629L;
        //略去屬性
        //略去構造方法
        //下面是getter方法示例
       @ManyToOne(fetch = FetchType.LAZY)
       @JoinColumn(name = "PARENT_ID")
       public SysDept getSysDept() { return this.sysDept;}
       @Column(name = "DEPT_NAME", length = 20)
       public String getDeptName() { return this.deptName;}     spring

        ..........

三、dao層性能:使用ehcache做爲查詢緩存。 sql

四、dao層: 數據庫

      1)、hibernate實現:推薦使用hibernate。 緩存

      2)、dbutils實現:若是是複雜的查詢,如實體類沒有創建關聯關係,需創建左鏈接、右鏈接、union等負載查詢邏輯, 或者您喜歡直接 寫sql,推薦使用dbutils,它能徹底知足您寫sql的慾望。 架構

      3)、一個dao原則:一個系統只有一個dao,無論您開發的多少個模塊,都再也不須要寫dao。一個dao管理全部模塊與數據庫的操做。 app

      4)、hql怎麼寫的,在哪裏寫的?
      4.1)、使用HqlBuilder或SqlBuilder封裝查詢語句及查詢參數。HqlBuilder和StringBuilder、stringBuffer的使用方法相似。 性能

             如分頁查詢: fetch

             HqlBuilder hqlBuilder = new HqlBuilder("select log from SysLoginLog as log where 1=1");
             if(StringUtils.isNotEmpty(loginUserId)){
                  hqlBuilder.append(" and log.loginUser.id=:loginUserId ").setParam("loginUserId", loginUserId); ui

              }
           if(StringUtils.isNotEmpty(loginUserName)){
               hqlBuilder.append(" and log.loginUser.userName like:loginUserName ").setParam("loginUserName", "%"+loginUserName+"%");

            }

          page = pageQueryHqlBuilder(page, hqlBuilder);


     4.2)、寫在外部xml中:
圖片
     4.3)、在頁面上寫,並存入數據庫:

     

    

    

五、service層:每一個功能模塊都應該有一個service層:一個接口和它的實現。

接口如:public interface UserService extends BaseService<SysUser> ,需繼承接口BaseService,

BaseService接口中定義了通常增刪改查方法。

實現類如:

        @Service
        @Transactional
         public class UserServiceImpl extends BaseServiceImpl<SysUser> implements UserService {}

       注意註解:@Service和@Transactional,實現需繼承BaseServiceImpl類,

六、action層,如:
        @Controller("system.action.AccessLogAction")
        @Scope("prototype")
        public class AccessLogAction extends BaseCrudAction<SysAccessLog>
       注意兩個註解和父類BaseCrudAction,若是該功能有附件上傳,請繼承BaseUploadFileAction。
相關文章
相關標籤/搜索