在我的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.