- 浏览: 464884 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
a1439226817:
能不能发下源码1439226817@qq.com
ExtJsCRUD组件实现 -
w923690968:
[list][*]引用[u][/u][/list]
[JS]Drag And Drop -
zhumingyuan:
您好!用的的是3.2.3版本,按照您的方法配置了一下,但是还是 ...
spring vmc3.1.1 下,通过AnnotationMethodHandlerAdapter配置webBindingInitializer失效解决方案 -
sumo084:
我把xDarkness-MultClrBubble-1.0.j ...
JAVA实现类泡泡屏保效果 -
sumo084:
求源码,楼主好人,630483738@qq.com,谢谢
JAVA实现类泡泡屏保效果
之前的开发可以发现以下问题:
1、 所有的JDBC代码写在JSP页面之中,维护困难
2、 JSP中不应该使用任何SQL包,即不能在JSP中直接使用java.sql.*,原因是JSP只关注于数据的显示,而不关心数据是从哪儿来,或向哪里存储
3、 所有的数据库操作代码最好使用PreparedStatement
区分:J2EE的组件层次
客户端 表示层 业务层 数据层 数据库
*.jsp/servlet
DAO属于J2EE数据层的操作
即:在DAO中封装一个表在一个项目中所应该具有的所有的操作
程序在变更数据库之后,前台页面不会出现过多改变?
首先需要规定出整个模块之中对person表的全部操作:
*增加
*删除
*修改
* 按ID查询
* 查询全部
* 模糊查询
按以上要求,规定出操作此张表的标准,之后只要针对于不同的数据库实现这些标准即可
在JAVA中只有通过接口可以定义出标准 DAO规定的就是一个接口
插入 针对对象插入
对象 VO、TO、POJO(值对象、传输对象、最根本的JAVA对象)
即:只包含属性和 setter、 getter方法的类
客户 – vo DAO
VO的对象与表中的字段对应
定义好接口之后,要定义出接口的具体实现类,具体实现DAO接口中对数据库表的一切操作
可以发现以下的一个重要问题:
PersonDAO dao = new PersonDAOImpl();接口直接通过其子类实例化,直接的影响就是程序在调用时必须知道具体的子类,这样会造成修改不方便
所以,必须使用工厂设计,是前台不关注于具体子类
DAO整体设计,是采用以下模式:
调用处 DAO工厂 具体子类实现 完成数据库操作
|------------------|------------VO-----------------------|
直接的好处:前台显示与后台逻辑操作分离
--PersonDAO.java
定义一个数据库连接类,她只负责数据库的连接:
1、 所有的JDBC代码写在JSP页面之中,维护困难
2、 JSP中不应该使用任何SQL包,即不能在JSP中直接使用java.sql.*,原因是JSP只关注于数据的显示,而不关心数据是从哪儿来,或向哪里存储
3、 所有的数据库操作代码最好使用PreparedStatement
区分:J2EE的组件层次
客户端 表示层 业务层 数据层 数据库
*.jsp/servlet
DAO属于J2EE数据层的操作
即:在DAO中封装一个表在一个项目中所应该具有的所有的操作
create table person ( id varchar(32) not null primary key, name varchar(20) not null, password varchar(20) not null, age varchar(20) not null, email varchar(20) not null );
程序在变更数据库之后,前台页面不会出现过多改变?
首先需要规定出整个模块之中对person表的全部操作:
*增加
*删除
*修改
* 按ID查询
* 查询全部
* 模糊查询
按以上要求,规定出操作此张表的标准,之后只要针对于不同的数据库实现这些标准即可
在JAVA中只有通过接口可以定义出标准 DAO规定的就是一个接口
插入 针对对象插入
对象 VO、TO、POJO(值对象、传输对象、最根本的JAVA对象)
即:只包含属性和 setter、 getter方法的类
客户 – vo DAO
VO的对象与表中的字段对应
定义好接口之后,要定义出接口的具体实现类,具体实现DAO接口中对数据库表的一切操作
可以发现以下的一个重要问题:
PersonDAO dao = new PersonDAOImpl();接口直接通过其子类实例化,直接的影响就是程序在调用时必须知道具体的子类,这样会造成修改不方便
所以,必须使用工厂设计,是前台不关注于具体子类
DAO整体设计,是采用以下模式:
调用处 DAO工厂 具体子类实现 完成数据库操作
|------------------|------------VO-----------------------|
直接的好处:前台显示与后台逻辑操作分离
package org.sky.darkness.factory ; import org.sky.darkness.dao.* ; import org.sky.darkness.dao.impl.* ; public class DAOFactory { public static PersonDAO getPersonDAOInstance() { return new PersonDAOImpl() ; } };
--PersonDAO.java
package org.sky.darkness.dao ; import java.util.* ; import org.sky.darkness.vo.* ; // 规定出了操作person表在此项目里的全部方法 public interface PersonDAO { // 增加操作 public void insert(Person person) throws Exception ; // 修改操作 public void update(Person person) throws Exception ; // 删除操作 public void delete(String id) throws Exception ; // 按ID查询操作 public Person queryById(String id) throws Exception ; // 查询全部 public List queryAll() throws Exception ; // 模糊查询 public List queryByLike(String cond) throws Exception ; }
package org.sky.darkness.vo ; // 值对象,包含属性,setter,getter方法 public class Person { private String id ; private String name ; private String password ; private int age ; private String email ; // 生成getter、setter方法 public void setId(String id) { this.id = id ; } public void setName(String name) { this.name = name ; } public void setPassword(String password) { this.password = password ; } public void setAge(int age) { this.age = age ; } public void setEmail(String email) { this.email = email ; } public String getId() { return this.id ; } public String getName() { return this.name ; } public String getPassword() { return this.password ; } public int getAge() { return this.age ; } public String getEmail() { return this.email ; } };
package org.sky.darkness.dao.impl ; import java.sql.* ; import java.util.* ; import org.sky.darkness.vo.* ; import org.sky.darkness.dbc.* ; import org.sky.darkness.dao.* ; // 此类需要完成具体的数据库操作,需要JDBC代码 public class PersonDAOImpl implements PersonDAO { // 增加操作 public void insert(Person person) throws Exception { String sql = "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ; PreparedStatement pstmt = null ; DataBaseConnection dbc = null ; // 下面是针对数据库的具体操作 try { // 连接数据库 dbc = new DataBaseConnection() ; pstmt = dbc.getConnection().prepareStatement(sql) ; pstmt.setString(1,person.getId()) ; pstmt.setString(2,person.getName()) ; pstmt.setString(3,person.getPassword()) ; pstmt.setInt(4,person.getAge()) ; pstmt.setString(5,person.getEmail()) ; // 进行数据库更新操作 pstmt.executeUpdate() ; pstmt.close() ; } catch (Exception e) { throw new Exception("操作出现异常") ; } finally { // 关闭数据库连接 dbc.close() ; } } // 修改操作 public void update(Person person) throws Exception { String sql = "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ; PreparedStatement pstmt = null ; DataBaseConnection dbc = null ; // 下面是针对数据库的具体操作 try { // 连接数据库 dbc = new DataBaseConnection() ; pstmt = dbc.getConnection().prepareStatement(sql) ; pstmt.setString(1,person.getName()) ; pstmt.setString(2,person.getPassword()) ; pstmt.setInt(3,person.getAge()) ; pstmt.setString(4,person.getEmail()) ; pstmt.setString(5,person.getId()) ; // 进行数据库更新操作 pstmt.executeUpdate() ; pstmt.close() ; } catch (Exception e) { throw new Exception("操作出现异常") ; } finally { // 关闭数据库连接 dbc.close() ; } } // 删除操作 public void delete(String id) throws Exception { String sql = "DELETE FROM person WHERE id=?" ; PreparedStatement pstmt = null ; DataBaseConnection dbc = null ; // 下面是针对数据库的具体操作 try { // 连接数据库 dbc = new DataBaseConnection() ; pstmt = dbc.getConnection().prepareStatement(sql) ; pstmt.setString(1,id) ; // 进行数据库更新操作 pstmt.executeUpdate() ; pstmt.close() ; } catch (Exception e) { throw new Exception("操作出现异常") ; } finally { // 关闭数据库连接 dbc.close() ; } } // 按ID查询操作 public Person queryById(String id) throws Exception { Person person = null ; String sql = "SELECT id,name,password,age,email FROM person WHERE id=?" ; PreparedStatement pstmt = null ; DataBaseConnection dbc = null ; // 下面是针对数据库的具体操作 try { // 连接数据库 dbc = new DataBaseConnection() ; pstmt = dbc.getConnection().prepareStatement(sql) ; pstmt.setString(1,id) ; // 进行数据库查询操作 ResultSet rs = pstmt.executeQuery() ; if(rs.next()) { // 查询出内容,之后将查询出的内容赋值给person对象 person = new Person() ; person.setId(rs.getString(1)) ; person.setName(rs.getString(2)) ; person.setPassword(rs.getString(3)) ; person.setAge(rs.getInt(4)) ; person.setEmail(rs.getString(5)) ; } rs.close() ; pstmt.close() ; } catch (Exception e) { throw new Exception("操作出现异常") ; } finally { // 关闭数据库连接 dbc.close() ; } return person ; } // 查询全部 public List queryAll() throws Exception { List all = new ArrayList() ; String sql = "SELECT id,name,password,age,email FROM person" ; PreparedStatement pstmt = null ; DataBaseConnection dbc = null ; // 下面是针对数据库的具体操作 try { // 连接数据库 dbc = new DataBaseConnection() ; pstmt = dbc.getConnection().prepareStatement(sql) ; // 进行数据库查询操作 ResultSet rs = pstmt.executeQuery() ; while(rs.next()) { // 查询出内容,之后将查询出的内容赋值给person对象 Person person = new Person() ; person.setId(rs.getString(1)) ; person.setName(rs.getString(2)) ; person.setPassword(rs.getString(3)) ; person.setAge(rs.getInt(4)) ; person.setEmail(rs.getString(5)) ; // 将查询出来的数据加入到List对象之中 all.add(person) ; } rs.close() ; pstmt.close() ; } catch (Exception e) { throw new Exception("操作出现异常") ; } finally { // 关闭数据库连接 dbc.close() ; } return all ; } // 模糊查询 public List queryByLike(String cond) throws Exception { List all = new ArrayList() ; String sql = "SELECT id,name,password,age,email FROM person WHERE name LIKE ? or email LIKE ?" ; PreparedStatement pstmt = null ; DataBaseConnection dbc = null ; // 下面是针对数据库的具体操作 try { // 连接数据库 dbc = new DataBaseConnection() ; pstmt = dbc.getConnection().prepareStatement(sql) ; // 设置模糊查询条件 pstmt.setString(1,"%"+cond+"%") ; pstmt.setString(2,"%"+cond+"%") ; // 进行数据库查询操作 ResultSet rs = pstmt.executeQuery() ; while(rs.next()) { // 查询出内容,之后将查询出的内容赋值给person对象 Person person = new Person() ; person.setId(rs.getString(1)) ; person.setName(rs.getString(2)) ; person.setPassword(rs.getString(3)) ; person.setAge(rs.getInt(4)) ; person.setEmail(rs.getString(5)) ; // 将查询出来的数据加入到List对象之中 all.add(person) ; } rs.close() ; pstmt.close() ; } catch (Exception e) { throw new Exception("操作出现异常") ; } finally { // 关闭数据库连接 dbc.close() ; } return all ; } };
定义一个数据库连接类,她只负责数据库的连接:
package org.sky.darkness.dbc ; import java.sql.* ; // 主要功能就是连接数据库、关闭数据库 public class DataBaseConnection { private final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ; private final String DBURL = "jdbc:oracle:thin:@localhost:1521:SKY" ; private final String DBUSER = "scott" ; private final String DBPASSWORD = "darkness" ; private Connection conn = null ; public DataBaseConnection() { try { Class.forName(DBDRIVER) ; this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; } catch (Exception e) { } } // 取得数据库连接 public Connection getConnection() { return this.conn ; } // 关闭数据库连接 public void close() { try { this.conn.close() ; } catch (Exception e) { } } };
发表评论
-
Flex端使用alivepdf直接导出PDF文件:测试中文有乱码
2011-07-21 16:15 2861Flex端使用alivepdf直接导出PDF文件:测试中文有乱 ... -
关于Project facet Java 6.0 is not supported的问题解决方案
2009-09-21 10:33 2104今天在Eclipse下发布使用java6.0的项目时遇到了“P ... -
JAVA日期格式化
2009-09-04 16:02 1617JAVA日期格式化直接使用SimpleDateFormat类, ... -
MyEclipse7.x下VSS(Visual SourceSafe)的安装和使用
2009-09-01 11:05 2083一、下载VSS插件 可以去官方网站下载,也可以在这里ht ... -
使JfreeChart横坐标数据换行显示
2009-08-31 20:50 6416在jfreechart中如果横坐标的数据太多显示的时候会变成 ... -
Struts2整合Freemarker生成静态页面
2009-08-10 09:42 6334这是生成静态页面的预览: 其对应的模板文件: & ... -
Struts2与Spring整合
2009-08-05 21:51 1315【先引入struts2、spring相 ... -
The method getJspApplicationContext(ServletContext) is undefined for the type
2009-07-08 10:45 10825The method getJspApplicationCo ... -
Java Base64类库学习笔记
2009-06-26 14:12 1860Java Base64 这是一个用于编码和解码(encode/ ... -
base64_encode和base64_decode的JAVA实现
2009-06-26 13:32 8235Base64是网络上最常见的用于传输8Bit字节代码的编码方式 ... -
Struts2参数传递
2009-05-01 08:07 6678要使用struts2,首先需要 ... -
OGNL入门
2009-05-01 07:30 3598package org.darkness.ognl.tes ... -
JSP复习笔记——文件上传
2009-04-28 11:57 1237SmartUpload主要的功能是上传文件 上传图片,可以通过 ... -
JSP复习笔记——第11章 JSP 构架和MVC设计模式
2009-04-28 11:56 131911.1 JSP Model I 体系结构 ... -
JSP复习笔记——第10章 连接数据库 之 JDBC相关
2009-04-28 11:00 1168批处理: import java.sql.*; publ ... -
JSP复习笔记——第10章 连接数据库 之 jsp+DAO实现留言管理程序
2009-04-28 10:57 1848案例-jsp+DAO实现留言管理程序 ------------ ... -
JSP复习笔记——第10章 连接数据库 之 使用JSP+DAO完成用户登陆
2009-04-28 10:52 1006使用JSP+DAO完成用户登陆 import java. ... -
JSP复习笔记——第10章 连接数据库 之 JSP+JDBC留言管理程序
2009-04-28 10:48 1347JSP+JDBC留言管理程序 -- 创建表 -- 用户表 ... -
JSP复习笔记——第10章 连接数据库 之 使用JSP基于数据库完成用户登陆程序
2009-04-28 10:45 1368使用JSP基于数据库完成用户登陆程序 使用Statement存 ... -
JSP复习笔记——第10章 连接数据库 之 使用数据源
2009-04-28 10:43 904JDBC基本操作过程: 打开数据库连接 操作数据库 ...
相关推荐
本篇复习笔记主要关注的是JSP构架以及MVC(Model-View-Controller)设计模式的应用。 MVC设计模式是软件工程中的一种架构模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)...
"笔记.pdf"可能包含了关于如何理解和实现DAO设计模式以及JSP和JDBC交互的详细说明。"简介.txt"可能简述了这个程序的主要功能和实现方式,帮助初学者快速了解项目背景和目标。 **代码** 项目中的"代码"文件夹应该...
总结来说,这个笔记讨论了如何在JSP和MVC两种不同的架构下,结合DAO模式实现MySQL数据库的分页功能,强调了代码封装和模块化的重要性,以及MVC模式在提高代码可读性和可维护性上的优势。在实际开发中,理解并熟练...
DAO模式是一种设计模式,用于在应用程序中处理数据访问。DAO对象提供了一种封装数据库操作的方式,使得业务逻辑与数据存储细节解耦。通过DAO,开发者可以编写独立于具体数据库实现的代码,提高代码的可复用性和可...
DAO是软件设计模式之一,用于分离业务逻辑层和数据访问层,使得代码更易于维护和测试。创建一个UserDAO接口,包含方法如`login(String username, String password)`,并在其实现类中编写SQL查询来验证用户凭证。 3....
首先,我们来看DAO设计模式的核心思想。DAO模式提供了一个接口,该接口定义了对特定数据源进行操作的方法,比如增删改查。在JSP应用中,DAO作为与数据库交互的中间层,使得JSP页面不再直接处理SQL语句,降低了耦合度...
**二、DAO设计模式** DAO模式是Java应用中用于访问数据库的标准模式,它的主要目标是分离业务逻辑层与数据访问层,使得代码更易于维护和测试。DAO类负责执行对数据库的CRUD(Create, Read, Update, Delete)操作,...
结合MVC(Model-View-Controller)设计模式,可以实现更高效、更清晰的代码组织结构,便于维护和扩展。本文将深入探讨如何运用JSP与Servlet技术,基于MVC模式来设计和编写网站。 #### MVC模式解析 MVC模式是一种...
《JSP数据库开发实例精粹》一书,虽然主要探讨的是基于.Net技术的PetShop应用,但其中涉及的软件架构和设计模式对于JSP数据库开发同样具有指导意义。以下是该书主要内容的概述和相关知识点: 1. **PetShop概述**: ...
Java Web开发是基于Java技术栈进行Web应用程序开发的一系列技术和框架的集合,除了JSP和Servlet,还可能涉及到Java EE规范、MVC模式、DAO设计模式、JNDI、JTA等概念。 【压缩包子文件的文件名称列表】暗示了学习...
通过这些项目的学习,开发者可以掌握JSP基本语法、表单处理、JDBC数据库操作、DAO设计模式以及MVC架构的应用。每个项目都提供了代码和笔记,可以帮助学习者逐步理解并应用这些概念。对于初学者,这是一个很好的实战...
每个项目不仅提供了完整的代码实现,还有配套的笔记,有助于理解各个项目的实现逻辑和设计模式。 1. **项目02_使用JSP完成简单的登陆程序(代码+笔记)** 这个项目主要讲解如何使用JSP实现一个基本的登录功能。通过...
这些项目涵盖了JSP基础到进阶应用,旨在帮助学习者更好地理解和掌握JSP、JDBC、DAO设计模式以及MVC架构在实际开发中的应用。 首先,我们来深入了解**JSP(JavaServer Pages)**。JSP是一种动态网页技术,它允许...
2. **DAO设计模式**:DAO(Data Access Object)模式是用于与数据库交互的一种设计模式。它为业务对象提供了抽象接口,隐藏了数据库访问的细节。在留言管理程序中,DAO负责执行SQL语句,对留言进行增删改查操作。 3...
通过这些项目,开发者不仅可以学习到JSP的基本语法和使用方法,还能了解如何在实际项目中应用MVC模式、DAO设计模式,以及如何处理用户认证和数据管理。这些项目涵盖了从简单到复杂的应用场景,为初学者提供了良好的...
- 可能的目录结构包括:`src/main/java`(存放Java代码,如Model、Controller、DAO等)、`src/main/resources`(存放数据库连接配置等资源)、`Web-INF`(存放web.xml配置文件和JSP页面)。 5. **实际应用场景**:...
2. **DAO设计模式**:DAO模式是软件设计模式之一,用于在业务逻辑和数据存储之间创建抽象层,使得数据访问独立于具体的数据库实现。在本例中,DAO类负责与数据库进行交互,如执行SQL查询、插入、更新和删除等操作。 ...
数据访问对象(DAO)模式是一种设计模式,旨在将业务逻辑与数据访问代码分离。在本项目中,DAO类负责与数据库进行交互,包括添加、查询、更新和删除留言记录。通过使用DAO,我们可以在不修改业务逻辑的情况下更换...
【DAO设计模式】:DAO模式是一种常用的设计模式,它的主要作用是将数据访问操作封装起来,提供一个接口供业务层调用,从而将业务逻辑与数据访问逻辑分离。在本项目中,DAO类负责执行SQL语句,处理与数据库相关的操作...