jsp DAO连接mysql_JSP复习笔记——第10章连接数据库之DAO设计模式-堕落天使-JavaEy......

本文主要是介绍jsp DAO连接mysql_JSP复习笔记——第10章连接数据库之DAO设计模式-堕落天使-JavaEy......,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前的开发可以发现以下问题:

1、 所有的JDBC代码写在JSP页面之中,维护困难

2、 JSP中不应该使用任何SQL包,即不能在JSP中直接使用java.sql.*,原因是JSP只关注于数据的显示,而不关心数据是从哪儿来,或向哪里存储

3、 所有的数据库操作代码最好使用PreparedStatement

区分:J2EE的组件层次

客户端? 表示层 ? 业务层 ? 数据层 ? 数据库

*.jsp/servlet

DAO属于J2EE数据层的操作

即:在DAO中封装一个表在一个项目中所应该具有的所有的操作

Java代码 icon_copy.gif icon_star.png

spinner.gifcreate table person

(

id varchar(32) notnullprimary key,

name varchar(20) notnull,

password varchar(20) notnull,

age varchar(20) notnull,

email varchar(20) notnull

);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-----------------------|

直接的好处:前台显示与后台逻辑操作分离

Java代码 icon_copy.gif icon_star.png

spinner.gifpackageorg.sky.darkness.factory ;

importorg.sky.darkness.dao.* ;

importorg.sky.darkness.dao.impl.* ;

publicclassDAOFactory

{

publicstaticPersonDAO getPersonDAOInstance()

{

returnnewPersonDAOImpl() ;

}

};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

Java代码 icon_copy.gif icon_star.png

spinner.gifpackageorg.sky.darkness.dao ;

importjava.util.* ;

importorg.sky.darkness.vo.* ;

// 规定出了操作person表在此项目里的全部方法

publicinterfacePersonDAO

{

// 增加操作

publicvoidinsert(Person person)throwsException ;

// 修改操作

publicvoidupdate(Person person)throwsException ;

// 删除操作

publicvoiddelete(String id)throwsException ;

// 按ID查询操作

publicPerson queryById(String id)throwsException ;

// 查询全部

publicList queryAll()throwsException ;

// 模糊查询

publicList queryByLike(String cond)throwsException ;

}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 ;}

Java代码 icon_copy.gif icon_star.png

spinner.gifpackageorg.sky.darkness.vo ;

// 值对象,包含属性,setter,getter方法

publicclassPerson

{

privateString id ;

privateString name ;

privateString password ;

privateintage ;

privateString email ;

// 生成getter、setter方法

publicvoidsetId(String id)

{

this.id = id ;

}

publicvoidsetName(String name)

{

this.name = name ;

}

publicvoidsetPassword(String password)

{

this.password = password ;

}

publicvoidsetAge(intage)

{

this.age = age ;

}

publicvoidsetEmail(String email)

{

this.email = email ;

}

publicString getId()

{

returnthis.id ;

}

publicString getName()

{

returnthis.name ;

}

publicString getPassword()

{

returnthis.password ;

}

publicintgetAge()

{

returnthis.age ;

}

publicString getEmail()

{

returnthis.email ;

}

};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 ;}};

Java代码 icon_copy.gif icon_star.png

spinner.gifpackageorg.sky.darkness.dao.impl ;

importjava.sql.* ;

importjava.util.* ;

importorg.sky.darkness.vo.* ;

importorg.sky.darkness.dbc.* ;

importorg.sky.darkness.dao.* ;

// 此类需要完成具体的数据库操作,需要JDBC代码

publicclassPersonDAOImplimplementsPersonDAO

{

// 增加操作

publicvoidinsert(Person person)throwsException

{

String sql ="INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)";

PreparedStatement pstmt =null;

DataBaseConnection dbc =null;

// 下面是针对数据库的具体操作

try

{

// 连接数据库

dbc =newDataBaseConnection() ;

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)

{

thrownewException("操作出现异常") ;

}

finally

{

// 关闭数据库连接

dbc.close() ;

}

}

// 修改操作

publicvoidupdate(Person person)throwsException

{

String sql ="UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?";

PreparedStatement pstmt =null;

DataBaseConnection dbc =null;

// 下面是针对数据库的具体操作

try

{

// 连接数据库

dbc =newDataBaseConnection() ;

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)

{

thrownewException("操作出现异常") ;

}

finally

{

// 关闭数据库连接

dbc.close() ;

}

}

// 删除操作

publicvoiddelete(String id)throwsException

{

String sql ="DELETE FROM person WHERE id=?";

PreparedStatement pstmt =null;

DataBaseConnection dbc =null;

// 下面是针对数据库的具体操作

try

{

// 连接数据库

dbc =newDataBaseConnection() ;

pstmt = dbc.getConnection().prepareStatement(sql) ;

pstmt.setString(1,id) ;

// 进行数据库更新操作

pstmt.executeUpdate() ;

pstmt.close() ;

}

catch(Exception e)

{

thrownewException("操作出现异常") ;

}

finally

{

// 关闭数据库连接

dbc.close() ;

}

}

// 按ID查询操作

publicPerson queryById(String id)throwsException

{

Person person =null;

String sql ="SELECT id,name,password,age,email FROM person WHERE id=?";

PreparedStatement pstmt =null;

DataBaseConnection dbc =null;

// 下面是针对数据库的具体操作

try

{

// 连接数据库

dbc =newDataBaseConnection() ;

pstmt = dbc.getConnection().prepareStatement(sql) ;

pstmt.setString(1,id) ;

// 进行数据库查询操作

ResultSet rs = pstmt.executeQuery() ;

if(rs.next())

{

// 查询出内容,之后将查询出的内容赋值给person对象

person =newPerson() ;

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)

{

thrownewException("操作出现异常") ;

}

finally

{

// 关闭数据库连接

dbc.close() ;

}

returnperson ;

}

// 查询全部

publicList queryAll()throwsException

{

List all =newArrayList() ;

String sql ="SELECT id,name,password,age,email FROM person";

PreparedStatement pstmt =null;

DataBaseConnection dbc =null;

// 下面是针对数据库的具体操作

try

{

// 连接数据库

dbc =newDataBaseConnection() ;

pstmt = dbc.getConnection().prepareStatement(sql) ;

// 进行数据库查询操作

ResultSet rs = pstmt.executeQuery() ;

while(rs.next())

{

// 查询出内容,之后将查询出的内容赋值给person对象

Person person =newPerson() ;

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)

{

thrownewException("操作出现异常") ;

}

finally

{

// 关闭数据库连接

dbc.close() ;

}

returnall ;

}

// 模糊查询

publicList queryByLike(String cond)throwsException

{

List all =newArrayList() ;

String sql ="SELECT id,name,password,age,email FROM person WHERE name LIKE ? or email LIKE ?";

PreparedStatement pstmt =null;

DataBaseConnection dbc =null;

// 下面是针对数据库的具体操作

try

{

// 连接数据库

dbc =newDataBaseConnection() ;

pstmt = dbc.getConnection().prepareStatement(sql) ;

// 设置模糊查询条件

pstmt.setString(1,"%"+cond+"%") ;

pstmt.setString(2,"%"+cond+"%") ;

// 进行数据库查询操作

ResultSet rs = pstmt.executeQuery() ;

while(rs.next())

{

// 查询出内容,之后将查询出的内容赋值给person对象

Person person =newPerson() ;

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)

{

thrownewException("操作出现异常") ;

}

finally

{

// 关闭数据库连接

dbc.close() ;

}

returnall ;

}

};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 ;}};

定义一个数据库连接类,她只负责数据库的连接:

Java代码 icon_copy.gif icon_star.png

spinner.gifpackageorg.sky.darkness.dbc ;

importjava.sql.* ;

// 主要功能就是连接数据库、关闭数据库

publicclassDataBaseConnection

{

privatefinalString DBDRIVER ="oracle.jdbc.driver.OracleDriver";

privatefinalString DBURL ="jdbc:oracle:thin:@localhost:1521:SKY";

privatefinalString DBUSER ="scott";

privatefinalString DBPASSWORD ="darkness";

privateConnection conn =null;

publicDataBaseConnection()

{

try

{

Class.forName(DBDRIVER) ;

this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

}

catch(Exception e)

{

}

}

// 取得数据库连接

publicConnection getConnection()

{

returnthis.conn ;

}

// 关闭数据库连接

publicvoidclose()

{

try

{

this.conn.close() ;

}

catch(Exception e)

{

}

}

};

这篇关于jsp DAO连接mysql_JSP复习笔记——第10章连接数据库之DAO设计模式-堕落天使-JavaEy......的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396268

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

可视化实训复习篇章

前言: 今天,我们来学习seaborn库可视化,当然,这个建立在Matplotlib的基础上,话不多说,进入今天的正题吧!当然,这个是《python数据分析与应用》书中,大家有需求的可以参考这本书。 知识点: Matplotlib中有两套接口分别是pyplot和pyylab,即绘图时候主要导入的是Matplotlib库下的两个子模块(两个py文件)matplotlib.pyplot和matp

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前