整体架构dao、service、action篇

1、一个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)、见下图:

图片

 

2、实体层:使用jpa注解或hibernate注解标注每个实体,如:

@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;}    

        ..........

3、dao层性能:使用ehcache作为查询缓存。

4、dao层:

      1)、hibernate实现:推荐使用hibernate。

      2)、dbutils实现:如果是复杂的查询,如实体类没有建立关联关系,需建立左连接、右连接、union等负载查询逻辑, 或者您喜欢直接 写sql,推荐使用dbutils,它能完全满足您写sql的欲望。

      3)、一个dao原则:一个系统只有一个dao,不管您开发的多少个模块,都不再需要写dao。一个dao管理所有模块与数据库的操作。

      4)、hql怎么写的,在哪里写的? 
      4.1)、使用HqlBuilder或SqlBuilder封装查询语句及查询参数。HqlBuilder和StringBuilder、stringBuffer的使用方法类似。

             如分页查询:

             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);

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

            }

          page = pageQueryHqlBuilder(page, hqlBuilder);

 

     4.2)、写在外部xml中:
图片
     4.3)、在页面上写,并存入数据库:

     

    

 

5、service层:每个功能模块都应该有一个service层:一个接口和它的实现。

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

BaseService接口中定义了一般增删改查方法。

实现类如:

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

       注意注解:@Service和@Transactional,实现需继承BaseServiceImpl类,

6、action层,如:
        @Controller("system.action.AccessLogAction") 
        @Scope("prototype") 
        public class AccessLogAction extends BaseCrudAction<SysAccessLog>
       注意两个注解和父类BaseCrudAction,如果该功能有附件上传,请继承BaseUploadFileAction。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值