• 数据库访问层Dao业务逻辑小记录(一)


    在我的feelling中,用ssh搭建Java Web开发框架时,用M-V-C模式是最好不过了。此时,后台业务逻辑层即model层,会有很多实现方式。这么久以来,我通过一些资料发现了一种我觉得很好的方式,所以,想记录下来。毕竟,好记忆不如烂笔头嘛。

    1.新建业务层包,即service包,前缀可自定义。

    2.再在service包下新建一个基层或者叫基本业务的包,可定义为base包。

    3.在base包下,新建总的业务接口,定义增删改查(Curd)的业务。

    View Code
    /**
     * 全局接口
     * @author Scherrer
     *
     */
    public interface DAO {
    }

    4.定义具体Curd的方法,参数可自定义。

    View Code
        /**
         * 保存实体对象
         * @param entity 实体id
         */
        public void save(Object entity);
        
        /**
         * 更新实体对象
         * @param entity 实体id
         */
        public void update(Object entity);
        
        /***
         * 动态参数,删除实体
         * @param entityclazz 泛型类
         * @param entityid 实体id
         */
        public <T> void delete(Class<T> entityclazz ,Object ...entityids);
        
        
        /**
         * 泛型技术,查询实体
         * @param entityclazz 泛型类
         * @param entityid 实体id
         * @return 
         */
        public <T> T search(Class<T> entityclazz,Object entityid);
        

    5.其中,在查询数据库时,通常会有分页的功能。此时,新建一个查询结果的泛型类,可放在项目的bean目录下。

    View Code
    package com.bean;
    
    import java.util.List;
    
    public class QueryResult<E>{
    
        private List<E> results;
        private Long count;
        public List<E> getResults() {
            return results;
        }
        public void setResults(List<E> results) {
            this.results = results;
        }
        public Long getCount() {
            return count;
        }
        public void setCount(Long count) {
            this.count = count;
        }
        
    }

    6.继续定义分页查询的接口,参数类型如:限制条件(where语句),是否分页,查询最大记录数,排序(order by),分组(having)等等。

    View Code
    /**
         * 
         * @param entityclass 泛型
         * @param startIndex 每页开始的索引
         * @param maxCount 最大记录
         * @param whereJpql 查询条件
         * @param param 设置参数
         * @param orderby 排序条件
         * @return
         */
        public <T> QueryResult<T> getScrollData(Class<T> entityclass,int startIndex,
                int maxCount,String whereJpql, Object[] params,LinkedHashMap<String, String> orderby);
        
        public <T> QueryResult<T> getScrollData(Class<T> entityclass,int startIndex,
                int maxCount);
        
        public <T> QueryResult<T> getScrollData(Class<T> entityclass,int startIndex,
                int maxCount,String whereJpql, Object[] params);
        
        public <T> QueryResult<T> getScrollData(Class<T> entityclass,int startIndex,
                int maxCount,LinkedHashMap<String, String> orderby);
        
        public <T> QueryResult<T> getScrollData(Class<T> entityclass);

    备注:在实现具体方法时,要采用ORM(对象关系映射)的方式。我常用的是JPA+Hibernate.

  • 相关阅读:
    L99
    L98
    L97
    PyQt(Python+Qt)学习随笔:model/view架构中的QStandardItemModel使用案例
    PyQt(Python+Qt)学习随笔:model/view架构中的两个标准模型QStandardItemModel和QFileSystemModel
    PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念
    PyQt(Python+Qt)学习随笔:Model/View架构概述
    第十四章、Model/View开发:Model/View架构程序设计模式
    Python中数字按位取反的方法
    PyQt(Python+Qt)学习随笔:Model中项的标记flags取值及枚举类型Qt.ItemFlag
  • 原文地址:https://www.cnblogs.com/scherrer/p/2941283.html
Copyright © 2020-2023  润新知