1. 程式人生 > >整合SpringMVC框架+Mybatis框架開發人力資源管理系統(七)

整合SpringMVC框架+Mybatis框架開發人力資源管理系統(七)

實現業務邏輯介面HrmService

業務邏輯介面HrmService中定義了系統功能實現所需要呼叫的方法,HrmServiceImpl類實現了該介面,對每個方法的方法體進行了具體實現:

package org.fkit.hrm.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.fkit.hrm.dao.DeptDao;
import org.fkit.hrm.dao.DocumentDao;
import org.fkit.hrm.dao.EmployeeDao;
import org.fkit.hrm.dao.JobDao;
import org.fkit.hrm.dao.NoticeDao;
import org.fkit.hrm.dao.UserDao;
import org.fkit.hrm.domain.Dept;
import org.fkit.hrm.domain.Document;
import org.fkit.hrm.domain.Employee;
import org.fkit.hrm.domain.Job;
import org.fkit.hrm.domain.Notice;
import org.fkit.hrm.domain.User;
import org.fkit.hrm.service.HrmService;
import org.fkit.hrm.util.tag.PageModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * 人事管理系統服務層介面實現類
 * @author luliangchang
 *
 */
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)
@Service("hrmService")
public class HrmServiceImpl implements HrmService {
	/*
	 * 自動注入持久層dao物件
	 */
	@Autowired
	private UserDao userDao;
	@Autowired
	private DeptDao deptDao;
	@Autowired
	private DocumentDao documentDao;
	@Autowired
	private EmployeeDao employeeDao;
	@Autowired
	private JobDao jobDao;
	@Autowired
	private NoticeDao noticeDao;
	
	/*******************使用者服務層介面實現************/
	//實現HrmService介面的login方法
	@Transactional(readOnly=true)
	@Override
	public User login(String loginName,String password){
		System.out.println("呼叫HrmServiceImpl類方法login -->");
		System.out.println(loginName);
		System.out.println(password);
		return userDao.selectUserByLoginnameAndPassword(loginName, password);
	}
	//實現HrmService介面的selectUserById方法
	@Transactional(readOnly=true)
	@Override
	public User selectUserById(Integer id){
		return userDao.selectUserById(id);
	}
	//實現HrmService介面的selectUser方法
	@Transactional(readOnly=true)
	public List<User> selectUser(User user,PageModel pageModel){
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("user", user);
		int recordCount=userDao.count(params);
		System.out.println("呼叫HrmServiceImpl類方法selecctAllUser -->");
		System.out.println(pageModel.getPageIndex());
		System.out.println(pageModel.firstLimitParam);
		//設定記錄總數,從而可以計算出totalSize,繼而計算出實際的pageIndex
		pageModel.setRecordCount(recordCount);
		//更新pageIndex
		pageModel.updatePageIndex();
		//更新記錄查詢位置
		pageModel.setFirstLimitParam();
		if(recordCount>0){
			/**開始分頁查詢資料:查詢第幾頁的資料**/
			params.put("pageModel", pageModel);
		}
		List<User> users=userDao.selectByPage(params);
		return users;
	}
	//實現HrmService介面的deleteUser方法
	@Transactional(readOnly=true)
	@Override
	public void deleteUser(Integer id){
		userDao.deleteById(id);
	}
	//實現HrmService介面的insertUser方法
	@Transactional(readOnly=true)
	@Override
	public void insertUser(User user){
		userDao.save(user);
	}
	//實現HrmService介面的updateUser方法
	@Transactional(readOnly=true)
	@Override
	public void updateUser(User user){
		userDao.update(user);
	}
	//實現HrmService介面的selectUserByUserName方法
	@Transactional(readOnly=true)
	@Override
	public User selectUserByUserName(String userName){
		User user=userDao.selectUserByUserName(userName);
		return user;
	}
	/*******部門服務層介面實現******/
	//實現HrmService介面的selectById方法
	@Transactional(readOnly=true)
	@Override
	public Dept selectDeptById(Integer id){
		return deptDao.selectById(id);
	}
	//實現HrmService介面的selectAll方法
	@Transactional(readOnly=true)
	@Override
	public List<Dept> selectDept(Dept dept,PageModel pageModel){
		//當前需要分頁的總記錄數
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("dept", dept);
		int recordCount=deptDao.count(params);
		System.out.println("呼叫HrmServiceImpl方法selectAll-->");
		//設定記錄總數,從而可以計算出totalSize,繼而計算出實際的pageIndex
		pageModel.setRecordCount(recordCount);
		//更新pageIndex
		pageModel.updatePageIndex();
		//更新記錄查詢位置
		pageModel.setFirstLimitParam();
		if(recordCount>0){
			/**開始分頁查詢資料,查詢第幾頁資料**/
			params.put("pageModel", pageModel);
		}
		List<Dept> depts=deptDao.selectByPage(params);
		return depts;
	}
	//實現HrmService介面的deleteDept方法
	@Transactional(readOnly=true)
	@Override
	public void deleteDept(Integer id){
		deptDao.deleteById(id);
	}
	//實現HrmService介面的insertDept方法
	@Transactional(readOnly=true)
	@Override
	public void insertDept(Dept dept){
		deptDao.save(dept);
	}
	//實現HrmService介面的updateDept方法
	@Transactional(readOnly=true)
	public void updateDept(Dept dept){
		deptDao.update(dept);
	}
	//實現HrmService介面的selectDeptByDeptName方法
	@Transactional(readOnly=true)
	public Dept selectDeptByDeptName(String deptName){
		Dept dept=deptDao.selectDeptByDeptName(deptName);
		return dept;
	}
	/*******員工服務層介面實現******/
	//實現HrmService介面的selectEmployee方法
	@Transactional(readOnly=true)
	@Override
	public List<Employee> selectEmployee(Employee employee,PageModel pageModel){
		/**當前需要分頁的總資料條數**/
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("employee", employee);
		int recordCount=employeeDao.count(params);
		System.out.println("呼叫HrmServieImpl方法selectEmployee-->");
		pageModel.setRecordCount(recordCount);
		pageModel.updatePageIndex();
		pageModel.setFirstLimitParam();
		if(recordCount>0){
			params.put("pageModel",pageModel);
		}
		List<Employee> employees=employeeDao.selectByPage(params);
		return employees;
	}
	//實現HrmService介面的selectEmployeeById方法
	@Transactional(readOnly=true)
	@Override
	public Employee selectEmployeeById(Integer id){
		return employeeDao.selectById(id);
	}
	//實現HrmService介面的insetEmployee方法
	@Transactional(readOnly=true)
	@Override
	public void insertEmployee(Employee employee){
	    employeeDao.insertEmployee(employee);
	}
	//實現HrmService介面的updateEmployee方法
	@Transactional(readOnly=true)
	public void updateEmployee(Employee employee){
		employeeDao.updateEmployee(employee);
	}
	//實現HrmService介面的deleteEmployee方法
	@Transactional(readOnly=true)
	@Override
	public void deleteEmployee(Integer id){
		employeeDao.deleteById(id);
	}
	/******職位服務層介面實現******/
	//實現HrmService介面的selectAllJob方法
	@Transactional(readOnly=true)
	@Override
	public List<Job> selectAllJob(){
		return jobDao.selectAllJob();
	}
	//實現HrmService介面的selectJob方法
	@Transactional(readOnly=true)
	@Override
	public List<Job> selectJob(Job job,PageModel pageModel){
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("job",job);
		int recordCount=jobDao.count(params);
		System.out.println("呼叫HrmServiceImpl類方法selectJob-->");
		//設定記錄總數,從而可以計算出totalSize,繼而計算出實際的pageIndex
		pageModel.setRecordCount(recordCount);
		//更新pageIndex
		pageModel.updatePageIndex();
		//更新記錄查詢位置
		pageModel.setFirstLimitParam();
		if(recordCount>0){
			params.put("pageModel", pageModel);
		}
		List<Job> jobs=jobDao.selectByPage(params);
		return jobs;
	}
	//實現HrmService介面的selectJobById方法
	@Transactional(readOnly=true)
	@Override
	public Job selectJobById(Integer id){
		return jobDao.selectById(id);
	}
	//實現HrmService介面的updateJob方法
	@Transactional(readOnly=true)
	public void updateJob(Job job){
		jobDao.update(job);
	}
	//實現HrmService介面的insertJob方法
	@Transactional(readOnly=true)
	@Override
	public void insertJob(Job job){
		jobDao.save(job);
	}
	//實現HrmService介面的deleteJob方法
	@Transactional(readOnly=true)
	@Override
	public void deleteJob(Integer id){
		jobDao.deleteById(id);
	}
	//實現HrmService介面的selectJobByJobName方法
	@Transactional(readOnly=true)
	public Job selectJobByJobName(String jobName){
		Job job=jobDao.selectJobByJobName(jobName);
		return job;
	}
	
	@Override
	public void deleteDocument(Integer id) {
		documentDao.deleteNotice(id);
	}
	@Override
	public void deleteNotice(Integer id) {
		noticeDao.deleteNotice(id);
	}
	@Override
	public void insertDocument(Document document) {
		documentDao.insert(document);
	}
	@Override
	public void insertNotice(Notice notice) {
		noticeDao.insertNotice(notice);
	}
	@Override
	public List<Dept> selectAll() {
		return deptDao.selectAll(); 
	}
	@Override
	public List<Document> selectDocument(Document document, PageModel pageModel) {
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("document", document);
		int recordCount=documentDao.count(params);
		System.out.println("呼叫HrmServiceImpl類方法selectDocuemnt-->");
		//設定記錄總數,從而可以計算出totalSize,繼而計算出實際的pageIndex
		pageModel.setRecordCount(recordCount);
		//更新pageIndex
		pageModel.updatePageIndex();
		//更新記錄查詢位置
		pageModel.setFirstLimitParam();
		if(recordCount>0){
			params.put("pageModel", pageModel);
		}
		List<Document> documents=documentDao.selectWhitParam(params);
		return documents;
	}
	@Override
	public Document selectDovumentById(Integer id) {
		return documentDao.selectDocument(id);
	}
	@Override
	public List<Notice> selectNotice(Notice notice, PageModel pageModel) {
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("notice", notice);
		int recordCount=noticeDao.count(params);
		System.out.println("呼叫HrmServiceImpl類方法selectNotice-->");
		//設定記錄總數,從而可以計算出totalSize,繼而計算出實際的pageIndex
		pageModel.setRecordCount(recordCount);
		//更新pageIndex
		pageModel.updatePageIndex();
		//更新記錄查詢位置
		pageModel.setFirstLimitParam();
		if(recordCount>0){
			params.put("pageModel", pageModel);
		}
		List<Notice> notices=noticeDao.selectByPage(params);
		return notices;
	}
	@Override
	public Notice selectNoticeById(Integer id) {
		return noticeDao.selectById(id);
	}
	@Override
	public void updateDocument(Document document) {
		documentDao.update(document);
	}
	@Override
	public void updateNotice(Notice notice) {
		noticeDao.updateNoctice(notice);
	}
}

該類是對HrmService介面的具體實現,每個方法通過呼叫DAO元件來實現具體系統的具體功能。業務邏輯元件與DAO元件通過Spring框架的依賴注入與IOC緊密連線在一起,去除了過去那種複雜、繁瑣的過程。
對其中幾個地方稍作解釋:


    @Service("hrmService")

@Service註解的作用是將此類註釋成為Spring的Bean,它與applicationContext.xml檔案中的下列內容配合使用。

<!-- 掃描org.fkit.包下的java檔案,若有Spring的相關注解的類,則把這些類註冊為Spring的bean -->
<context:component-scan base-package="org.fkit.hrm"/>

這種依賴注入的思維使得在Controller中對業務邏輯元件進行使用之前只需要自動注入該bean即可。

/**
 * 自動注入hrmService
 */
@Autowired
@Qualifier("hrmService")
private HrmService hrmService

同樣的在HrmServiceImpl類中也有針對DAO元件的自動注入,即

/*
	 * 自動注入持久層dao物件
	 */
	@Autowired
	private UserDao userDao;
	@Autowired
	private DeptDao deptDao;
	@Autowired
	private DocumentDao documentDao;
	@Autowired
	private EmployeeDao employeeDao;
	@Autowired
	private JobDao jobDao;
	@Autowired
	private NoticeDao noticeDao;