`

ssh 底层封装(增,删,改,查,分页)

    博客分类:
  • J2EE
阅读更多
public class QueryResult<T> {
private List<T> resultlist;
private long totalrecord;

public List<T> getResultlist() {
   return resultlist;
}
public void setResultlist(List<T> resultlist) {
   this.resultlist = resultlist;
}
public long getTotalrecord() {
   return totalrecord;
}
public void setTotalrecord(long totalrecord) {
   this.totalrecord = totalrecord;
}
}

public class PageView<T> {
/** 分页数据 **/
private List<T> records;
/** 页码开始索引和结束索引 **/
private PageIndex pageindex;
/** 总页数 **/
private long totalpage = 1;
/** 每页显示记录数 **/
private int maxresult = 12;
/** 当前页 **/
private int currentpage = 1;
/** 总记录数 **/
private long totalrecord;
/** 页码数量 **/
private int pagecode = 10;
/** 要获取记录的开始索引 **/
public int getFirstResult() {
   return (this.currentpage-1)*this.maxresult;
}
public int getPagecode() {
   return pagecode;
}

public void setPagecode(int pagecode) {
   this.pagecode = pagecode;
}

public PageView(int maxresult, int currentpage) {
   this.maxresult = maxresult;
   this.currentpage = currentpage;
}

public void setQueryResult(QueryResult<T> qr){
   setTotalrecord(qr.getTotalrecord());
   setRecords(qr.getResultlist());
}

public long getTotalrecord() {
   return totalrecord;
}
public void setTotalrecord(long totalrecord) {
   this.totalrecord = totalrecord;
   setTotalpage(this.totalrecord%this.maxresult==0? this.totalrecord/this.maxresult : this.totalrecord/this.maxresult+1);
}
public List<T> getRecords() {
   return records;
}
public void setRecords(List<T> records) {
   this.records = records;
}
public PageIndex getPageindex() {
   return pageindex;
}
public long getTotalpage() {
   return totalpage;
}
public void setTotalpage(long totalpage) {
   this.totalpage = totalpage;
   this.pageindex = PageIndex.getPageIndex(pagecode, currentpage, totalpage);
}
public int getMaxresult() {
   return maxresult;
}
public int getCurrentpage() {
   return currentpage;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.ssh.bean.user">
    <class name="Person" table="person">
    <cache usage="read-write" region="org.ssh.bean.Person"/>
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name" length="20" not-null="true"/>
    </class>
</hibernate-mapping>


public class Person {
private Integer id;
private String name;

public Person(){}

public Person(String name) {
   this.name = name;
}

public Person(Integer id, String name) {
   this.id = id;
   this.name = name;
}
public Integer getId() {
   return id;
}
public void setId(Integer id) {
   this.id = id;
}
public String getName() {
   return name;
}
public void setName(String name) {
   this.name = name;
}

}
public class PageIndex {
private long startindex;
private long endindex;

public PageIndex(long startindex, long endindex) {
   this.startindex = startindex;
   this.endindex = endindex;
}
public long getStartindex() {
   return startindex;
}
public void setStartindex(long startindex) {
   this.startindex = startindex;
}
public long getEndindex() {
   return endindex;
}
public void setEndindex(long endindex) {
   this.endindex = endindex;
}

public static PageIndex getPageIndex(long viewpagecount, int currentPage, long totalpage){
    long startpage = currentPage-(viewpagecount%2==0? viewpagecount/2-1 : viewpagecount/2);
    long endpage = currentPage+viewpagecount/2;
    if(startpage<1){
     startpage = 1;
     if(totalpage>=viewpagecount) endpage = viewpagecount;
     else endpage = totalpage;
    }
    if(endpage>totalpage){
     endpage = totalpage;
     if((endpage-viewpagecount)>0) startpage = endpage-viewpagecount+1;
     else startpage = 1;
    }
    return new PageIndex(startpage, endpage); 
}
}
public interface DAO<T> {
/**
* 获取记录总数
* @param entityClass 实体类
* @return
*/
public long getCount();
/**
* 保存实体
* @param entity 实体id
*/
public void save(Object entity);
/**
* 更新实体
* @param entity 实体id
*/
public void update(Object entity);
/**
* 删除实体
* @param entityClass 实体类
* @param entityids 实体id数组
*/
public void delete(Serializable ... entityids);
/**
* 获取实体
* @param <T>
* @param entityClass 实体类
* @param entityId 实体id
* @return
*/
public T find(Serializable entityId);
/**
* 分页获取数据
* @param firstindex 开始索引
* @param maxresult 需要获取的记录数
* @param wherejpql 不带where关键字的条件语句,属性前带有(o.)前缀,语句中只支持使用位置参数 如:o.username=? and o.gender=?
* @param queryParams 条件语句中使用到的位置参数值,如果没有使用位置参数,可以设置为null
* @param orderby 排序,key为属性名称,值为asc/desc,如:LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
   orderby.put("regTime", "desc");
* @return
*/
public QueryResult<T> getScrollData(int firstResult, int maxResult, String wherejpql, Object[] queryParams,LinkedHashMap<String, String> orderby);
/**
* 分页获取数据
* @param firstindex 开始索引
* @param maxresult 需要获取的记录数
* @param wherejpql 不带where关键字的条件语句,属性前带有(o.)前缀,语句中只支持使用位置参数 如:o.username=? and o.gender=?
* @param queryParams 条件语句中使用到的位置参数值,如果没有使用位置参数,可以设置为null
* @return
*/
public QueryResult<T> getScrollData(int firstResult, int maxResult, String wherejpql, Object[] queryParams);
/**
* 分页获取数据
* @param firstindex 开始索引
* @param maxresult 需要获取的记录数
* @param orderby 排序,key为属性名称,值为asc/desc,如:LinkedHashMap<String, String> orderby = new LinkedHashMap<String, String>();
   orderby.put("regTime", "desc");
* @return
*/
public QueryResult<T> getScrollData(int firstResult, int maxResult, LinkedHashMap<String, String> orderby);
/**
* 分页获取数据
* @param firstindex 开始索引
* @param maxresult 需要获取的记录数
* @return
*/
public QueryResult<T> getScrollData(int firstResult, int maxResult);
/**
* 获取全部数据
* @return
*/
public QueryResult<T> getScrollData();
}

@SuppressWarnings("unchecked")
@Transactional
public abstract class DaoSupport<T> implements DAO<T>{
protected Class<T> entityClass = GenericsUtils.getSuperClassGenricType(this.getClass());
@Resource private SessionFactory sessionFactory;
/**
* 获取当前Session
* @return
*/
protected Session getSession(){
   return this.sessionFactory.getCurrentSession();
}

public void delete(Serializable ... entityids) {
   for(Serializable id : entityids){
    getSession().delete(getSession().load(this.entityClass, id));
   }
}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public T find(Serializable entityId) {
   if(entityId==null) throw new RuntimeException(this.entityClass.getName()+ ":传入的实体id不能为空");
   return (T)getSession().get(this.entityClass, entityId);
}

public void save(Object entity) {
   getSession().persist(entity);
}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public long getCount() {
   return (Long)getSession().createQuery("select count(*) from "+ getEntityName(this.entityClass)+ " o")
     .uniqueResult();
}

public void update(Object entity) {
   getSession().merge(entity);
}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public QueryResult<T> getScrollData(int firstResult, int maxResult, LinkedHashMap<String, String> orderby) {
   return getScrollData(firstResult, maxResult, null, null, orderby);
}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public QueryResult<T> getScrollData(int firstResult, int maxResult, String wherejpql, Object[] queryParams) {
   return getScrollData(firstResult, maxResult, wherejpql, queryParams, null);
}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public QueryResult<T> getScrollData(int firstResult, int maxResult) {
   return getScrollData(firstResult, maxResult, null, null, null);
}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public QueryResult<T> getScrollData() {
   return getScrollData(-1, -1);
}

@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public QueryResult<T> getScrollData(int firstResult, int maxResult
    , String wherejpql, Object[] queryParams,LinkedHashMap<String, String> orderby) {
   QueryResult qr = new QueryResult<T>();
   String entityname = getEntityName(this.entityClass);
   String whereql = wherejpql==null || "".equals(wherejpql.trim())? "": "where "+ wherejpql;
   Query query = getSession().createQuery("select o from "+ entityname+ " o "+ whereql+ buildOrderby(orderby));
   setQueryParams(query, queryParams);
   if(firstResult!=-1 && maxResult!=-1) query.setFirstResult(firstResult).setMaxResults(maxResult);
   qr.setResultlist(query.list());
   query = getSession().createQuery("select count(*) from "+ entityname+ " o "+ whereql);
   setQueryParams(query, queryParams);
   qr.setTotalrecord((Long)query.uniqueResult());
   return qr;
}
/**
* 为Quyer对象设置参数
* @param query Quyer对象
* @param queryParams 参数
*/
protected static void setQueryParams(Query query, Object[] queryParams){
   if(queryParams!=null && queryParams.length>0){
    for(int i=0; i<queryParams.length; i++){
     query.setParameter(i, queryParams[i]);
    }
   }
}
/**
* 构建order by语句
* @param orderby
* @return
*/
protected static String buildOrderby(LinkedHashMap<String, String> orderby){
   StringBuffer orderbyql = new StringBuffer("");
   if(orderby!=null && orderby.size()>0){
    orderbyql.append(" order by ");
    for(String key : orderby.keySet()){
     orderbyql.append("o.").append(key).append(" ").append(orderby.get(key)).append(",");
    }
    orderbyql.deleteCharAt(orderbyql.length()-1);
   }
   return orderbyql.toString();
}
/**
* 获取实体的名称
* @param <E>
* @param clazz 实体类
* @return
*/
protected static <E> String getEntityName(Class<E> clazz){
   String entityname = clazz.getSimpleName();//约束:不要在hbm.xml映射文件中的<class>节点指定entity-name属性
   return entityname;
}
}
分享到:
评论

相关推荐

    java底层代码:泛型DAO+SSH+Proxool连接池+国际化语言

    2、采用Jsp-&gt;Action-&gt;Service-&gt;Dao的编码方式,封装了HibernateUtil、SpringUtil、HqlUtil等工具,以及简化了增删查改操作。 3、此底层包含泛型DAO、Proxool连接池、国际化语言、DateUtil工具、ExcelUtil报表工具、...

    python入门到高级全栈工程师培训 第3期 附课件代码

    03 DOM节点的增删改查与属性设值 04 正反选练习 05 js练习之二级联动 06 jquery以及jquery对象介绍 07 jquery选择器 08 jquery的查找筛选器 09 jquery练习之左侧菜单 第44章 01 jquery属性操作之html,text,val方法...

    JAVAWEB权限控制源码

    1.框架SSH2 2.使用二进制进行权限控制 3.完整代码,有大部分注释 4.包括用户模块、部门、帐号管理、菜单模块、权限...6.三层架构、比较完整的底层封装、分页 7.http://blog.csdn.net/heyehuang/article/details/9714989

    Spring4+SpringMVC4+Hibernate4整合源码

    本资源为Spring4+SpringMVC4+Hibernate4整合源码,里面内置了一套对Hibernate底层Dao的封装,分页的封装,由于最近比较忙暂时没时间集成Spring Security。权限部分也还没来的及实现,本套框架的前端打算用bootstrap...

    积分管理系统java源码-java_hss_HouseSystem:house房屋发布查询系统2017_09

    持久层使用了Hibernate封装CRUD操作,底层使用druid连接池实现数据存取。 实现功能 用户: 输入用户名和密码和验证码登录,产生用户登录记录并存储在数据库中。首页用查询显示真实姓名记录用户的登录状态。 输入...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包101

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    Java资源包01

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 ...

    JAVA上百实例源码以及开源项目

    百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对...

Global site tag (gtag.js) - Google Analytics