二、实体层:使用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类,