码迷,mamicode.com
首页 > 编程语言 > 详细

基于Spring和hibernate的web项目分层设计

时间:2015-09-06 13:09:02      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

//接口层:包括dao接口和业务逻辑接口

package com.genericdao.intf;

import java.util.List;

/**
 * 泛型接口,封装了通用的操作数据库的方法,被 dao 基类实现
 * @author lin
 *
 * @param <T>
 */
public interface BaseDao<T> {
    
    /**
     * 增加
     * @param t
     */
    public void create(T t);
    
    /**
     * 根据id查询
     * @param id
     * @return
     */
    public T read(Integer id);
    
    /**
     * 更新
     * @param t
     */
    public void update(T t);
    
    /**
     * 删除
     * @param t
     */
    public void delete(T t);
    
    /**
     * 根据id删除
     * @param id
     */
    public void delete(Integer id);
    
    /**
     * 查询全部
     * @return
     */
    public List<T> listAll();
    
    /**
     * 条件查询
     * @param hql
     * @param parameters
     * @return
     */
    public List<T> listAll(String hql,Object... parameters);

}


//专门为 User 类写一个接口
package com.genericdao.intf;

import com.genericdao.pojo.User;

public interface UserDao extends BaseDao<User> {
    
    /**
     * 该实体 dao 所特有方法,根据实际情况添加,在实际情况中user需要更多新的操作database的方法时可以修改这个接口
     */
    
    public User findByName(String name);

}

//业务接口
package com.genericdao.intf;

import java.util.List;

/**
 * 业务接口,被业务层基类实现
 * @author lin
 *
 * @param <T>
 */
public interface BaseService<T> {
    
    /**
     * 增加
     * @param t
     */
    public void add(T t);
    
    /**
     * 根据id删除一个实体
     * @param id
     */
    public void delete(Integer id);
    
    /**
     * 更新
     * @param t
     */
    public void update(T t);
    
    /**
     * 根据id 查询并返回一个实体
     * @param id
     * @return
     */
    public T get(Integer id);
    
    /**
     * 获取全部
     * @return
     */
    public List<T> getAll();
    
    /**
     * 条件查询
     * @param hqlExpression hql语句
     * @param parameters 查询参数
     * @return 符合查询条件的实体集合
     */
    public List<T> getAll(String hqlExpression,Object... parameters);

}


//专门为 User 类的业务组件写一个接口,该接口继承自 BaseService 接口
package com.genericdao.intf;

import com.genericdao.pojo.User;

/**
 * 
 * @author lin
 *
 */
public interface UserService extends BaseService<User> {
    
    /**
     * 添加user业务组件的特有方法
     */
    public User findByName(String name);

}





//dao层,实现dao接口
package com.genericdao.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.genericdao.intf.BaseDao;

/**
 * dao 基类,实现通用 dao 接口,被实体 dao 类继承
 * @author lin
 *
 * @param <T>
 */
public class BaseDaoImpl<T> implements BaseDao<T> {
    
    /**
     * 用于确定具体实体 dao 的泛型实际类型
     */
    private Class<T> type;
    
    /**
     *由 Spring 注入sessionfactory
     */
    private SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

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

    public Class<T> getType() {
        return type;
    }

    public void setType(Class<T> type) {
        this.type = type;
    }

    @Override
    public void create(T t) {
        
        if(t != null)
        {
            Session session = sessionFactory.getCurrentSession();
            
            session.save(t);
        }
        
    }

    @Override
    public T read(Integer id) {
        
        if(id != null)
        {
            Session session = sessionFactory.getCurrentSession();
            
            return (T) session.get(type, id);
        }
        
        return null;
    }

    @Override
    public void update(T t) {
        
        if(t != null)
        {
            Session session = sessionFactory.getCurrentSession();
            
            session.update(t);
        }
        
    }

    @Override
    public void delete(T t) {
        
        if(t != null)
        {
            Session session = sessionFactory.getCurrentSession();
            
            session.delete(t);
        }
        
    }
    
    @Override
    public void delete(Integer id)
    {
        if(id != null)
        {
            this.delete(this.read(id));
        }
    }

    @Override
    public List<T> listAll() {
        
        Session session = sessionFactory.getCurrentSession();
        
        Criteria criteria = session.createCriteria(type);
        
        List<T> list = criteria.list();
        
        return list;
    }
    
    @Override
    public List<T> listAll(String hql, Object... parameters) {
        
        if(hql != null && !hql.equals("") && parameters.length != 0)
        {
            Session session = sessionFactory.getCurrentSession();
            
            Query query = session.createQuery(hql);
            
            for(int i = 0;i<parameters.length;i++)
            {
                query.setParameter(i, parameters[i]);
            }
            
            return query.list();
        }
        
        return null;
    }

}


//user dao
package com.genericdao.dao;


import com.genericdao.intf.UserDao;
import com.genericdao.pojo.User;

/**
 * 具体实体类的dao
 * @author lin
 *
 */
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
    
    

    @Override
    public User findByName(String name) {
        
        //Session session = this.getSessionFactory().getCurrentSession();
        
        return null;
    }

}


//业务逻辑层,实现service接口
package com.genericdao.service;

import java.util.List;

import com.genericdao.intf.BaseDao;
import com.genericdao.intf.BaseService;

/**
 * 业务层基类,被具体业务组件继承
 * @author lin
 *
 * @param <T>
 */
public class BaseServiceImpl<T> implements BaseService<T> {
    
    /**
     * 注入dao
     */
    private BaseDao<T> baseDao;

    public BaseDao<T> getBaseDao() {
        return baseDao;
    }

    public void setBaseDao(BaseDao<T> baseDao) {
        this.baseDao = baseDao;
    }

    @Override
    public void add(T t) {
        
        if(t != null)
        {
            baseDao.create(t);
        }
        
    }

    @Override
    public void delete(Integer id) {
        
        if(id != null)
        {
            baseDao.delete(id);
        }
        
    }

    @Override
    public void update(T t) {
        
        if(t != null)
        {
            baseDao.update(t);
        }
        
    }

    @Override
    public T get(Integer id) {
        
        if(id != null)
        {
            return baseDao.read(id);
        }
        
        return null;
    }

    @Override
    public List<T> getAll() {
        
        return baseDao.listAll();
    }

    @Override
    public List<T> getAll(String hqlExpression, Object... parameters) {
        
        return baseDao.listAll(hqlExpression, parameters);
    }

}


//user 的业务逻辑组件
package com.genericdao.service;

import com.genericdao.intf.UserDao;
import com.genericdao.intf.UserService;
import com.genericdao.pojo.User;

/**
 * 
 * @author lin
 *
 */
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
    
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public User findByName(String name) {
        
        userDao.findByName("JeanseLam");
        
        return null;
    }

}



最后放出项目的目录结构截图,我这里使用maven构建项目。

技术分享

基于Spring和hibernate的web项目分层设计

标签:

原文地址:http://my.oschina.net/u/2328736/blog/501635

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!