Struts2+hibernate+spring中Service層代碼提取

在一個項目中,通常需要對不同的對象(實體)進行增加、刪除、修改、查詢操作。如果在每個Service中編寫方法去實現,會發現它們極其相似,只是操作對象不同而已,如果能夠把它們提取出來作爲一個基類,代碼會簡潔很多。
代碼:

基類接口:
package com.dx.service;

import java.util.List;

public interface BaseService<T> {

    /**
     * 保存
     * @param t
     */
    public void save(T t);

    /**
     * 刪除
     * @param id
     */
    public void delete(int id);

    /**
     * 更新
     * @param t
     */
    public void update(T t);

    /**
     * 查詢
     * @param id
     * @return
     */
    public T fetch(int id);

    /**
     * 查詢全部
     * @return
     */
    public List<T> queryAll();
}

基類實現:
package com.dx.impl;

import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;

import com.dx.service.BaseService;

@SuppressWarnings("unchecked")
public class BaseServiceImpl<T> implements BaseService<T> {

    protected HibernateTemplate hibernateTemplate;
    private Class<T> clazz;

    @SuppressWarnings("rawtypes")
    public BaseServiceImpl(){
        ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
        clazz = (Class)type.getActualTypeArguments()[0];
    }
    public void setHibernateTemplate(HibernateTemplate hibernamteTemplate){
        this.hibernateTemplate = hibernamteTemplate;
    }

    @Override
    public void save(T t) {
        hibernateTemplate.save(t);
    }

    @Override
    public void delete(int id) {
        List<T> l = hibernateTemplate.find("from "+ clazz.getSimpleName() +" where id ="+id);
        if(l != null){
            hibernateTemplate.delete(l.get(0));
        }
    }

    @Override
    public void update(T t) {
        hibernateTemplate.update(t);
    }

    @Override
    public T fetch(int id) {
        List<T> l = hibernateTemplate.find("from "+ clazz.getSimpleName() +" where id ="+id);
        return  l.get(0);
    }

    @Override
    public List<T> queryAll() {
        List<T> l = hibernateTemplate.find("from "+ clazz.getSimpleName());
        return l;
    }
}

具體業務接口(擴展特有業務接口)
package com.dx.service;

import java.util.List;

import com.dx.pojo.User;

public interface UserService extends BaseService<User>{
    /**
     * 通過用戶姓名查詢
     * @param uname
     * @return
     */
    public List<User> queryByName(String uname);

}

業務實現:
package com.dx.impl;

import java.util.List;

import com.dx.pojo.User;
import com.dx.service.UserService;

@SuppressWarnings("unchecked")
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService{

    public List<User> queryByName(String uname){
        List<User> l = hibernateTemplate.find("from User where name like '%"+uname+"%'");
        return l;
    }

}

spring配置:

<bean id="userService" class="com.dx.impl.UserServiceImpl" parent="baseService"></bean>

    <bean id="baseService" class="com.dx.impl.BaseServiceImpl" lazy-init="true">
        <property name="hibernateTemplate" ref="hibernateTemplate"></property>
    </bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章