虚拟数据层:Struts2、Hibernate、Spring整合的泛型DAO
来源:互联网 发布:程序员打字都是盲打吗 编辑:程序博客网 时间:2024/05/21 19:41
Person.java:
package com.yong.entity;
import org.apache.poi.hssf.model.Model;
public class Person implements Model
{
private Integer id;
private String name;
private int 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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Person.hbm.xml:
<?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">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.yong.entity.Person" table="Person" lazy="false">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" type="java.lang.String" column="name" length="20" />
<property name="age" type="java.lang.Integer" column="age" />
</class>
</hibernate-mapping>
GenericDao:
package org.csdn.dao;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
public interface GenericDao<T,ID extends Serializable>
{
/**
* 在查找所有记录的时候,使用提供查询语句,查询匹配的记录,否则将使用默认的查询语句查询数据的所有记录.
*
* @param hql : 自定义的HQL语句
*/
public void setHql(String hql);
/**
*
* @return 自定义的HQL语句
*/
public String getHql();
/**
* 保存实体
*
* @param entity :
* 实体
* @return 保存后得到的id
*/
public ID save(T entity);
/**
* <p>
* 删除实体
* </p>
*
* @param entity :
* 实体
*/
public void remove(T entity);
/**
* <p>
* 删除实体集合
* </p>
*
* @param entities :
* 实体
*/
public void removeAll(Collection<T> entities);
/**
* <p>
* 修改实体
* </p>
*
* @param entity :
* 实体
*/
public void modify(T entity);
/**
* <p>
* 通过名字查找
* </p>
*
* @param id :
* id
* @return 找到的实体
*/
public T findById(ID id);
/**
* <p/>
* 查找全部实体
* <p/>
*
* @return 所有实体的列表
*/
public List<T> findAll();
/**
* <p>
* 计算匹配查询条件的记录总数,如果没有注入或者设置hql语句,将使用默认的查询语句返回数据库中所有记录
* </p>
*
* @return 记录总数
*/
public int getTotalRows();
/**
* <p>
* 根据每页记录的数量,计算出总的分页数
* </p>
*
* @param size 每页记录的数量
* @return 分页总数
*/
public int getPageSize(int size);
/**
* <p/>
* 根据给定的页码进行分页查找,这是纯Hibernate分页.
* <p/>
*
* @param page : 要查询的页码
*
* @param size : 每页记录数
*
* @return 匹配的实体列表
*/
public List<T> findByPage(final int page,final int size);
}
GenericDaoImpl:
package org.csdn.dao.impl;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import org.csdn.dao.GenericDao;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
public class GenericDaoImpl<T,ID extends Serializable> implements GenericDao<T,ID> {
// 具体的实体类型
private Class<T> type;
// Spring提供的Hibernate工具类
private HibernateTemplate hibernateTemplate;
// 查询条件
private String hql;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
/**
* <p>
* 必须提供的构造方法,以便创建实例的时候就知道具体实体的类型
* <p>
*
* @param type :
* 实体类型
*/
public GenericDaoImpl(Class<T> type)
{
this.type = type;
this.hql = "from " + type.getName();
}
public GenericDaoImpl(HibernateTemplate hibernateTemplate)
{
this.hibernateTemplate = hibernateTemplate;
}
public List<T> findAll() {
// TODO Auto-generated method stub
return hibernateTemplate.find(hql);
}
public T findById(ID id) {
// TODO Auto-generated method stub
return (T) hibernateTemplate.get(type, id);
}
public List<T> findByPage(final int page,final int size) {
// TODO Auto-generated method stub
final int pageSize = this.getPageSize(size);
final int totalRows = this.getTotalRows();
return hibernateTemplate.executeFind(new HibernateCallback(){
public List<T> doInHibernate(Session session)
throws HibernateException, SQLException{
//实际页码
int actualPage = (page > pageSize)?pageSize:page;
// 计算实际每页的条数,如果请求的每页数据条数大于总条数, 则等于总条数
int actualSize = (size > totalRows)?totalRows:size;
// 计算请求页码的第一条记录的索引值
int stateRow = (actualPage > 0)?(actualPage - 1)*actualSize : 0;
Query query = session.createQuery(hql);
// 设置第一条记录
query.setFirstResult(stateRow);
query.setMaxResults(actualSize);
return query.list();
}
});
}
public String getHql() {
// TODO Auto-generated method stub
return hql;
}
public int getPageSize(int size) {
// TODO Auto-generated method stub
//最大页数
int pageSize;
//每页数据条数
int actualSize;
//总记录数
int totalRows = this.getTotalRows();
// 计算实际每页的条数,如果请求的每页数据条数大于总条数, 则等于总条数
actualSize = (size > totalRows)?totalRows:size;
if(totalRows > 0)
{
pageSize = (totalRows % size == 0)?(totalRows / size):(totalRows / size + 1);
}
else
{
pageSize = 0;
}
return pageSize;
}
public int getTotalRows() {
// TODO Auto-generated method stub
String acHql = "select count(*) " + hql;
return ((Long)hibernateTemplate.find(acHql).get(0)).intValue();
}
public void modify(T entity) {
// TODO Auto-generated method stub
hibernateTemplate.update(entity);
}
public void remove(Object entity) {
// TODO Auto-generated method stub
hibernateTemplate.delete(entity);
}
public void removeAll(Collection<T> entities) {
// TODO Auto-generated method stub
hibernateTemplate.deleteAll(entities);
}
public ID save(T entity) {
// TODO Auto-generated method stub
return (ID) hibernateTemplate.save(entity);
}
public void setHql(String hql) {
// TODO Auto-generated method stub
this.hql = hql;
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
}
GenericBiz:
package org.csdn.biz;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
public interface GenericBiz<T,ID extends Serializable>
{
/**
* 获取实体
*
* @param entity:
* 实体
*/
public void setP(Class p);
/**
* 保存实体
*
* @param entity :
* 实体
* @return 保存后得到的id
*/
public ID save(T entity);
/**
* <p>
* 删除实体
* </p>
*
* @param entity :
* 实体
*/
public void remove(T entity);
/**
* <p>
* 删除实体集合
* </p>
*
* @param entities :
* 实体
*/
public void removeAll(Collection<T> entities);
/**
* <p>
* 修改实体
* </p>
*
* @param entity :
* 实体
*/
public void modify(T entity);
/**
* <p>
* 通过名字查找
* </p>
*
* @param id :
* id
* @return 找到的实体
*/
public T findById(ID id);
/**
* <p/>
* 查找全部实体
* <p/>
*
* @return 所有实体的列表
*/
public List<T> findAll();
/**
* <p>
* 计算匹配查询条件的记录总数,如果没有注入或者设置hql语句,将使用默认的查询语句返回数据库中所有记录
* </p>
*
* @return 记录总数
*/
public int getTotalRows();
/**
* <p>
* 根据每页记录的数量,计算出总的分页数
* </p>
*
* @param size 每页记录的数量
* @return 分页总数
*/
public int getPageSize(int size);
/**
* <p/>
* 根据给定的页码进行分页查找,这是纯Hibernate分页.
* <p/>
*
* @param page : 要查询的页码
*
* @param size : 每页记录数
*
* @return 匹配的实体列表
*/
public List<T> findByPage(final int page,final int size);
}
GenericBizImpl:
package org.csdn.biz.impl;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import org.csdn.biz.GenericBiz;
import org.csdn.dao.GenericDao;
import com.yong.entity.Person;
public class GenericBizImpl<T,ID extends Serializable> implements GenericBiz<T,ID> {
private GenericDao<T, ID> genericDao;
private Class p;
public Class getP() {
return p;
}
public void setP(Class p) {
this.p = p;
}
public List<T> findAll() {
// TODO Auto-generated method stub
genericDao.setHql("from " + p.getName());
return genericDao.findAll();
}
public T findById(ID id) {
// TODO Auto-generated method stub
return genericDao.findById(id);
}
public List<T> findByPage(final int page,final int size) {
// TODO Auto-generated method stub
return genericDao.findByPage(page, size);
}
public int getPageSize(int size) {
// TODO Auto-generated method stub
return genericDao.getPageSize(size);
}
public int getTotalRows() {
// TODO Auto-generated method stub
return genericDao.getTotalRows();
}
public void modify(T entity) {
// TODO Auto-generated method stub
genericDao.modify(entity);
}
public void remove(T entity) {
// TODO Auto-generated method stub
genericDao.remove(entity);
}
public void removeAll(Collection<T> entities) {
// TODO Auto-generated method stub
genericDao.removeAll(entities);
}
public ID save(T entity) {
// TODO Auto-generated method stub
return genericDao.save(entity);
}
public void setGenericDao(GenericDao<T, ID> genericDao) {
this.genericDao = genericDao;
}
}
- 虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27
- 虚拟数据层:Struts2、Hibernate、Spring整合的泛型DAO
- Struts2、Hibernate、Spring整合的泛型DAO,以及通用的分页技术
- Struts2、Hibernate、Spring整合的泛型DAO,以及通用的分页技术
- Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27
- Struts2+Spring+Hibernate step by step 03 整合Spring之一(在DAO层验证用户名和密码)
- SSH整合(spingmvc,spring,hibernate)以及Dao层抽取方法
- 新版本中spring与hibernate整合dao层调用session的方法
- struts2 spring hibernate的整合
- struts2+hibernate+spring的整合
- Struts2+Spring+Hibernate的整合
- Struts2+Spring+Hibernate的整合
- hibernate的dao层
- struts2+hibernate+spring整合
- struts2 spring hibernate 整合
- Spring struts2 hibernate 整合
- struts2+spring+hibernate整合
- struts2+spring+hibernate整合
- 10天学会wordpress主题开发系列(footer.php)
- TERMIOS_H 详细注释
- Linux之父Linus Torvalds:C++一无是处
- Visual Studio 2010 TFS探索之旅
- AT命令介绍
- 虚拟数据层:Struts2、Hibernate、Spring整合的泛型DAO
- Linux下C语言编程-基础知识
- Linux下C语言编程-基础知识
- 在Word 2007中轻松插入或创建表格
- 数字证书与私钥
- SQLServer远程连接配置
- QtEmbedded软键盘输入法实战(附例子)
- 技术点滴(一)
- 一些百度答案