二、實體層:使用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注意註解:@Service和@Transactional,實現需繼承BaseServiceImpl類,