在一個項目中,通常需要對不同的對象(實體)進行增加、刪除、修改、查詢操作。如果在每個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>