在一个项目中,通常需要对不同的对象(实体)进行增加、删除、修改、查询操作。如果在每个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>