java课程设计报告.docx
- 文档编号:30398347
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:15
- 大小:110.33KB
java课程设计报告.docx
《java课程设计报告.docx》由会员分享,可在线阅读,更多相关《java课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
java课程设计报告
天津工业大学
面向对象程序设计课程设计报告
题目:
JavaDAO模式设计
源代码:
学号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.2DAO组成……………………………………………………………………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
第一章课程设计目的
1、进一步熟悉Java开发环境,熟悉用Java完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。
2、通过此设计,了解Java语言的特点;熟悉Java程序的编写;体会Java语言在问题求解中的特点。
3、总结学习Java语言的心得和体会,并对Java课程设置提出自己的意见和建议。
第二章需求分析
2.1功能需求
在Java程序中,经常需要把数据持久化,也需要获取持久化的数据,但是在进行数据持久化的过程中面临诸多问题(如:
数据源不同、存储类型不同、供应商不同、访问方式不同等等),请问如何能以统一的接口进行数据持久化的操作?
此时就需要用到DAO模式。
2.2系统的开发运行环境
本系统开发平台:
Java
本系统集成开发环境:
Eclipse
本系统运行环境:
Windows10
本系统用的数据库:
SQLServer2014
第三章总体设计
3.1分层设计
在软件开发过程之中一定要存在有一个程序的层次概念,每一个程序层次都要完成某些具体的操作,而在一般情况下,分层的原则:
不超过三层的原则,而常见的分层模式如下:
图3-1分层模式图
本课程设计专注于业务层及数据层。
一个业务层可能需要调用多个数据层,而数据层所提供的都是数据库的原子性操作(INSERT、UPDATE、DELETE、SELECT)。
那么就可以给出概念:
·数据层(数据访问层、持久层),一般会使用“DataAccessObject”表示,简称DAO,在DAO之中提供的是一系列的数据库操作标准(接口);
·业务层(服务层),一般会使用“Service”表示,由于业务层最终也是要给控制层进行调用(今天给客户直接调用)、所以业务层也需要由一个自己的操作标准,而一个业务层就需要调用多个数据层。
3.2DAO组成
在整个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”,而且数据库的连接只针对SQLServer定义。
publicclassDatabaseConnection{
privateConnectionconn;//声明Connection对象
publicDatabaseConnection(){
try{//加载数据库驱动类Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
try{//通过访问数据库的URL获取数据库连接对象
this.conn=DriverManager.getConnection("jdbc:
sqlserver:
//127.0.0.1:
1433;DatabaseName=infosystem","root","123456");
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicConnectiongetConnection(){
returnthis.conn;
}
publicvoidclose(){
if(this.conn!
=null){
try{
this.conn.close();
}catch(SQLExceptione){
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下(因学生和工人的操作是一样的,所以这里及后面的部分只讨论学生的情况)。
publicinterfaceIStudentDAO{
publicbooleandoCreate(Studentvo)throwsException;
publicbooleandoUpdate(Studentvo)throwsException;
publicbooleandoRemove(Integerid)throwsException;
publicStudentfindById(Integerid)throwsException;
publicListfindAll()throwsException;
publicListfindAll(Stringcolumn,StringkeyWord,IntegercurrentPage,IntegerlineSize)throwsException;
publicIntegergetAllCount(Stringcolumn,StringkeyWord)throwsException;
}
4.4定义数据层实现类:
StudentDAOImpl
接口标准定义完成之后,下面就可以进行实现类的编写,编写的实现类要保存在cn.edu.tjpu.cs.infosystem.dao.impl子包之中,而且名称后面一定要加上Impl。
但是对于实现类,现在采用如下的方式编写。
注意:
一个业务层会调用多个数据层操作,那么可以将数据库的连接和关闭交给业务层处理,DAO层只完成标准的JDBC操作,而且每一个方法都只完成一个基本的原子性操作。
4.4.1创建
publicbooleandoCreate(Studentvo)throwsException{
Stringsql="insertintostudent(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());
intlen=pstmt.executeUpdate();//执行SQL
returntrue;
}
4.4.2更新
publicbooleandoUpdate(Studentvo)throwsException{
Stringsql="updatestudentsetname=?
age=?
score=?
whereid=?
";
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());
intlen=pstmt.executeUpdate();//执行SQL
if(len!
=0)
returntrue;
else
returnfalse;
}
4.4.3删除
publicbooleandoRemove(Integerid)throwsException{
Stringsql="deletefromstudentwhereid=?
";
pstmt=conn.prepareStatement(sql);//创建PrepareStatement接口对象
pstmt.setInt(1,id);
intlen=pstmt.executeUpdate();//执行SQL
if(len!
=0)
returntrue;
else
returnfalse;
}
4.4.4按ID查询
publicStudentfindById(Integerid)throwsException{
Stringsql="select*fromstudentwhereid=?
";
Studentstu=newStudent();
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"));
returnstu;
}
else
returnnull;
}
4.4.5查询全部
publicListfindAll()throwsException{
Stringsql="select*fromstudent";
pstmt=conn.prepareStatement(sql);//创建PrepareStatement接口对象
res=pstmt.executeQuery();
while(res.next()){
s.add(newStudent(res.getInt("id"),res.getString("name"),res.getInt("age"),res.getFloat("score")));
}
returns;
}
}
4.5建立数据层工厂类
最终数据层是要交给业务层调用的,而业务层为了和数据层之间不产生耦合,所以不允许直接使用子类为数据层接口实例化,必须通过工厂类来完成,工厂应该保存在cn.edu.tjpu.cs.infosystem.factory包下。
publicclassDAOFactory{
publicstaticIStudentDAOgetIStudentDAOInstance(Connectionconn){
returnnewStudentDAOImpl(conn);
}
publicstaticIWorkerDAOgetIWorkerDAOInstance(Connectionconn){
returnnewWorkerDAOImpl(conn);
}
}
4.6业务层实现类
如果要定义业务层实现类请一定要记住这个类要有两个功能:
打开和关闭数据库(不管是否出异常,数据库都要关闭)、调用数据层方法。
4.6.1定义IPersonOperate接口
publicinterfaceIPersonOperate{
publicbooleanadd(Personvo)throwsException;
publicbooleandelete(intid)throwsException;
publicbooleanupdate(Personvo)throwsException;
publicListlist()throwsException;
publicPersonget(intid)throwsException;//
publicListfind(Stringname)throwsException;
}
4.6.2定义StudentOperate实现类
publicclassStudentOperateimplementsIPersonOperate{
privateDatabaseConnectiondbc=newDatabaseConnection();
publicbooleanadd(Personvo)throwsException{
try{
Connectionconn=this.dbc.getConnection();
IStudentDAOdao=DAOFactory.getIStudentDAOInstance(conn);
if(dao.findById(vo.getId())==null){//数据不存在
returndao.doCreate((Student)vo);//增加
}
returnfalse;
}catch(Exceptione){
throwe;
}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.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 报告