资源描述
天津工业大学
面向对象程序设计课程设计报告
题目:Java DAO 模式设计
学 号 1411640305
姓 名 黄世增
班 级 计算机1403
指导教师
2016年 6月 29日
摘 要
自1946年第一台计算机问世以来,计算机产业的飞速发展已远远超出人们对它的预料,在某些生产线上,甚至一秒钟就能生产出一台微型计算机,产量猛增,价格低廉,这就使得它的应用范围迅速扩展。如今,计算机已深入到人类社会的各个领域。各种应用程序不断地被开发应用,随之程序设计语言也不断发展完善,Java便是这程序语言世界里的一朵奇葩,如今甚为流行。与C++语言相比,Java是一种完全面向对象的语言,它吸取了C++语言的语句结构,去掉了指针、多继承、运算符重载等这些降低安全性、低可靠性的语言元素,并实现了自动回收垃圾的功能,从而使得Java语言更具有可移植性、鲁棒性、安全性、与环境无关性等特点,赢得了广大软件开发者的青睐。
今天,作为计算机科学与技术专业的学生,更应该了解Java语言的语法规范,理解Java语言程序设计的基本特点,掌握利用Java语言编写程序的基本技巧,学会利用Java开发环境调试程序。为了更进一步将所学知识与实际结合起来,我参加了本次课程设计。本课程设计是《面向对象程序设计》的后续实践课程,以Java语言为例逐步设计开发一个基于DAO模式的信息管理系统。课程采用循序渐进方式,从设计简单的Java类开始,逐步增加功能、通过使用设计模式对代码进行重构,分阶段完成3个里程碑版本:基于内存中集合对象的信息管理系统、基于文件的信息管理系统和基于数据库的信息管理系统。通过这些针对性练习使学生充分理解面向对象程序设计的思想及其应用方式。
关键词:Java;DAO;信息管理系统;数据库。
目 录
第一章 课程设计目的……………………………………………1
第二章 需求分析…………………………………………………1
2.1功能需求……………………………………………………………………1
2.2系统的开发运行环境………………………………………………………1
第三章 总体设计…………………………………………………1
3.1分层设计……………………………………………………………………1
3.2 DAO组成……………………………………………………………………2
第四章 详细设计…………………………………………………2
4.1数据库连接类………………………………………………………………2
4.2开发简单Java类……………………………………………………………4
4.3数据开发层:DAO层………………………………………………………4
4.4定义数据层实现类:StudentDAOImpl……………………………………5
4.5建立数据层工厂类…………………………………………………………8
4.6业务层实现类………………………………………………………………8
4.7测试类Test………………………………………………………………9
第五章 调试与测试………………………………………………9
5.1运行结果…………………………………………………………………9
5.2遇到的问题………………………………………………………………12
第六章 课程设计小结…………………………………………12
参考文献……………………………………………………………13
天津工业大学14级专业课程设计
第一章 课程设计目的
1、进一步熟悉Java开发环境,熟悉用Java完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。
2、通过此设计,了解Java语言的特点;熟悉Java程序的编写;体会Java语言在问题求解中的特点。
3、总结学习Java语言的心得和体会,并对Java课程设置提出自己的意见和建议。
第二章 需求分析
2.1 功能需求
在Java程序中,经常需要把数据持久化,也需要获取持久化的数据,但是在进行数据持久化的过程中面临诸多问题(如:数据源不同、存储类型不同、供应商不同、访问方式不同等等),请问如何能以统一的接口进行数据持久化的操作?此时就需要用到DAO模式。
2.2 系统的开发运行环境
本系统开发平台:Java
本系统集成开发环境:Eclipse
本系统运行环境:Windows 10
本系统用的数据库:SQL Server 2014
第三章 总体设计
3.1 分层设计
在软件开发过程之中一定要存在有一个程序的层次概念,每一个程序层次都要完成某些具体的操作,而在一般情况下,分层的原则:不超过三层的原则,而常见的分层模式如下:
图3-1 分层模式图
本课程设计专注于业务层与数据层。
一个业务层可能需要调用多个数据层,而数据层所提供的都是数据库的原子性操作(INSERT、UPDATE、DELETE、SELECT)。那么就可以给出概念:
·数据层(数据访问层、持久层),一般会使用“Data Access Object”表示,简称DAO,在DAO之中提供的是一系列的数据库操作标准(接口);
·业务层(服务层),一般会使用“Service”表示,由于业务层最终也是要给控制层进行调用 (今天给客户直接调用)、所以业务层也需要由一个自己的操作标准,而一个业务层就需要调用多个数据层。
3.2 DAO组成
在整个DAO的设计中实际上都是以接口为操作标准的,即:客户端依靠DAO实现的接口进行操作,而服务端要将接口进行的具体的实现,DAO由以下几个部分组成:
·DatabaseConnect:专门负责数据库的打开与关闭操作的类;
·VO:主要由属性、setter、getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录;
·DAO:主要定义操作的接口,定义一系列数据库的原子性操作,例如:增加、显示、修改、删除、按ID查询等;
·Impl:DAO接口的真实实现类,完成具体的数据库操作,但是不负责数据库的打开和关闭;
·Factory:工厂类,通过工厂类取得一个DAO的实例化对象;
·Operate:业务层实现类。
第四章 详细设计
4.1 数据库连接类
在整个JDBC操作过程之中,数据库只有打开后才可以进行一系列的操作,而后数据库的连接有必须关闭。那么为了方便控制,可以直接将数据库的打开和关闭封装在一个类之中。
数据库的连接类保存包为“cn.edu.tjpu.cs.infosystem.dbc”,而且数据库的连接只针对SQL Server定义。
public class DatabaseConnection {
private Connection conn;//声明Connection对象
public DatabaseConnection(){
try{ //加载数据库驱动类 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
try{ //通过访问数据库的URL获取数据库连接对象
this.conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;Data baseName=infosystem","root","123456");
}catch(SQLException e){
e.printStackTrace();
}
}
public Connection getConnection(){
return this.conn;
}
public void close(){
if(this.conn != null){
try{
this.conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
4.2开发简单Java类
简单Java类指的就是累的结构比较单一,主要是由属性、setter/getter方法组成,简单Java类的主要功能是作为一种数据的载体进行存放,而日后对于简单Java类也会出现如下的名称:POJO(简单Java类)、VO(值对象)、TO(DTO,数据传输对象,主要用于分布式)、PO(持久化对象)。可是对于简单Java类的组成结构在开发之中也有了明确要求:
·简单Java类的最主要的设计思想来源于数据表,所以一定要和数据表的结构映射上;
·简单Java类的名称要与数据表的名称保持一致,注意大小写,例如:student表,类:Student;
·为了方便程序扩展,所有的简单Java类必须实现java.io.Serializable接口;
·类之中的属性必须使用private封装,封装后的属性一定要编写setter、getter方法;
·类之中一定要提供有无参构造方法;
·类之中不允许使用基本数据类型,所有的基本类型全部替换为包装类;
·类之中不允许出现任何的输出语句,所有的输出必须交给调用处执行;
·类可以有选择性的覆写Object类的:equals()、hashCode()、toString()。
简单Java类要求保存在cn.edu.tjpu.cs.infosystem.vo包中。
4.3 开发数据层:DAO层
数据层又称为持久层,指的是进行持久化数据操作的。持久层属于DAO层,所以在进行开发的时候首先要开发出操作的标准,而后进行子类的实现。
因为持久层最终要交给业务层迚行调用,所以持久层必须有一个自己的操作接口,用于定义标准,但是此接口的命名是有要求的,如果当前操作的是Student表,那么这个接口应该命名为StudentDAO,但是为了区分接口还有类,所以现在要求在接口定义前增加一个字母I,所以Student表的持久层标准名称:IStudentDAO,而且此接口要保存在cn.edu.tjpu.cs.infosystem.dao下(因学生和工人的操作是一样的,所以这里及后面的部分只讨论学生的情况)。
public interface IStudentDAO {
public boolean doCreate(Student vo) throws Exception;
public boolean doUpdate(Student vo) throws Exception;
public boolean doRemove(Integer id) throws Exception;
public Student findById(Integer id) throws Exception;
public List findAll() throws Exception;
public List findAll(String column,String keyWord,Integer currentPage,Integer lineSize) throws Exception;
public Integer getAllCount(String column,String keyWord) throws Exception;
}
4.4 定义数据层实现类:StudentDAOImpl
接口标准定义完成之后,下面就可以进行实现类的编写,编写的实现类要保存在cn.edu.tjpu.cs.infosystem.dao.impl子包之中,而且名称后面一定要加上Impl。但是对于实现类,现在采用如下的方式编写。注意:一个业务层会调用多个数据层操作,那么可以将数据库的连接和关闭交给业务层处理,DAO层只完成标准的JDBC操作,而且每一个方法都只完成一个基本的原子性操作。
4.4.1 创建
public boolean doCreate(Student vo) throws Exception{
String sql = "insert into student(id,name,age,score) values(?,?,?,?)";
pstmt = conn.prepareStatement(sql);//创建PrepareStatement 接口对象
pstmt.setInt(1, vo.getId());
pstmt.setString(2, vo.getName());
pstmt.setInt(3, vo.getAge());
pstmt.setFloat(4, vo.getScore());
int len = pstmt.executeUpdate();//执行SQL
return true;
}
4.4.2 更新
public boolean doUpdate(Student vo) throws Exception{
String sql = "update student set name=?,age=?,score=? where id = ?";
pstmt = conn.prepareStatement(sql);//创建PrepareStatement 接口对象
pstmt.setInt(4, vo.getId());
pstmt.setString(1, vo.getName());
pstmt.setInt(2, vo.getAge());
pstmt.setFloat(3, vo.getScore());
int len = pstmt.executeUpdate();//执行SQL
if(len != 0)
return true;
else
return false;
}
4.4.3 删除
public boolean doRemove(Integer id) throws Exception{
String sql = "delete from student where id = ?";
pstmt = conn.prepareStatement(sql);//创建PrepareStatement 接口对象
pstmt.setInt(1, id);
int len = pstmt.executeUpdate();//执行SQL
if(len != 0)
return true;
else
return false;
}
4.4.4 按ID查询
public Student findById(Integer id) throws Exception{
String sql = "select * from student where id =?";
Student stu = new Student();
pstmt = conn.prepareStatement(sql);//创建PrepareStatement 接口对象
pstmt.setInt(1, id);
res = pstmt.executeQuery();
if(res.next()){
stu.setId(res.getInt(1));
stu.setName(res.getString("name"));
stu.setAge(res.getInt("age"));
stu.setScore(res.getFloat("score"));
return stu;
}
else
return null;
}
4.4.5 查询全部
public List findAll() throws Exception{
String sql = "select * from student";
pstmt = conn.prepareStatement(sql);//创建PrepareStatement接口对象
res = pstmt.executeQuery();
while(res.next()){
s.add(new Student(res.getInt("id"),res.getString("name"),res.getInt("age"), res.getFloat("score")));
}
return s;
}
}
4.5 建立数据层工厂类
最终数据层是要交给业务层调用的,而业务层为了和数据层之间不产生耦合,所以不允许直接使用子类为数据层接口实例化,必须通过工厂类来完成,工厂应该保存在cn.edu.tjpu.cs.infosystem.factory包下。
public class DAOFactory {
public static IStudentDAO getIStudentDAOInstance(Connection conn){
return new StudentDAOImpl(conn);
}
public static IWorkerDAO getIWorkerDAOInstance(Connection conn){
return new WorkerDAOImpl(conn);
}
}
4.6 业务层实现类
如果要定义业务层实现类请一定要记住这个类要有两个功能:打开和关闭数据库(不管是否出异常,数据库都要关闭)、调用数据层方法。
4.6.1 定义IPersonOperate接口
public interface IPersonOperate {
public boolean add(Person vo)throws Exception;
public boolean delete(int id)throws Exception;
public boolean update(Person vo)throws Exception;
public List list()throws Exception;
public Person get(int id)throws Exception;//
public List find(String name)throws Exception;
}
4.6.2 定义StudentOperate实现类
public class StudentOperate implements IPersonOperate{
private DatabaseConnection dbc = new DatabaseConnection();
public boolean add(Person vo)throws Exception{
try{
Connection conn = this.dbc.getConnection();
IStudentDAO dao = DAOFactory.getIStudentDAOInstance(conn);
if(dao.findById(vo.getId()) == null){//数据不存在
return dao.doCreate( (Student) vo);//增加
}
return false;
}catch(Exception e){
throw e;
}finally{
this.dbc.close();
}
}
}
4.7 测试类Test
在测试类中定义一个StudentOperate变量stuop,调用StudentOperate实现类中的方法实现各个功能。
第五章 调试与测试
5.1 运行结果
图5-1 添加和显示功能
图5-2 按ID查询功能
图5-3 修改功能
图5-4 删除功能
5.2 遇到的问题
写完程序后调试,发现显示和查询的功能不行,显示只能显示刚添加的信息,以前添加的信息显示不出来,而查询则什么信息也没有。我检查了一会儿,觉得可能是HashMap集合有问题,便将它换成了List,但还是不行,在机房检查了很久还是没检查出来,故等到老师检查了我还没完成。我拿到了宿舍,前前后后检查了一遍,发现list()方法和get()方法返回的是list集合对象和student对象,我没将它们赋予一个对象,就直接写在程序中,导致查询的时候没结果,所以最后改进了就可以了。
第六章 课程设计小结
通过这次的课程设计,我对这个学期所学的高级JAVA语言程序设计有了进一步从理论到实践的升华,将自己平时所学到的知识应用到了实践中,还有通过查询了很多的相关知识来充实自己,也使自己的课程设计能够做的比较好。
参考文献
[1] 明日科技.Java从入门到精通(第3版).北京:清华大学出版社,2012.
1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究
2. 基于单片机的嵌入式Web服务器的研究
3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究
4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制
5. 基于MCS-51系列单片机的通用控制模块的研究
6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器
7. 单片机控制的二级倒立摆系统的研究
8. 基于增强型51系列单片机的TCP/IP协议栈的实现
9. 基于单片机的蓄电池自动监测系统
10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究
11. 基于单片机的作物营养诊断专家系统的研究
12. 基于单片机的交流伺服电机运动控制系统研究与开发
13. 基于单片机的泵管内壁硬度测试仪的研制
14. 基于单片机的自动找平控制系统研究
15. 基于C8051F040单片机的嵌入式系统开发
16. 基于单片机的液压动力系统状态监测仪开发
17. 模糊Smith智能控制方法的研究及其单片机实现
18. 一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制
19. 基于双单片机冲床数控系统的研究
20. 基于CYGNAL单片机的在线间歇式浊度仪的研制
21. 基于单片机的喷油泵试验台控制器的研制
22. 基于单片机的软起动器的研究和设计
23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究
24. 基于单片机的机电产品控制系统开发
25. 基于PIC单片机的智能手机充电器
26. 基于单片机的实时内核设计及其应用研究
27. 基于单片机的远程抄表系统的设计与研究
28. 基于单片机的烟气二氧化硫浓度检测仪的研制
29. 基于微型光谱仪的单片机系统
30. 单片机系统软件构件开发的技术研究
31. 基于单片机的液体点滴速度自动检测仪的研制
32. 基于单片机系统的多功能温度测量仪的研制
33. 基于PIC单片机的电能采集终端的设计和应用
34. 基于单片机的光纤光栅解调仪的研制
35. 气压式线性摩擦焊机单片机控制系统的研制
36. 基于单片机的数字磁通门传感器
37. 基于单片机的旋转变压器-数字转换器的研究
38. 基于单片机的光纤Bragg光栅解调系统的研究
39. 单片机控制的便携式多功能乳腺治疗仪的研制
40. 基于C8051F020单片机的多生理信号检测仪
41. 基于单片机的电机运动控制系统设计
42. Pico专用单片机核的可测性设计研究
43. 基于MCS-51单片机的热量计
44. 基于双单片机的智能遥测微型气象站
45. MCS-51单片机构建机器人的实践研究
46. 基于单片机的轮轨力检测
47. 基于单片机的GPS定位仪的研究与实现
48. 基于单片机的电液伺服控制系统
49. 用于单片机系统的MMC卡文件系统研制
50. 基于单片机的时控和计数系统性能优化的研究
51. 基于单片机和CPLD的粗光栅位移测量系统研究
52. 单片机控制的后备式方波UPS
53. 提升高职学生单片机应用能力的探究
54. 基于单片机控制的自动低频减载装置研究
55. 基于单片机控制的水下焊接电源的研究
56. 基于单片机的多通道数据采集系统
57. 基于uPSD3234单片机的氚表面污染测量仪的研制
58. 基于单片机的红外测油仪的研究
59. 96系列单片机仿真器研究与设计
60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造
61. 基于单片机的温度智能控制系统的设计与实现
62. 基于MSP430单片机的电梯门机控制器的研制
63. 基于单片机的气体测漏仪的研究
64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器
65. 基于单片机和DSP的变压器油色谱在线监测技术研究
66. 基于单片机的膛壁温度报警系统设计
67. 基于AVR单片机的低压无功补偿控制器的设计
68. 基于单片机船舶电力推进电机监测系统
69. 基于单片机网络的振动信号的采集系统
70. 基于单片机的大容量数据存储技术的应用研究
71. 基于单片机的叠图机研究与教学方法实践
72. 基于单片机嵌入式Web服务器技术的研究及实现
73. 基于AT89S52单片机的通用数据采集系统
74. 基于单片机的多道脉冲幅度分析仪研究
75. 机器人旋转电弧传感角焊缝跟踪单片机控制系统
76. 基于单片机的控制系统在PLC虚拟教学实验中的应用研究
77. 基于单片机系统的网络通信研究与应用
78. 基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究
79. 基于单片机的模糊控制器在工业电阻炉上的应用研究
80. 基于双单片机冲床数控系统的研究与开发
81. 基于Cygnal单片机的μC/OS-Ⅱ的研究
82. 基于单片机的一体化智能差示扫描量热仪系统研究
83. 基于TCP/IP协议的单片机与Internet互联的研究与实现
84. 变频调速液压电梯单片机控制器的研究
85. 基于单片机γ-免疫计数器自动换样功能的研究与实现
86. 基于单片机的倒立摆控制系统设计与实现
87. 单片机嵌入式以太网防盗报警系统
88. 基于51单片机的嵌入式Internet系统的设计与实现
89. 单片机监测系统在挤压机上的应用
90. MSP430单片机在智能水表系统上的研究与应用
91. 基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用
92. 单片机在高楼恒压供水系统中的应用
93. 基于ATmega16单片机的流量控制器的开发
94. 基于MSP430单片机的远程抄表系统及智能网络水表的设计
95. 基于MSP430单片机具有数据存储与回放功能的嵌入式电子血压计的设计
96. 基于单片机的氨分解率检测系统的研究与开发
97. 锅炉的单片机控制系统
98. 基于单片机控制的电磁振动式播种控制系统的设计
99. 基于单片机技术的WDR-01型聚氨酯导热系数测试仪的研制
100. 一种RISC结构8位单片机的设计与实现
101. 基于单片机的公寓用电智能管理系统设计
102. 基于单片机的温度测控系统在温室大棚中的设计与实现
103. 基于MSP430单片机的数字化超声电源的研制
104. 基于ADμC841单片机的防爆软起动综合控制器的研究
105. 基于单片机控制的井下低爆综合保护系统的设计
106. 基于单片机的空调器故障诊断系统的设计研究
107. 单片机实现的寻呼机编码器
108. 单片机实现的鲁棒MRACS及其在液压系统中的应用研究
109. 自适应控制的单片机实现方法及基上隅角瓦斯积聚处理中的应用研究
110. 基于单片机的锅炉智能控制器的设计与研究
111. 超精密机床床身隔振的单片机主动控制
112. PIC单片机在空调中的应用
113. 单片机控制力矩加载控制系统的研究
项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!
项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!
单片机论文,毕业设计,毕业论文,单片机设计,硕士论文,研究生论文,单片机研究论文,单片机设计论文,优秀毕业论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机论文,基于单片机论文,毕业论文终稿,毕业论文初稿,本文档支持完整下载,支持任意编辑!本文档全网独一无二,放心使用,下载这篇文档,定会成功!
- 13 -
展开阅读全文