service层的抽取和dao层的抽取差不多相同,主要不同点是dao实例化的问题,需要在调用时传入,并在BaseServiceImpl接收。
详细的过程说明请参考dao层的抽取。
dao层的抽取:http://blog.csdn.net/kyle0349/article/details/51914504
package cn.tax.nsfw.user.service;
import java.io.FileInputStream;
import java.io.Serializable;
import java.util.List;
import cn.tax.nsfw.user.entity.User;
public interface UserService {
public void save(User user);//保存
public void delete(User user);//删除用户
public void update(User user);//更新用户
public User findById(Serializable id);//根据主键查找用户
public List<User> getAll();//查看所有
public List<User> findLike(User user);//模糊查询
public User findByName(String userName);//根据用户名查询 保证用户名唯一
}
package cn.tax.nsfw.user.service.impl;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cn.tax.nsfw.user.dao.UserDao;
import cn.tax.nsfw.user.entity.User;
import cn.tax.nsfw.user.service.UserService;
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
public void save(User user) {
userDao.save(user);
}
public void delete(User user) {
userDao.delete(user);
}
public void update(User user) {
userDao.update(user);
}
public User findById(Serializable id) {
return userDao.findById(id);
}
public List<User> getAll() {
return userDao.getAll();
}
public List<User> findLike(User user) {
return userDao.findLike(user);
}
public User findByName(String userName) {
return userDao.findByName(userName);
}
}
package cn.tax.core.service;
import java.io.Serializable;
import java.util.List;
public interface BaseService<T> {
public void save(T entity);// 保存
public void delete(T entity);// 删除用户
public void update(T entity);// 更新用户
public T findById(Serializable id);// 根据主键查找用户
public List<T> getAll();// 查看所有
}
注意:
这里我们需要用到userDao,而在这不能直接实例化userDao,
所以需要加一个set方法,在调用service层的时候,把userDao传进来
用BaseDao接收userDao是没问题的。
package cn.tax.core.service.impl;
import java.io.Serializable;
import java.util.List;
import cn.tax.core.dao.BaseDao;
import cn.tax.core.service.BaseService;
public class BaseServiceImpl<T> implements BaseService<T> {
private BaseDao<T> baseDao;
public void setBaseDao(BaseDao<T> baseDao) {
this.baseDao = baseDao;
}
public void save(T entity) {
baseDao.save(entity);
}
public void delete(T entity) {
baseDao.delete(entity);
}
public void update(T entity) {
baseDao.update(entity);
}
public T findById(Serializable id) {
return baseDao.findById(id);
}
public List<T> getAll() {
return baseDao.getAll();
}
}
可以把BaseService中有的方法在UserService注释掉(删除)
package cn.tax.nsfw.user.service;
import java.io.FileInputStream;
import java.io.Serializable;
import java.util.List;
import cn.tax.core.service.BaseService;
import cn.tax.nsfw.user.entity.User;
public interface UserService extends BaseService<User> {
/*public void save(User user);//保存
public void delete(User user);//删除用户
public void update(User user);//更新用户
public User findById(Serializable id);//根据主键查找用户
public List<User> getAll();//查看所有
*/
//以下两个方法是根据业务需要新增的方法,
//可以看到抽取完BaseService后,service层只剩下新增的业务,比较简洁
public List<User> findLike(User user);//模糊查询
public User findByName(String userName);//根据用户名查询 保证用户名唯一
}
同样可以把BaseServiceImpl中有的方法在UserServiceImpl中注释掉(删除)
注意:
package cn.tax.nsfw.user.service.impl;
import java.io.FileInputStream;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cn.tax.core.service.impl.BaseServiceImpl;
import cn.tax.nsfw.user.dao.UserDao;
import cn.tax.nsfw.user.entity.User;
import cn.tax.nsfw.user.service.UserService;
@Service("userService")
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
private UserDao userDao;
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
super.setBaseDao(userDao);
}
/*public void save(User user) {
userDao.save(user);
}
public void delete(User user) {
userDao.delete(user);
}
public void update(User user) {
userDao.update(user);
}
public User findById(Serializable id) {
return userDao.findById(id);
}
public List<User> getAll() {
return userDao.getAll();
}*/
public List<User> findLike(User user) {
return userDao.findLike(user);
}
public User findByName(String userName) {
return userDao.findByName(userName);
}
}