`

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;
}
}
分享到:
评论

相关推荐

    SSH增删改查+分页+图片上传

    在这个"SSH增删改查+分页+图片上传"的项目中,我们将深入探讨这三个框架在实际应用中的结合以及它们如何协同工作来实现数据管理、页面展示和文件上传等功能。 首先,Struts1是一个基于MVC(Model-View-Controller)...

    SSH 通用分页插件

    SSH分页插件的优势在于其灵活性和易用性,开发者无需关心底层的分页逻辑,只需关注业务逻辑和数据展示,极大地提高了开发效率。同时,由于插件进行了优化,能够有效避免大数据量查询时的性能问题。 在实际开发中,...

    ssh 分页 控件 (分页插件)

    分页插件的优点在于它将分页逻辑封装起来,使得开发者可以专注于业务处理,而不是分页代码的实现。同时,通过配置和标签库的使用,可以快速在多个项目中复用,提高了开发效率。 总的来说,"ssh 分页 控件 (分页...

    封装好直接使用的jsp分页插件

    "封装好直接使用的jsp分页插件"正是一款针对这一需求设计的工具,它能够简化开发过程,使开发者能够快速实现分页功能,而无需关注底层复杂的逻辑。 该插件适用于jsp与servlet的原生组合,同时对流行的SSH(Struts2 ...

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

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

    我的智囊团(SSH)01--07学习笔记

    这些方法包括对实体的增删改查(CRUD)操作,以及支持命名查询和分页功能。以下是`HibernateTemplate`的一些关键方法: 1. **删除操作**: - `void delete(Object entity)`:删除给定的持久化实例。 - `deleteAll...

    ssh框架很多功能

    1. **增删改查**:通过Hibernate的CRUD操作,可以轻松实现对数据库的基本操作。 2. **表单验证**:Struts2提供丰富的验证机制,可以定义字段级别的验证规则。 3. **事务管理**:Spring的事务管理器确保了业务操作的...

    使用pager-taglib实现分页显示的详细步骤

    在项目的utils包下创建一个`PageModel`类,该类用于封装分页后的数据和总记录数。示例如下: ```java package com.dengmin.oa.utils; import java.util.List; public class PageModel { // 总记录数 private ...

    使用配置文件对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    1. **DAO层封装**: DAO(Data Access Object)层是软件架构中用于封装数据访问逻辑的一层,它将业务逻辑层与数据持久化层隔离,使得业务逻辑不受底层数据访问细节的影响。本文档中的DAO层封装是指通过特定的设计模式...

    SSH面试题总结

    5. **持久化操作**:执行增删改查等操作。 6. **提交事务**:提交事务,使所有之前的操作永久生效。 7. **关闭Session**:关闭当前`Session`,释放资源。 8. **关闭SessionFactory**:最后关闭`SessionFactory`,...

    SSH个人总结(看了之后让你更加清晰的知道它们的作用)

    - **分页查询**:可以通过设置查询参数来实现对查询结果的分页显示。 - **聚合函数支持**:如sum、avg、count等。 - **自定义SQL支持**:允许开发者直接编写SQL语句进行复杂查询。 - **事务管理**:通过Transaction...

    SSH框架面试题.pdf

    这些模板类通过封装底层的API调用,提供了统一的操作接口,提高了代码的可读性和可维护性。 30. **Spring框架如何整合Hibernate和Struts?** Spring框架可以作为Hibernate和Struts的“胶水”层,通过Spring的依赖...

    javaweb-选课管理系统

    在选课系统中,Hibernate负责将Java对象映射到数据库表,通过HQL(Hibernate查询语言)或SQL进行数据的增删改查操作。实体类定义了数据库表结构,SessionFactory创建并管理Session,Session则用于执行数据库操作。...

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

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

    HibernateS整合pring

    SSH(Struts、Spring、Hibernate)是经典的Java EE三层架构中的组成部分,其中Spring作为核心,负责控制反转和依赖注入,而Hibernate则负责数据持久化。 在Spring中,DAO(Data Access Object)模式被广泛采用,...

    ec[s]d-1.0最完整版

    Ec[s]d-1.0最完整版是一个旨在提升开发效率、降低开发复杂性的Java Web框架,通过简化控制器和DAO的实现,以及与Spring的紧密集成,为开发者提供了强大的工具,使他们能更加专注于业务逻辑的实现,而非底层的配置和...

    JAVAWEB权限控制源码

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

    达内当当网项目

    3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,将SQL语句封装在对象中,使得开发者可以专注于业务逻辑,而不是底层的数据库细节。在当当网项目中,Hibernate将用于商品信息、用户...

Global site tag (gtag.js) - Google Analytics