之前所学习的内容到昨天已经彻底告一段落(基本知识讲解完了),之后的内容将以代码的开发为主,如果在之前所学习的内容不是很透彻,你只要把今天所讲解的代码搞明白了,彻底会写了,写的很熟练了,那么一切就都不是问题。
4.1、关于设计分层的初步概念
· 数据层(数据访问层、持久层),一般会使用“Data Access Object”表示,简称为DAO,在DAO之中提供的是一系列的数据库操作标准(接口);
· 业务层(服务层),一般会使用“Service”表示,由于业务层最终也是要给控制层进行调用(今天给客户直接调用)、所以业务层也需要有一个自己的操作标准,而一个业务层就需要调用多个数据层。
4.2、实例分析
· 【业务层】可以分页显示全部雇员记录,或者可以使用模糊查询进行关键字匹配,在返回全部记录的同时还需要返回本次查询的总数据量;
4.3、代码的准备
4.3.1、数据库连接类:DatabaseConnection
范例:定义DatabaseConnection.java类
package cn.mldn.oracle.dbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnection { } |
4.3.2、开发简单Java类
范例:定义Member.java类
package cn.mldn.oracle.vo; import java.io.Serializable; import java.util.Date; @SuppressWarnings("serial") public class Emp implements Serializable { } |
4.4、开发数据层:DAO层
4.4.1、持久层标准
范例:定义IEmpDAO接口
package cn.mldn.oracle.dao; import java.util.List; import cn.mldn.oracle.vo.Emp; public interface IEmpDAO { } |
4.4.2、定义数据层实现类:EmpDAOImpl
范例:观察问题
|
· 根据异常的处理来讲,如果在处理过程之中出现了数据库的更新异常,那么就再也关不上了,而且在本程序之中,如果更新成功直接返回了,也无法关闭;
· 一个业务层会调用多个数据层操作,现在把数据库的打开和关闭操作放在了数据层的每一个方法里面,这就意味着,一个业务操作的时候会打开和关闭数据库多次,那么可以将数据库的连接和关闭操作交给业务层处理;
范例:标准实现
package cn.mldn.oracle.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import cn.mldn.oracle.dao.IEmpDAO; import cn.mldn.oracle.vo.Emp; public class EmpDAOImpl implements IEmpDAO { } |
4.4.3、建立数据层工厂类
范例:建立DAOFactory
package cn.mldn.oracle.factory; import java.sql.Connection; import cn.mldn.oracle.dao.IEmpDAO; import cn.mldn.oracle.dao.impl.EmpDAOImpl; public class DAOFactory { } |
4.5、开发业务层:Service层
4.5.1、业务层操作标准
范例:定义IEmpService接口
package cn.mldn.oracle.service; import java.util.List; import java.util.Map; import cn.mldn.oracle.vo.Emp; public interface IEmpService { } |
4.5.2、定义业务层实现类
范例:定义实现类
package cn.mldn.oracle.service.impl; import java.sql.Connection; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.mldn.oracle.dao.IEmpDAO; import cn.mldn.oracle.dbc.DatabaseConnection; import cn.mldn.oracle.factory.DAOFactory; import cn.mldn.oracle.service.IEmpService; import cn.mldn.oracle.vo.Emp; public class EmpServiceImpl implements IEmpService{ } |
4.5.3、定义业务层工厂类
范例:定义ServiceFactory
package cn.mldn.oracle.factory; import cn.mldn.oracle.service.IEmpService; import cn.mldn.oracle.service.impl.EmpServiceImpl; public class ServiceFactory { } |
4.6、程序测试
4.6.1、编写主方法测试
范例:测试增加操作
package cn.mldn.oracle.test; import java.util.Date; import cn.mldn.oracle.factory.ServiceFactory; import cn.mldn.oracle.vo.Emp; public class TestEmpInsert { } |
范例:测试查询
package cn.mldn.oracle.test; import java.util.Iterator; import java.util.List; import java.util.Map; import cn.mldn.oracle.factory.ServiceFactory; import cn.mldn.oracle.vo.Emp; public class TestEmpList { } |
4.6.2、使用JUNIT测试
1、
2、
3、
4、
5、
6、
范例:编写junit测试程序
package cn.mldn.oracle.junit.test; import java.util.Date; import junit.framework.TestCase; import org.junit.Test; import cn.mldn.oracle.factory.ServiceFactory; import cn.mldn.oracle.vo.Emp; public class IEmpServiceTest { } |
4.7、开发部门操作
1、
package cn.mldn.oracle.vo; import java.io.Serializable; @SuppressWarnings("serial") public class Dept implements Serializable { } |
2、
package cn.mldn.oracle.dao; import java.util.List; import cn.mldn.oracle.vo.Dept; public interface IDeptDAO { } |
package cn.mldn.oracle.dao; import cn.mldn.oracle.vo.Dept; public interface IDeptDAO extends IDAO{ } |
3、
4、
5、
6、
7、
8、