Java DAO模式 业务层实现类

本博客根据《李兴华--java8编程开发入门》视频整理而来。

业务层实现类的核心功能:

(1) 负责控制数据库的打开和关闭,当存在了业务层对象后其目的就是为了操作数据库,即:业务层对象实例化之后就必须准备好数据库连接;

(2)根据DAOFactory调用getIEmpDAOInstance()方法而后取得IEmpDAO接口对象。

业务层的实现类保存在impl子包中。

范例:定义EmpServiceImpl子类

package com.fs.dao.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.fs.dbc.DatabaseConnection;
import com.fs.factory.DAOFactory;
import com.fs.service.IEmpService;
import com.fs.vo.Emp;

public class EmpServiceImpl implements IEmpService {
	// 在这个类的对象内部就提供有一个数据库连接类的实例化对象
	// 一但调用了DatabaseConnection,其就会进行数据库连接
	private DatabaseConnection dbc = new DatabaseConnection();

	// 在进行insert过程中可能产生异常,但不管怎样,最后一定要关闭数据库,所以使用异常处理
	@Override
	public boolean insert(Emp vo) throws Exception {
		try {
			if (DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findById(vo.getEmpno()) == null) {
				return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doCreate(vo);
			}
			return false; // 已经存在就返回false
		} catch (Exception e) {
			throw e; // 如果有问题,就直接向上抛
		} finally {
			this.dbc.close();
		}
	}

	@Override
	public boolean update(Emp vo) throws Exception {
		try {
			return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doCreate(vo);
		} catch (Exception e) {
			throw e; // 如果有问题,就直接向上抛
		} finally {
			this.dbc.close();
		}
	}

	@Override
	public boolean delete(Set<Integer> ids) throws Exception {
		try {
			return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).doRemoveBatch(ids);
		} catch (Exception e) {
			throw e; // 如果有问题,就直接向上抛
		} finally {
			this.dbc.close();
		}
	}

	@Override
	public Emp get(int ids) throws Exception {
		try {
			return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findById(ids);
		} catch (Exception e) {
			throw e; // 如果有问题,就直接向上抛
		} finally {
			this.dbc.close();
		}
	}

	@Override
	public List<Emp> list() throws Exception {
		try {
			return DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findAll();
		} catch (Exception e) {
			throw e; // 如果有问题,就直接向上抛
		} finally {
			this.dbc.close();
		}
	}

	@Override
	public Map<String, Object> list(int currentPage, int lineSize, String column, String keyWord) throws Exception {
		try {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("allEmps", DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).findAllSplit(currentPage,
					lineSize, column, keyWord));
			map.put("empCount", DAOFactory.getIEmpDAOInstance(this.dbc.getConnection()).getAllCount(column, keyWord));
			return map;
		} catch (Exception e) {
			throw e; // 如果有问题,就直接向上抛
		} finally {
			this.dbc.close();
		}
	}
}

都要求一个业务层调用多个数据层的操作

不同层之间的访问依靠的就是工厂类和接口进行操作。{日后自己写的功能类,只要使用了接口,就上工厂(70%)}

此时的结构实现:(子类相互之间的引用关系)


(EmpServiceImpl通过DAOFactory取得DAO的操作接口IEmpDAO,而后进行操作)



猜你喜欢

转载自blog.csdn.net/qq_36834445/article/details/80100292