《java课程设计报告.docx》由会员分享,可在线阅读,更多相关《java课程设计报告.docx(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、天津工业大学面向对象程序设计课程设计报告题目:Java DAO 模式设计源代码:学 号 1411640305 姓 名 黄世增 班 级 计算机1403 指导教师 2016年 6月 29日摘 要 自1946年第一台计算机问世以来,计算机产业的飞速发展已远远超出人们对它的预料,在某些生产线上,甚至一秒钟就能生产出一台微型计算机,产量猛增,价格低廉,这就使得它的应用范围迅速扩展。如今,计算机已深入到人类社会的各个领域。各种应用程序不断地被开发应用,随之程序设计语言也不断发展完善,Java便是这程序语言世界里的一朵奇葩,如今甚为流行。与C+语言相比,Java是一种完全面向对象的语言,它吸取了C+语言的语
2、句结构,去掉了指针、多继承、运算符重载等这些降低安全性、低可靠性的语言元素,并实现了自动回收垃圾的功能,从而使得Java语言更具有可移植性、鲁棒性、安全性、与环境无关性等特点,赢得了广大软件开发者的青睐。今天,作为计算机科学与技术专业的学生,更应该了解Java语言的语法规范,理解Java语言程序设计的基本特点,掌握利用Java语言编写程序的基本技巧,学会利用Java开发环境调试程序。为了更进一步将所学知识与实际结合起来,我参加了本次课程设计。本课程设计是面向对象程序设计的后续实践课程,以Java语言为例逐步设计开发一个基于DAO模式的信息管理系统。课程采用循序渐进方式,从设计简单的Java类开
3、始,逐步增加功能、通过使用设计模式对代码进行重构,分阶段完成3个里程碑版本:基于内存中集合对象的信息管理系统、基于文件的信息管理系统和基于数据库的信息管理系统。通过这些针对性练习使学生充分理解面向对象程序设计的思想及其应用方式。关键词:Java;DAO;信息管理系统;数据库。目 录第一章 课程设计目的1第二章 需求分析12.1功能需求12.2系统的开发运行环境1第三章 总体设计1 3.1分层设计1 3.2 DAO组成2第四章 详细设计2 4.1数据库连接类2 4.2开发简单Java类4 4.3数据开发层:DAO层4 4.4定义数据层实现类:StudentDAOImpl5 4.5建立数据层工厂类
4、8 4.6业务层实现类8 4.7测试类Test9第五章 调试与测试9 5.1运行结果9 5.2遇到的问题12第六章 课程设计小结12参考文献13第一章 课程设计目的 1、进一步熟悉Java开发环境,熟悉用Java完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。 2、通过此设计,了解Java语言的特点;熟悉Java程序的编写;体会Java语言在问题求解中的特点。3、总结学习Java语言的心得和体会,并对Java课程设置提出自己的意见和建议。第二章 需求分析2.1 功能需求 在Java程序中,经常需要把数据持久化,也需要获取持久化的数据,但是在进行数据持久化的过程中面临诸多问
5、题(如:数据源不同、存储类型不同、供应商不同、访问方式不同等等),请问如何能以统一的接口进行数据持久化的操作?此时就需要用到DAO模式。2.2 系统的开发运行环境 本系统开发平台:Java 本系统集成开发环境:Eclipse本系统运行环境:Windows 10本系统用的数据库:SQL Server 2014第三章 总体设计3.1 分层设计 在软件开发过程之中一定要存在有一个程序的层次概念,每一个程序层次都要完成某些具体的操作,而在一般情况下,分层的原则:不超过三层的原则,而常见的分层模式如下:图3-1 分层模式图 本课程设计专注于业务层与数据层。 一个业务层可能需要调用多个数据层,而数据层所提
6、供的都是数据库的原子性操作(INSERT、UPDATE、DELETE、SELECT)。那么就可以给出概念:数据层(数据访问层、持久层),一般会使用“Data Access Object”表示,简称DAO,在DAO之中提供的是一系列的数据库操作标准(接口);业务层(服务层),一般会使用“Service”表示,由于业务层最终也是要给控制层进行调用 (今天给客户直接调用)、所以业务层也需要由一个自己的操作标准,而一个业务层就需要调用多个数据层。3.2 DAO组成 在整个DAO的设计中实际上都是以接口为操作标准的,即:客户端依靠DAO实现的接口进行操作,而服务端要将接口进行的具体的实现,DAO由以下几
7、个部分组成:DatabaseConnect:专门负责数据库的打开与关闭操作的类;VO:主要由属性、setter、getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录;DAO:主要定义操作的接口,定义一系列数据库的原子性操作,例如:增加、显示、修改、删除、按ID查询等;Impl:DAO接口的真实实现类,完成具体的数据库操作,但是不负责数据库的打开和关闭;Factory:工厂类,通过工厂类取得一个DAO的实例化对象;Operate:业务层实现类。第四章 详细设计4.1 数据库连接类在整个JDBC操作过程之中,数据库只有打开后才可以进行一系列的操作,而后数
8、据库的连接有必须关闭。那么为了方便控制,可以直接将数据库的打开和关闭封装在一个类之中。数据库的连接类保存包为“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(ClassNotFound
9、Exception e)e.printStackTrace();try /通过访问数据库的URL获取数据库连接对象this.conn = DriverManager.getConnection(jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=infosystem,root,123456);catch(SQLException e)e.printStackTrace();public Connection getConnection()return this.conn;public void close()if(this.conn != null)tryt
10、his.conn.close();catch(SQLException e)e.printStackTrace();4.2开发简单Java类简单Java类指的就是累的结构比较单一,主要是由属性、setter/getter方法组成,简单Java类的主要功能是作为一种数据的载体进行存放,而日后对于简单Java类也会出现如下的名称:POJO(简单Java类)、VO(值对象)、TO(DTO,数据传输对象,主要用于分布式)、PO(持久化对象)。可是对于简单Java类的组成结构在开发之中也有了明确要求:简单Java类的最主要的设计思想来源于数据表,所以一定要和数据表的结构映射上;简单Java类的名称要与数
11、据表的名称保持一致,注意大小写,例如:student表,类:Student;为了方便程序扩展,所有的简单Java类必须实现java.io.Serializable接口;类之中的属性必须使用private封装,封装后的属性一定要编写setter、getter方法;类之中一定要提供有无参构造方法;类之中不允许使用基本数据类型,所有的基本类型全部替换为包装类;类之中不允许出现任何的输出语句,所有的输出必须交给调用处执行;类可以有选择性的覆写Object类的:equals()、hashCode()、toString()。简单Java类要求保存在cn.edu.tjpu.cs.infosystem.vo包
12、中。4.3 开发数据层:DAO层数据层又称为持久层,指的是进行持久化数据操作的。持久层属于DAO层,所以在进行开发的时候首先要开发出操作的标准,而后进行子类的实现。因为持久层最终要交给业务层迚行调用,所以持久层必须有一个自己的操作接口,用于定义标准,但是此接口的命名是有要求的,如果当前操作的是Student表,那么这个接口应该命名为StudentDAO,但是为了区分接口还有类,所以现在要求在接口定义前增加一个字母I,所以Student表的持久层标准名称:IStudentDAO,而且此接口要保存在cn.edu.tjpu.cs.infosystem.dao下(因学生和工人的操作是一样的,所以这里及
13、后面的部分只讨论学生的情况)。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;publi
14、c 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。但是对于实现类,现
15、在采用如下的方式编写。注意:一个业务层会调用多个数据层操作,那么可以将数据库的连接和关闭交给业务层处理,DAO层只完成标准的JDBC操作,而且每一个方法都只完成一个基本的原子性操作。4.4.1 创建public boolean doCreate(Student vo) throws ExceptionString sql = insert into student(id,name,age,score) values(?,?,?,?);pstmt = conn.prepareStatement(sql);/创建PrepareStatement接口对象pstmt.setInt(1, vo.getI
16、d();pstmt.setString(2, vo.getName();pstmt.setInt(3, vo.getAge();pstmt.setFloat(4, vo.getScore();int len = pstmt.executeUpdate();/执行SQLreturn true;4.4.2 更新public boolean doUpdate(Student vo) throws ExceptionString sql = update student set name=?,age=?,score=? where id = ?;pstmt = conn.prepareStatemen
17、t(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();/执行SQLif(len != 0)return true;elsereturn false;4.4.3 删除public boolean doRemove(Integer id) throws ExceptionString sql =
18、 delete from student where id = ?;pstmt = conn.prepareStatement(sql);/创建PrepareStatement接口对象pstmt.setInt(1, id);int len = pstmt.executeUpdate();/执行SQLif(len != 0)return true;elsereturn false;4.4.4 按ID查询public Student findById(Integer id) throws ExceptionString sql = select * from student where id =?
19、;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;elsereturn null;4.4.5 查询全部
20、public List findAll() throws ExceptionString 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 建立数据层工厂类最终数据层是要交给业务层调用的,
21、而业务层为了和数据层之间不产生耦合,所以不允许直接使用子类为数据层接口实例化,必须通过工厂类来完成,工厂应该保存在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 WorkerDAOImp
22、l(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
23、 Exception;public Person get(int id)throws Exception;/public List find(String name)throws Exception;4.6.2 定义StudentOperate实现类public class StudentOperate implements IPersonOperateprivate DatabaseConnection dbc = new DatabaseConnection();public boolean add(Person vo)throws ExceptiontryConnection conn
24、= 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;finallythis.dbc.close();4.7 测试类Test 在测试类中定义一个StudentOperate变量stuop,调用StudentOperate实现类中的方法实现各个功能。第
25、五章 调试与测试5.1 运行结果图5-1 添加和显示功能图5-2 按ID查询功能图5-3 修改功能图5-4 删除功能5.2 遇到的问题写完程序后调试,发现显示和查询的功能不行,显示只能显示刚添加的信息,以前添加的信息显示不出来,而查询则什么信息也没有。我检查了一会儿,觉得可能是HashMap集合有问题,便将它换成了List,但还是不行,在机房检查了很久还是没检查出来,故等到老师检查了我还没完成。我拿到了宿舍,前前后后检查了一遍,发现list()方法和get()方法返回的是list集合对象和student对象,我没将它们赋予一个对象,就直接写在程序中,导致查询的时候没结果,所以最后改进了就可以了。第六章 课程设计小结通过这次的课程设计,我对这个学期所学的高级JAVA语言程序设计有了进一步从理论到实践的升华,将自己平时所学到的知识应用到了实践中,还有通过查询了很多的相关知识来充实自己,也使自己的课程设计能够做的比较好。参考文献1 明日科技.Java从入门到精通(第3版).北京:清华大学出版社,2012.
限制150内