数据访问层与业务逻辑层设计

上传人:宝路 文档编号:48097730 上传时间:2018-07-09 格式:PPT 页数:29 大小:216.62KB
返回 下载 相关 举报
数据访问层与业务逻辑层设计_第1页
第1页 / 共29页
数据访问层与业务逻辑层设计_第2页
第2页 / 共29页
数据访问层与业务逻辑层设计_第3页
第3页 / 共29页
数据访问层与业务逻辑层设计_第4页
第4页 / 共29页
数据访问层与业务逻辑层设计_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《数据访问层与业务逻辑层设计》由会员分享,可在线阅读,更多相关《数据访问层与业务逻辑层设计(29页珍藏版)》请在金锄头文库上搜索。

1、第四章 数据访问层与 业务逻辑层设计 本章要点u使用连接池连接数据库及辅助类设计u数据操作程序设计的基本方法u博客网站数据访问类的设计u数据分页的基本方法u存储过程及其应用u大对象存储的基本方法u工厂模式与业务逻辑类设计4.1 使用连接池连接数据库 u数据源与连接池 在数据库的访问中,频繁连接和关闭数据库是 非常费时的。一种改进的方法就是使用数据源 技术。这种技术是,事先建立了多个数据库连 接,并将这些连接保存在连接池(Connect Pool)中,Java程序访问数据库时,只需从连 接池中取出空闲状态的数据库连接;当程序访 问数据库结束,再将数据库连接放回连接池, 这样做可以提高访问数据库的

2、效率。 数据源的核心接口是javax.sql.DataSource。 DataSource对象是由服务器提供的,因此不能在程 序中采用创建一个实例的方式生成DataSource对象 ,而需要采用Java的另一个技术JNDI (Java Naming and Directory Interface),来获得 DataSource对象的引用。JNDI是一种将对象和名字 绑定的技术,对象工厂负责生产出对象,这些对象都 和唯一的名字相绑定。程序中可以通过这个名字来获 得对象的引用。 在GlassFish中建立数据源 在Tomcat中建立数据源 (1)打开blog项目【配置文件】文件夹中的context

3、.xml文件 ,加入如下代码:(2)如果使用数据源连接数据库,可按如下方式编写 connect()方法:public static Connection connect() try Context ctx = new InitialContext();DataSource ds = (DataSource) ctx.lookup(“java:comp/env/jdbc/yb“);Connection con = ds.getConnection();return con; catch (Exception ex) return null; u案例4-1博客网站的辅助类设计 将常用的操作封装到类

4、中,可以提高代码的重用性,简化 程序设计。为此设计一个类MySQLHelper,用于连接 MySQL数据库,封装建立连接、关闭结果集、关闭预处 理、关闭连接等方法。并设计一个测试类 TestMySQLHelperServlet,测试MySQLHelper的使 用。连接成功显示如图4-7所示界面,否则显示如图4-8 所示界面。 技术要点u在程序中需要采用Java的另一个技术JNDI来获得 DataSource对象的引用。Tomcat把DataSource作为一种 可以配置的JNDI资源来处理。生成DataSource对象的工厂 为mons.dbcp.BasicDataSourceFactory

5、。u在javax.naming包中提供了Context接口,该接口 提供了将对象和名字绑定,以及通过名字检索对象的方法。在 应用中可以直接使用InitalContext类初始化Context,产生 一个上下文对象,然后通过lookup()方法检索数据源对象。u通过JNDI查找数据源,该JNDI为 java:comp/jdbc/yb,其中p/env是tomcat固定 的,tomcat提供的JNDI绑定都必须加该前缀;JDBC/yb是 定义数据源时给数据源起的名字。4.2 数据的基本操作 u数据操作的基本原理 1建立操作对象u操作对象是指能执行SQL语句的对象,如 Statement对象、Prep

6、areStatement对象。建立 这些对象,需要使用Connection对象。以建立 Statement为例,建立的方法为: Statement stmt = con.createStatement(); /con为连接对象uPreparedStatement是SQL预处理类接口 ,使用其实现类来处理SQL能大大提高系统的执行 效率。 2. 执行SQL Statement提供了三种执行SQL语句的方法:uResultSet executeQuery(String sql):执行 select语句,返回一个结果集。uint executeUpdate(String sql):执行 update

7、、insert、delete 等不需要返回结果集的SQL语 句。它返回一个整数,表示执行SQL语句影响的数据行数。uboolean execute(String sql):用于执行多个 结果集、多个更新结果(或者两者都有)的SQL语句。它返 回一个boolean值。如果第一个结果是ResultSet对象,返 回true;如果是整数,就返回false。取结果集时可以与 getMoreResultSet、getResultSet和 getUpdateCount结合来对结果进行处理。 PreparedStatement也有上述三个方法,但都不带参 数,因为在建立PreparedStatement对象

8、时已经指定 SQL语句。 3. 获得查询结果 如果SQL语句是查询语句,执行executeQuery()方 法返回的是ResultSet对象。 ResultSet对象是一个由查询结果构成的数据表。在 ResultSet中隐含着一个数据行指针,可使用如下方法 将指针移动到指定的数据行:uboolean absolute(int row):将指针移动到结果集 对象的某一行。uboolean first():将指针移动到结果集对象的第一行 。uboolean next():将指针移动到当前行的下一行。uboolean previous():将指针移动到当前行的前一 行。uboolean last()

9、:将指针移动到当前行的最后一行。u查询数据 1查询一条记录u如果查询的结果是一条记录(例如,根据主 键查询,就是一条记录),需要用if语句判断,并 且可把查询的结果存放在一个对象中。 2查询多条记录u如果查询的结果可能有多条记录,这时需要 用while循环,把每条记录存成一个对象,并把所 有的对象添到一个集合里。 u更新数据 1. 添加记录 添加记录的SQL语句格式如下: insert into 表名(字段名列表) values(值列表)例如,在文章类别数据表中添加一条记录: insert into yb_category(blog_id, category_title) values(2,编

10、程相关); 在Java中,使用PreparedStatement添加记录较方 便。基本的步骤是,首先创建一个带参的SQL语句, 然后利用连接对象建立PreparedStatement对象,再 调用PreparedStatement对象的executeUpdate() 方法。该方法返回一个整数,如果大于0表示添加成功 ,否则添加失败。 2. 修改记录u修改记录的SQL语句格式如下: update 表名 set 字段1 = 字段值 1 , 字段2 = 字段值2 where 特定条件例如,将分类号为3的分类名称修改为“热 点话题”: update yb_category set category_t

11、itle = 热点话题 where category_id=3u在Java中,修改记录与插入记录类似,只是 SQL语句不同。 3. 删除记录u删除记录的SQL语句格式如下: delete from 表名 where 特定条 件u例如,删除分类号为3的文章分类: delete from yb_category where category_id = 3u删除记录一般以主键作为条件。 u案例4-2 博客网站数据访问类的设计 博客网站的各数据访问类的设计模式基本相同,这里 先给出YbBlogDao和YbCategoryDao的设计。 技术要点u在blog.dao包中建立YbBlogDao和 YbCa

12、tegoryDao类,YbBlogDao实现IYbBlogDao接口, YbCategoryDao实现IYbCategoryDao接口;u每个操作方法都是先调用MySQLHelper类的 connect()方法建立连接,然后建立预处理对象。u通过预处理对象的executeUpdate()方法实现数据 更新,通过预处理对象的executeQuery()方法实现数据查询 。 4.3 数据分页 u按页查询数据 按页查询数据,即不是一次性查出所有数据,而是根据给定的页 号和和页的大小查出所需的数据。 1使用查询语句实现分页u对于MySQL数据库,Select语句中的limit选项可以用于分 页查询。

13、con = MySQLHelper.connect(); String sql = “select * from ys_article limit “ + (pageNo-1) * pageSize + “,“ + pageSize; ps = con.prepareStatement(sql); rs = ps.executeQuery();u对于SqlServer数据库,分页方法与MySQL不同的,查询 语句如下: String sql = “select top “ + pageSize + “ * from yb_article where article_id not in (sel

14、ect top “+(pageNo- 1)*pageSize+ “ article_id from yb_article“2. 使用PreparedStatement对象实现分页 在建立PreparedStatement对象时需要指定可滚动游 标,然后通过程序来实现分页。参见如下代码: pstmt = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = ps.executeQuery(); rs.absolute(pageNo - 1) * pageSize);

15、 int i = 0; while (rs.next() u例4-3 分页工具类及几个数据访问类设计 设计一个类PageList,该类实现了Plist接口,用于存放数据,同 时具有分页功能,能够根据记录数、页大小,页号等能够生成页 棒。此外,设计博文的数据访问类YbArticleDao,评论的数据访 问类YbReviewDao以及相册的数据访问类YbPictureDao。 技术要点u分页工具类命名为PageList,该类实现Plist接口,包含两 个属性pageBar和pageNumBar,分别用于存放普通分页棒和数字 分页棒。usetPage()传递分页参数(记录总数、页大小、页号,网址 )

16、,生成分页棒;getPageBar()和getPageNumBar()分别用于返 回普通分页棒和数字分页棒。uYbArticleDAO类实现IYbArticleDao接口, YbReviewDao实现IybReviewDao接口,YbPictureDAO类实现 IYbPictureDao接口。u数据分页采用MySQL查询语句的limit选项实现。 4.4 使用存储过程 u存储过程的定义 存储过程(Stored Procedure)是一组为了完成特定功能的 SQL语句集,经编译后存储在数据库中。用户通过指定存储过程 的名字并给出参数(如果该存储过程带有参数)来执行它。存储 过程是数据库中的一个重要对象,在数据库应用程序中经常使用 存储过程。 在MySQL中定义存储过程的基本格式如下: CREATE PROCEDURE 过程名 (IN|OUT|INOUT 参 数名

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号