S2SH框架整合开发版(十一)中

五. 分页Bean PageBean


package com.yjl.util;
import java.util.List;
/**
 * 关于分页的类
 *author 作者 yjl
*/
public class PageBean<T> {
    /**
     * @param currentPage 当前页
     * @param pageSize 每页显示多少条
     * @param recordCount 总记录数
     * @param recordList 本页的数据列表
     * @param pageCount 总页数
     * @param beginPageIndex 页码列表的开始索引(包含)
     * @param endPageIndex 页码列表的结束索引(包含)
     * @param isStart 是否是开始页
     * @param isEnd 是否是结束页
     */
    // 指定的或是页面参数
    private int currentPage;
    private int pageSize;
    // 查询数据库
    private long recordCount; 
    private List<T>recordList;
    // 计算
    private int pageCount;
    private int beginPageIndex;
    private int endPageIndex;
    private boolean start;
    private boolean end;
    //设置默认显示的页数,默认显示10页。
    public static final int DEFAULT_SHOW_PAGE=10;
    public static final int DEFAULT_CURRENT_PAGE=1;
    public static final int DEFAULT_PAGE_SIZE=10;
    /**
     * 只接受前4个必要的属性,会自动的计算出其他3个属生的值
     * 
     * @param currentPage
     * @param pageSize
     * @param recordCount
     * @param recordList
     */
    public PageBean(int currentPage, int pageSize, long recordCount, List<T>recordList) {
        if(currentPage<1){ //默认当前页为1
            currentPage=DEFAULT_CURRENT_PAGE;
        }
        if(pageSize<1){ //默认显示页数目为10
            pageSize=DEFAULT_PAGE_SIZE;
        }
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.recordCount = recordCount;
        this.recordList = recordList;
        // 计算总页码
        pageCount = ((int)recordCount + pageSize - 1) / pageSize;
        // 计算 beginPageIndex 和 endPageIndex
        // >> 总页数不多于 SHOW_PAGE 页,则全部显示
        if (pageCount <=DEFAULT_SHOW_PAGE) {
            beginPageIndex = 1;
            endPageIndex = pageCount;
        }
        // >> 总页数多于 SHOW_PAGE 页,则显示当前页附近的共 SHOW_PAGE 个页码
        else {
            // 当前页附近的共 SHOW_PAGE 个页码(前SHOW_PAGE/2个 + 当前页 + 后SHOW_PAGE-1-前个)
            beginPageIndex = currentPage -(int)Math.ceil(((double)DEFAULT_SHOW_PAGE/2)-1);
            endPageIndex =beginPageIndex+DEFAULT_SHOW_PAGE-1;
            // 当前面的页码不足个时,则显示前SHOW_PAGE个页码
            if (beginPageIndex < 1) {
                beginPageIndex = 1;
                endPageIndex = DEFAULT_SHOW_PAGE;
            }
            // 当后面的页码不足5个时,则显示后SHOW_PAGE个页码
            if (endPageIndex > pageCount) {
                endPageIndex = pageCount;
                beginPageIndex = pageCount -DEFAULT_SHOW_PAGE + 1;
            }
        }
        //如何判断是否是开始页呢?
        start=(currentPage==1?true:false);
        end=(currentPage==pageCount?true:false);
    }
    public List<T> getRecordList() {
        return recordList;
    }
    public void setRecordList(List<T> recordList) {
        this.recordList = recordList;
    }
    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getPageCount() {
        return pageCount;
    }
    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public long getRecordCount() {
        return recordCount;
    }

    public void setRecordCount(long recordCount) {
        this.recordCount = recordCount;
    }

    public int getBeginPageIndex() {
        return beginPageIndex;
    }

    public void setBeginPageIndex(int beginPageIndex) {
        this.beginPageIndex = beginPageIndex;
    }

    public int getEndPageIndex() {
        return endPageIndex;
    }

    public void setEndPageIndex(int endPageIndex) {
        this.endPageIndex = endPageIndex;
    }
    public boolean isStart() {
        return start;
    }
    public void setStart(boolean start) {
        this.start = start;
    }
    public boolean isEnd() {
        return end;
    }
    public void setEnd(boolean end) {
        this.end = end;
    }
    @Override
    public String toString() {
        return "PageBean [currentPage=" + currentPage + ", pageSize=" + pageSize + ", recordCount=" + recordCount
                + ", recordList=" + recordList + ", pageCount=" + pageCount + ", beginPageIndex=" + beginPageIndex
                + ", endPageIndex=" + endPageIndex + ", isStart=" + start + ", isEnd=" + end + "]";
    }
    
}


六. 查询帮助 QueryHelper类


package com.yjl.util;
import java.util.ArrayList;
import java.util.List;
/**
 * 这是辅助拼接HQL的语句,用于查询
 *author 作者 yuejl
 *version 创建时间 2018年3月28日下午11:04:37 
*/
@SuppressWarnings("rawtypes")
public class QueryHelper {
    private String fromClause; // FROM子句
    private StringBuffer whereClause =new StringBuffer(""); // Where子句
    private StringBuffer orderByClause =new StringBuffer(""); // OrderBy子句
    private List<Object> parameters = new ArrayList<Object>(); // 参数列表
    //定义要分组的那一个字段
    private String groupByCon;
    //记录要分组的那个字段写成的语句.
    private String groupCase=null;
    //定义聚交函数
    private String prefix="";
    /**
     * 生成From子句
     * @param clazz 类.class 如User.class
     * @param alias 别名 如u
     *            
     */
    public QueryHelper(Class clazz) {
        String tableName=clazz.getSimpleName();
        fromClause="FROM " +tableName+ " " + firstLower(tableName);
    }
    /**
     * 生成From子句
     * @param clazz 类.class 如User.class
     * @param alias 别名 如u
     *            
     */
    public QueryHelper(Class clazz, String alias) {
        fromClause="FROM " + clazz.getSimpleName() + " " + alias;
    }
    //继续添加From的表
    public QueryHelper addFrom(Class clazz){
        // FROM user u ,A a// where 
        String tableName=clazz.getSimpleName();
        fromClause+=" "+clazz.getSimpleName()+" "+firstLower(tableName);
        return this;
    }
    public QueryHelper addFrom(Class clazz,String alias){
        // FROM user u ,A a// where 
        fromClause+=" "+clazz.getSimpleName()+" "+alias;
        return this;
    }
    /**
     * 拼接Where子句
     * @param condition 判断的条件
     * @param params 条件为true是的参数,只添加参数
     */
    public QueryHelper addCondition(String condition, Object... params) {
        // 拼接
        if (whereClause.length() == 0) {
            whereClause.append(" WHERE " + condition);
        } else {
            whereClause.append(" AND " + condition);
        }
        // 参数
        if (params != null) {
            for (Object p : params) {
                parameters.add(p);
            }
        }
        return this;
    }

    /**
     * 如果第一个参数为true,则拼接Where子句
     * @param append 判断条件是否为true
     * @param condition 语句
     * @param params 参数
     */
    public QueryHelper addCondition(boolean append, String condition, Object... params) {
        if (append) {
            addCondition(condition, params);
        }
        return this;
    }
    public QueryHelper addGroup(boolean append,String condition){
        if(append){
            groupCase=" GROUP BY "+condition;
            this.groupByCon=condition;
        }else{
            
        }
        return this;
    }
    /**
     * 拼接OrderBy子句
     * 
     * @param propertyName 参与排序的属性名
     * @param asc true表示升序,false表示降序
     */
    public QueryHelper addOrderProperty(String propertyName, boolean asc) {
        if (orderByClause.length() == 0) {
            orderByClause.append(" ORDER BY " + propertyName + (asc ? " ASC" : " DESC"));
        } else {
            orderByClause.append(", " + propertyName + (asc ? " ASC" : " DESC"));
        }
        return this;
    }

    /**
     * 如果第一个参数为true,则拼接OrderBy子句
     * @param append 是否排序的条件
     * @param propertyName 按照什么排序
     * @param asc true表示升序,false表示降序
     */
    public QueryHelper addOrderProperty(boolean append, String propertyName, boolean asc) {
        if (append) {
            addOrderProperty(propertyName, asc);
        }
        return this;
    }
    public void setCount(){
        prefix="select count(*) ";
    }
    /**
     * 获取生成的用于查询数据列表的HQL语句
     * 
     * @return
     */
    public String getListQueryHql() {
        if(groupCase==null){
            return prefix+fromClause+whereClause.toString()+orderByClause.toString();
        }else{
            return prefix+fromClause+whereClause.toString()+groupCase+orderByClause.toString();
        }
    }
    /**
     * 获取生成的用于查询总记录数的HQL语句
     * 
     * @return
     */
    public String getCountQueryHql() {
        //return "SELECT COUNT(*) " +getListQueryHql();
        if(getListQueryHql().indexOf("GROUP BY")!=-1){
            return "SELECT COUNT( DISTINCT "+groupByCon+") " +fromClause+whereClause.toString()+orderByClause.toString();
        }else{
            return "SELECT COUNT(*) " +getListQueryHql();
        }
    }

    /**
     * 获取HQL中的参数值列表
     * 
     * @return
     */
    public List<Object> getParameters() {
        return parameters;
    }
    public Object[] getParams(){
        return (Object[])parameters.toArray();
    }
    public String firstLower(String str){
        return str.substring(0,1).toLowerCase()+str.substring(1);
    }
    public String firstUpper(String str){
        return str.substring(0,1).toUpperCase()+str.substring(1);
    }
}


七. dao层 (可以省略,但最好不省略)


七.一 UserDao


package com.yjl.dao;

import com.yjl.pojo.User;
import com.yjl.util.BaseDao;

/**
 @author:yuejl
 @date: 2019年5月22日 下午8:04:06
 @Description 类的相关描述
*/
public interface UserDao extends BaseDao<User> {
    
}


七.二 UserDaoImpl


package com.yjl.dao.impl;

import org.springframework.stereotype.Repository;

import com.yjl.dao.UserDao;
import com.yjl.pojo.User;
import com.yjl.util.BaseDaoImpl;

/**
 @author:yuejl
 @date: 2019年5月22日 下午8:04:43
 @Description 类的相关描述
*/
@Repository("userDao")
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
    
}


如果继续写部门的话,就是:


public interface DeptDao extends BaseDao<Dept> {
    
}


@Repository("deptDao")
public class DeptDaoImpl extends BaseDaoImpl<Dept> implements DeptDao {
    
}


八. service 层


八.一 UserService 接口。 (需要用什么方法,就写相对应的方法,不需要写完。 为了测试,写完了。)


package com.yjl.service;

import java.io.Serializable;
import java.util.List;

import com.yjl.pojo.User;
import com.yjl.util.PageBean;
import com.yjl.util.QueryHelper;

/**
 @author:yuejl
 @date: 2019年5月22日 下午8:04:57
 @Description 类的相关描述
*/
public interface UserService{
    /**
     * @param t pojo插入对象
     * @return 添加对象
     */
    void addEntity(User t);
    /**
     * 
     * @param id 主键编号
     * @return 根据id编号删除当前对象
     */
    void deleteEntity(Serializable id);
    /**
     * @param t pojo更新对象
     * @return  更新对象
     */
    void updateEntity(User t);
    /**
     * @param t 保存或者是更新的对象
     * @return 保存或者是更新,如果没有该对象,就保存,如果有,就更新。
     */
    void saveOrUpdateEntity(User t);
    /**
     * @param id 主键编号
     * @return 根据id编号查询当前对象,是唯一值.
     */
    User getEntityById(Serializable id);
    /**
     * 
     * @param hql hql查询语句,用? 进行占位.
     * @param params 参数
     * @return 返回唯一确定的结果,得到的是唯一值。
     */
    User getEntity(String hql,Object []params);
    /**
     * 
     * @param hql hql查询语句,用? 进行占位.
     * @param params 参数
     * @return 返回唯一确定的结果,得到的是唯一值。
     */
    User getEntity(String hql,List<Object> params);
    /**
     * @param ids 主键编号集合,in 的形式
     * @return 根据id编号集合,查询所有的对象集合信息。
     */
    List<User> findEntitysByIds(Serializable []ids);
    /**
     * @return 查询所有的对象信息
     */
    List<User> findAllEntitys();
    /**
     * 
     * @param hql hql查询语句,用? 进行占位.
     * @param params 参数
     * @return 返回所有的结果,得到全部的记录。
     */
    List<User> findEntitysByHql(String hql,Object []params);
    /**
     * 
     * @param hql hql查询语句,用? 进行占位.
     * @param params 参数
     * @return 返回所有的结果,得到全部的记录。
     */
    List<User> findEntitysByHql(String hql,List<Object> params);
    /**
     * 
     * @param hql hql查询语句,用? 进行占位.
     * @param params 参数
     * @param currentPage 当前页
     * @param pageSize 每页的数目
     * @return 返回分页的结果,得到全部的记录
     */
    List<User> findEntitysByHql(String hql, Object[] params,
            int currentPage, int pageSize);
    /**
     * 
     * @param hql hql查询语句,用? 进行占位.
     * @param params 参数
     * @param currentPage 当前页
     * @param pageSize 每页的数目
     * @return 返回分页的结果,得到全部的记录
     */
    List<User> findEntitysByHql(String hql, List<Object> params,
            int currentPage, int pageSize);
    /**
     * 
     * @param currentPage 当前页
     * @param pageSize 每页的数目
     * @param ph 分页查询帮助类
     * @return 返回分页查询的结果
     */
    PageBean<User> page(int currentPage,int pageSize,QueryHelper ph);
    /**
     * @return 返回全部结果的数目
     */
    Long count();
    /**
     *
     * @param hql hql语句
     * @return 返回数目
     */
    Long count(String hql);
    /**
     * 
     * @param hql hql语句
     * @param params 参数
     * @return 返回数目
     */
    Long count(String hql,Object []params);
    /**
     * 
     * @param hql hql语句
     * @param params 参数
     * @return 返回数目
     */
    Long count(String hql,List <Object> params);
    List<User> findEntitysByHql(QueryHelper qh);
    Long count(QueryHelper qh);
    Object queryUnique(String hql,Object[] params);
}


八.二 UserServiceImpl 实现类


package com.yjl.service.impl;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.yjl.dao.UserDao;
import com.yjl.pojo.User;
import com.yjl.service.UserService;
import com.yjl.util.PageBean;
import com.yjl.util.QueryHelper;

/**
 @author:yuejl
 @date: 2019年5月22日 下午8:05:15
 @Description 类的相关描述
*/
@Service("userService")
@Transactional
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;
    @Override
    public void addEntity(User t) {
        userDao.addEntity(t);
    }

    @Override
    public void deleteEntity(Serializable id) {
        userDao.deleteEntity(id);
    }

    @Override
    public void updateEntity(User t) {
        userDao.updateEntity(t);
    }

    @Override
    public void saveOrUpdateEntity(User t) {
        userDao.saveOrUpdateEntity(t);
    }

    @Override
    public User getEntityById(Serializable id) {
        return userDao.getEntityById(id);
    }

    @Override
    public User getEntity(String hql, Object[] params) {
        return userDao.getEntity(hql, params);
    }

    @Override
    public User getEntity(String hql, List<Object> params) {
        return userDao.getEntity(hql, params);
    }

    @Override
    public List<User> findEntitysByIds(Serializable[] ids) {
        return userDao.findEntitysByIds(ids);
    }

    @Override
    public List<User> findAllEntitys() {
        return userDao.findAllEntitys();
    }

    @Override
    public List<User> findEntitysByHql(String hql, Object[] params) {
        return userDao.findEntitysByHql(hql, params);
    }

    @Override
    public List<User> findEntitysByHql(String hql, List<Object> params) {
        return userDao.findEntitysByHql(hql, params);
    }

    @Override
    public List<User> findEntitysByHql(String hql, Object[] params, int currentPage, int pageSize) {
        return userDao.findEntitysByHql(hql, params,currentPage,pageSize);
    }

    @Override
    public List<User> findEntitysByHql(String hql, List<Object> params, int currentPage, int pageSize) {
        return userDao.findEntitysByHql(hql, params,currentPage,pageSize);
    }

    @Override
    public PageBean<User> page(int currentPage, int pageSize, QueryHelper qh) {
        return userDao.page(currentPage, pageSize, qh);
    }

    @Override
    public Long count() {
        return userDao.count();
    }

    @Override
    public Long count(String hql) {
        return userDao.count(hql);
    }

    @Override
    public Long count(String hql, Object[] params) {
        return userDao.count(hql,params);
    }

    @Override
    public Long count(String hql, List<Object> params) {
        return userDao.count(hql,params);
    }

    @Override
    public List<User> findEntitysByHql(QueryHelper qh) {
        return userDao.findEntitysByHql(qh);
    }

    @Override
    public Long count(QueryHelper qh) {
        return userDao.count(qh);
    }

    @Override
    public Object queryUnique(String hql, Object [] params) {
        return userDao.queryUnique(hql,params);
    }
    
}


八.二 UserServiceImpl 实现类


package com.yjl.service.impl;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.yjl.dao.UserDao;
import com.yjl.pojo.User;
import com.yjl.service.UserService;
import com.yjl.util.PageBean;
import com.yjl.util.QueryHelper;

/**
 @author:yuejl
 @date: 2019年5月22日 下午8:05:15
 @Description 类的相关描述
*/
@Service("userService")
@Transactional
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;
    @Override
    public void addEntity(User t) {
        userDao.addEntity(t);
    }

    @Override
    public void deleteEntity(Serializable id) {
        userDao.deleteEntity(id);
    }

    @Override
    public void updateEntity(User t) {
        userDao.updateEntity(t);
    }

    @Override
    public void saveOrUpdateEntity(User t) {
        userDao.saveOrUpdateEntity(t);
    }

    @Override
    public User getEntityById(Serializable id) {
        return userDao.getEntityById(id);
    }

    @Override
    public User getEntity(String hql, Object[] params) {
        return userDao.getEntity(hql, params);
    }

    @Override
    public User getEntity(String hql, List<Object> params) {
        return userDao.getEntity(hql, params);
    }

    @Override
    public List<User> findEntitysByIds(Serializable[] ids) {
        return userDao.findEntitysByIds(ids);
    }

    @Override
    public List<User> findAllEntitys() {
        return userDao.findAllEntitys();
    }

    @Override
    public List<User> findEntitysByHql(String hql, Object[] params) {
        return userDao.findEntitysByHql(hql, params);
    }

    @Override
    public List<User> findEntitysByHql(String hql, List<Object> params) {
        return userDao.findEntitysByHql(hql, params);
    }

    @Override
    public List<User> findEntitysByHql(String hql, Object[] params, int currentPage, int pageSize) {
        return userDao.findEntitysByHql(hql, params,currentPage,pageSize);
    }

    @Override
    public List<User> findEntitysByHql(String hql, List<Object> params, int currentPage, int pageSize) {
        return userDao.findEntitysByHql(hql, params,currentPage,pageSize);
    }

    @Override
    public PageBean<User> page(int currentPage, int pageSize, QueryHelper qh) {
        return userDao.page(currentPage, pageSize, qh);
    }

    @Override
    public Long count() {
        return userDao.count();
    }

    @Override
    public Long count(String hql) {
        return userDao.count(hql);
    }

    @Override
    public Long count(String hql, Object[] params) {
        return userDao.count(hql,params);
    }

    @Override
    public Long count(String hql, List<Object> params) {
        return userDao.count(hql,params);
    }

    @Override
    public List<User> findEntitysByHql(QueryHelper qh) {
        return userDao.findEntitysByHql(qh);
    }

    @Override
    public Long count(QueryHelper qh) {
        return userDao.count(qh);
    }

    @Override
    public Object queryUnique(String hql, Object [] params) {
        return userDao.queryUnique(hql,params);
    }
    
}


九. User 实现类及其映射配置文件


九.一 User.java


package com.yjl.pojo;
/**
 @author:yuejl
 @date: 2019年4月20日 上午10:06:22
 @Description 类的相关描述
*/
public class User {
    /**
     * @param id 主键编号
     * @param name 姓名
     * @param sex 性别
     * @param age 年龄
     */
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    public User() {
        super();
    }
    public User(Integer id, String name, String sex, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    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 String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age+"]";
    }
}


package com.yjl.pojo;
/**
 @author:yuejl
 @date: 2019年4月20日 上午10:06:22
 @Description 类的相关描述
*/
public class User {
    /**
     * @param id 主键编号
     * @param name 姓名
     * @param sex 性别
     * @param age 年龄
     */
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    public User() {
        super();
    }
    public User(Integer id, String name, String sex, Integer age) {
        super();
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    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 String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age+"]";
    }
}


九.二 User.hbm.xml


<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入相应的约束 -->
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--暂时不介绍具体的标签什么意思-->
<hibernate-mapping package="com.yjl.pojo">
    <!-- 具体的实体类 -->
    <class name="User" table="user">
        <!-- 主键 -->
        <id name="id" column="id">
                    <generator class="native"></generator>
                </id>
        <!-- 其余属性 -->
        <property name="name"></property>
        <property name="sex" ></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>



上一篇:重新初始化RAC的OCR盘和Votedisk盘,修复RAC系统


下一篇:Mysql数据库之Binlog日志使用总结