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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章