java dao JSP复习笔记——第10章 连接数据库 之 DAO设计模式

java dao JSP复习笔记——第10章 连接数据库 之 DAO设计模式

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

1、 所有的JDBC代码写在JSP页面之中java dao JSP复习笔记——第10章 连接数据库 之 DAO设计模式,维护困难

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

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

区分:J2EE的组件层次

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

*.jsp/

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

程序在变更数据库之后java dao JSP复习笔记——第10章 连接数据库 之 DAO设计模式,前台页面不会出现过多改变?

首先需要规定出整个模块之中对表的全部操作:

*增加

*删除

*修改

* 按ID查询

* 查询全部

* 模糊查询

按以上要求,规定出操作此张表的标准,之后只要针对于不同的数据库实现这些标准即可

在JAVA中只有通过接口可以定义出标准   DAO规定的就是一个接口

插入  针对对象插入

对象 VO、TO、POJO(值对象、传输对象、最根本的JAVA对象)

即:只包含属性和 、 方法的类

客户 – vo  DAO

VO的对象与表中的字段对应

定义好接口之后,要定义出接口的具体实现类,具体实现DAO接口中对数据库表的一切操作

可以发现以下的一个重要问题:

dao = new ();接口直接通过其子类实例化java dao,直接的影响就是程序在调用时必须知道具体的子类,这样会造成修改不方便

所以,必须使用工厂设计,是前台不关注于具体子类

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

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

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

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

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » java dao JSP复习笔记——第10章 连接数据库 之 DAO设计模式

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们