五. 分页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>