Spring + Struts + Hibernate 简单封装通用接口

1、BaseDao

public interface BaseDao<T> {
    /**
     * 获取符合条件的记录数
     * @param filter
     * @param sortName
     * @param sortOrder
     * @return int
     */
    public int findCount(String filter, String sortName, String sortOrder);

    /**
     * 获取分页数据
     * @param filter
     * @param sortName
     * @param sortOrder
     * @param startSize
     * @param pageSize
     * @return List<T>
     */
    public List<T> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize);

    /**
     * 添加实体类对象
     * @param entity
     * @return int
     */
    public int add(T entity);

    /**
     * 根据主键获取实体类对象
     * @param id
     * @return T
     */
    public T getById(int id);

    /**
     * 更新实体类对象
     * @param entity
     * @return boolean
     */
    public boolean update(T entity);

    /**
     * 删除实体类对象
     * @param id
     * @return boolean
     */
    public boolean delete(int id);

}

2、BaseDaoImpl

public  class BaseDaoImpl<T> implements BaseDao<T>{

    private Class<T> clazz = null;// 表示当前的类型

    private SessionFactory sessionFactory;
    /**
     * 通过反射技术获得子类T的真实值
     * 由于在子类中首先调用的是父类的构造方法
     */
    @SuppressWarnings("unchecked")
    public BaseDaoImpl(){
        // 获取当前new的对象的泛型的父类类型
         ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
        // 获取第一个类型参数的真实类型
        clazz = (Class<T>) pt.getActualTypeArguments()[0];
    }  

    public Session getSession() {
        return sessionFactory.openSession();
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public int findCount(String filter, String sortName, String sortOrder) {
        Session session=getSession();
        StringBuffer hql=new StringBuffer("");
        hql.append("from ").append(clazz.getSimpleName()).append(" where ").append(filter).append(" order by ").append(sortName).append(" ").append(sortOrder);
        int num=0;
        try{
            Query query = session.createQuery(hql.toString());
            List<T> list=query.list();
            num=list.size();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            session.close();
        }
        return num;
    }

    @Override
    public List<T> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize) {
        Session session=getSession();
        List<T> list=null;
        StringBuffer hql=new StringBuffer("");
        hql.append("from ").append(clazz.getSimpleName()).append(" where ").append(filter).append(" order by ").append(sortName).append(" ").append(sortOrder);
        try{
            Query query =session.createQuery(hql.toString());
            query.setFirstResult(startSize); //设置这一页显示的第一条记录的索引
            query.setMaxResults(pageSize); //这一页显示的记录个数
            list=query.list();
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            session.close();
        }
        return list;
    }

    @Override
    public int add(T entity) {
        int num=0; //标识注册是否成功
        Session session=getSession();
        try{
            Transaction trans=session.beginTransaction();
            num=Integer.parseInt(session.save(entity).toString());//在缓存中保存数据,受影响行数
            trans.commit();//写入数据库表
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            session.close();
        }
        return num;
    }

    @Override
    public T getById(int id) {
        T entity=null;
        Session session=getSession();
        try{
            entity=(T)session.get(clazz,id);
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            session.close();
        }
        return entity;
    }

    @Override
    public boolean update(T entity) {
        boolean flag=false;
        Session session = getSession();
        try{
            Transaction trans=session.beginTransaction();
            session.update(entity);
            trans.commit();
            flag=true;
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            session.close();
        }
        return flag;
    }

    @Override
    public boolean delete(int id) {
        boolean flag=false;
        Session session=getSession();
        try{
            T entity=(T)session.get(clazz,id);
            Transaction trans=session.beginTransaction();
            session.delete(entity);
            trans.commit();
            flag=true;
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            session.close();
        }
        return flag;
    }

}

3、BaseService

public interface BaseService<T> {

    public Map<String,Object> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize);

    public int add(T entity);

    public T getById(int id);

    public boolean update(T entity);

    public boolean delete(int id);

}

4、BaseServiceImpl

public class BaseServiceImpl<T> implements BaseService<T> {

    private BaseDao baseDao;

    public BaseDao getBaseDao() {
        return baseDao;
    }
    public void setBaseDao(BaseDao baseDao) {
        this.baseDao = baseDao;
    }

    @Override
    public Map<String, Object> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize) {
        // TODO Auto-generated method stub
        Map<String,Object> result = new HashMap<String,Object>();
        int total=baseDao.findCount( filter, sortName, sortOrder);
        List<T> rows=baseDao.findGrid(filter, sortName, sortOrder, startSize, pageSize);
        result.put("total",total);
        result.put("rows",rows);
        return result;
    }

    @Override
    public int add(T entity) {
        // TODO Auto-generated method stub
        return baseDao.add(entity);
    }

    @Override
    public T getById(int id) {
        // TODO Auto-generated method stub
        return (T) baseDao.getById(id);
    }

    @Override
    public boolean update(T entity) {
        // TODO Auto-generated method stub
        return baseDao.update(entity);
    }

    @Override
    public boolean delete(int id) {
        // TODO Auto-generated method stub
        return baseDao.delete(id);
    }
}

5、BaseAction

public class BaseAction<T> extends ActionSupport{
    // 取得request对象
    protected HttpServletRequest request = null;
    // 取得response对象
    protected HttpServletResponse response = null;
    //service类对象
    protected BaseService baseService;
    //实体类对象
    protected T entity;
    //主键
    protected int id;
    //主键字符串ids
    protected String ids;
    //每页的记录数
    protected int pageSize;
    //第几页
    protected int pageNumber;
    //排序字段
    protected String sortName;
    //排序方式
    protected String sortOrder;
    //返回结果
    protected Result result=new Result(false, "操作失败");
    //过滤条件
    protected String filter=null;
    //查询字段
    //protected String fieldlist = null;

    public BaseService getBaseService() {
        return baseService;
    }
    public void setBaseService(BaseService baseService) {
        this.baseService = baseService;
    }
    public T getEntity() {
        return entity;
    }
    public void setEntity(T entity) {
        this.entity = entity;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getIds() {
        return ids;
    }
    public void setIds(String ids) {
        this.ids = ids;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getPageNumber() {
        return pageNumber;
    }
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }
    public String getSortName() {
        return sortName;
    }
    public void setSortName(String sortName) {
        this.sortName = sortName;
    }
    public String getSortOrder() {
        return sortOrder;
    }
    public void setSortOrder(String sortOrder) {
        this.sortOrder = sortOrder;
    }    

    protected void grid(){
        int startSize=(pageNumber-1) * pageSize;
        toAjax(baseService.findGrid(filter, sortName, sortOrder, startSize, pageSize));
    }

    protected void save(){
        if(id!=0){
            boolean flag=baseService.update(entity);
            if(flag){
                result.setFlag(true);
                result.setMsg("操作成功");
            }
            toAjax(result);
        }else{
            int i=baseService.add(entity);
            if(i > 0){
                result.setFlag(true);
                result.setMsg("操作成功");
            }
            toAjax(result);
        }
    }

    protected void getById() {
        toAjax(baseService.getById(id));
    }

    protected void delete(){
        String[] array = ids.split(",");
        boolean flag=false;
        for(String id : array){
            flag=baseService.delete(Integer.parseInt(id));
        }
        if(flag){
            result.setFlag(true);
            result.setMsg("操作成功");
        }
        toAjax(result);
    }

    /**
     * 转换成ajax可以接收的数据
     * @param data
     */
    protected void toAjax(Object data) {
        Gson gson= new Gson();
        final String json= gson.toJson(data);
        System.out.println("打印数据:"+json);
        try {
            response = ServletActionContext.getResponse();
            response.setContentType("text/html;charset=UTF-8");
            response.setHeader("cache-control", "no-cache");
            response.setCharacterEncoding("UTF-8");
            response.flushBuffer();
            response.getWriter().write(json);
            response.getWriter().flush();
            response.getWriter().close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

 这是小编的原创随笔,请尊重原创,若是转载请注明出处,谢谢。

时间: 2024-10-27 07:11:09

Spring + Struts + Hibernate 简单封装通用接口的相关文章

Spring+Struts 2 简单实例报空指针异常

空指针出现于Action注入位置..如果一般错误请检查配置文件. 我出的错误.在于拷贝了之前做的实例中的lib文件夹到这个工程中. 其中有个包为struts2-convention-plugin-2.3.16.3.jar 造成了包识别异常.出现空指针.有类似经历的可以查看,也给大家提个醒.不要一气呵成的导入所有包.容易出现混乱.也不利于大家清楚的认识包和代码的联系. Spring+Struts 2 简单实例报空指针异常,布布扣,bubuko.com

Spring+Struts+Hibernate 简介(转)

http://blog.csdn.net/slnqnd/article/details/1772910/ Struts2.0 +Hibernate 3.2 +Spring 2.0 一.        Struts 1.定义 它是使用 servlet 和 JavaServer Pages 技术的一种 Model-View-Controller 实现, 可帮助您控制Web 项目中的变化并提高专业化水平.“模型-视图-控制 器”(MVC) 就是用来帮助您控制变化的一种设计模式.MVC 减弱了业务逻辑接

Spring+SpringMVC+Hibernate简单整合(转)

SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,下面同样做一个简单的应用实例,介绍SpringMVC的基本用法,接下来的博客也将梳理一下Struts2和SpringMVC的一些异同,通过梳理和旧知识的联系,让学习的成本变低,花很短的时间就可以了解一门貌似新的技术,其实本质没变. 原文http://langgufu.iteye.com/blog/2088355 下面开始实例,这个实例的需求是对用户信息进行增删改查.首先创建一个web项目te

Spring与Hibernate整合之通用Dao的实现

在上一篇文章中写了如何直接利用HibernateTemplate进行数据库操作,但在一般的项目中很少直接得到HibernateTemplate的Bean对象从而操作数据库的,下面就简要介绍一下实现通用的数据库操作对象Dao类: 1.最基本的数据库操作接口BaseDao<T>: 1 import java.io.Serializable; 2 import java.util.List; 3 4 public interface BaseDao<T> { 5 6 Serializab

5.Spring+Struts+Hibernate配置文件整合

一:配置文件整合SSH 1.创建Hibernate实体类的映射文件,一般在resource下建文件夹下放置 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hiber

spring+struts+hibernate项目配置

applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.

Spring+Struts+Hibernate框架详解

1.Spring (1)导入Spring核心包 (2)导入struts核心包 (3)导入hibernate核心包 (4)将struts和spring整合还需导入 (5)struts配置文件详解 (6)spring配置文件详解 (7)hibernate配置文件详解 (8)数据库数据配置文件jdbc.properties (9)SSH搭建常报错误解析 1.)mysql和oracle实体类映射文件的配置 2.)报sessionFactory找不到 解决方案:仔细查看实体类映射文件 3.)数据库增删查改

hibernate 简单封装

package com.wode.util; import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory=null; st

用dubbo+zookeeper+spring搭建一个简单的http接口程序

dubbo是一个分布式服务框架,是阿里巴巴开发的一个解决RPC远程调用优化的核心框架,包含负载均衡算法,能提高分布式系统的性能. zookeeper是hadoop的一个子项目,主要用来解决分布式系统的数据一致性.状态同步.服务集群管理.配置同步等一系列的问题.本文使用zookeeper作为dubbo的服务注册中心. 技术细节方面: dubbo:http://www.dubbo.io zookeeper:http://www.ibm.com/developerworks/cn/opensource