java web-----DAO设计模式(数据库访问)
一,DAO设计模式用于 j2ee 的数据层访问,包括五部分,
数据库连接类(包含数据库的连接与关闭操作的一个类),
VO类(私有变量与数据库表格对应,接收数据库中表格各字段内容),
DAO接口类(包含数据库的各项操作,增,删,改,查函数的定义),
DAO实现类(具体实现DAO接口中定义的数据库操作函数),
DAO工厂类(提供一个返回值为DAO接口类型的静态方法,获得DAO实现的实例)
以一个mysql数据库中简单的用户表(userid 自增长,username,password)为例的DAO各个模块:
1.数据库连接类:
package com.javaweb.dao; import java.sql.*; public class DBConnection
{
private final String DBDRIVER = "com.mysql.jdbc.Driver";
private final String DBURL = "jdbc:mysql://localhost:3306/javaweb";
private final String USER = "root";
private final String PASSWORD = "root";
private Connection conn=null; public DBConnection()
{
try
{
Class.forName(DBDRIVER);
this.conn = DriverManager.getConnection(DBURL,USER,PASSWORD);
} catch (ClassNotFoundException | SQLException e)
{
// TODO Auto-generated catch block
System.out.println("加载驱动失败");
} } public Connection getConnection()
{
return this.conn;
} public void close()
{
if(this.conn!=null)
{
try
{
this.conn.close();
} catch (SQLException e)
{
// TODO Auto-generated catch block
System.out.println("数据库连接关闭失败");
}
}
}
}
2.VO类:
package com.javaweb.dao; public class User
{
private int userid;
private String username;
private String password; public User()
{
// TODO Auto-generated constructor stub
} public int getUserid()
{
return userid;
}
public void setUserid(int userid)
{
this.userid = userid;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
} }
3.DAO接口:
package com.javaweb.dao;
import java.util.List; public interface UserDAO
{
public void insert(User user) throws Exception;
public void delete(int userid) throws Exception;
public void update(User user) throws Exception;
public User querryById(int userid) throws Exception;
public List querryALL() throws Exception;
}
4.DAO具体实现:
package com.javaweb.dao; import java.util.ArrayList;
import java.util.List;
import java.sql.*; public class UserDAOImpl implements UserDAO
{ @Override
public void insert(User user) throws Exception
{
// TODO Auto-generated method stub
DBConnection con = null;
PreparedStatement pstm = null;
String sql = "insert into user(username,password) values(?,?)"; try
{
con = new DBConnection();
pstm = con.getConnection().prepareStatement(sql);
pstm.setString(1, user.getUsername());
pstm.setString(2, user.getPassword());
pstm.executeUpdate();
if (pstm != null)
{
pstm.close();
}
} catch (Exception e)
{
// TODO Auto-generated catch block
System.out.println("插入数据操作异常");
} finally
{
if (con != null)
{
con.close();
}
}
} @Override
public void delete(int userid) throws Exception
{
// TODO Auto-generated method stub
DBConnection con = null;
PreparedStatement pstm = null;
String sql = "delete from user where userid=?"; try
{
con = new DBConnection();
pstm = con.getConnection().prepareStatement(sql);
pstm.setInt(1, userid);
pstm.executeUpdate();
if (pstm != null)
{
pstm.close();
}
} catch (Exception e)
{
// TODO Auto-generated catch block
System.out.println("删除数据操作异常");
} finally
{
if (con != null)
{
con.close();
}
}
} @Override
public void update(User user) throws Exception
{
// TODO Auto-generated method stub
// TODO Auto-generated method stub
DBConnection con = null;
PreparedStatement pstm = null;
String sql = "update user set username=?,password=? where userid=?"; try
{
con = new DBConnection();
pstm = con.getConnection().prepareStatement(sql);
pstm.setString(1, user.getUsername());
pstm.setString(2, user.getPassword());
pstm.setInt(3, user.getUserid());
pstm.executeUpdate();
if (pstm != null)
{
pstm.close();
}
} catch (Exception e)
{
// TODO Auto-generated catch block
System.out.println("更新数据操作异常,sql:"+sql);
} finally
{
if (con != null)
{
con.close();
}
}
} @Override
public User querryById(int userid) throws Exception
{
// TODO Auto-generated method stub
DBConnection con = null;
PreparedStatement pstm = null;
ResultSet rs=null;
User user=null;
String sql = "select * from user where userid=?"; try
{
//获取连接
con = new DBConnection();
//预处理语句
pstm = con.getConnection().prepareStatement(sql);
//设置参数
pstm.setInt(1, userid);
//执行查询
rs = pstm.executeQuery();
//获取结果
while(rs.next())
{
user = new User();
user.setUserid(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
}
if (pstm != null)
{
pstm.close();
}
} catch (Exception e)
{
// TODO Auto-generated catch block
System.out.println("查询数据操作异常 sql:"+sql);
} finally
{
if (con != null)
{
con.close();
}
}
return user;
} @Override
public List<User> querryALL() throws Exception
{
// TODO Auto-generated method stub
DBConnection con = null;
PreparedStatement pstm = null;
ResultSet rs=null;
List<User> lsu=new ArrayList<User>();
String sql = "select * from user"; try
{
//获取连接
con = new DBConnection();
//预处理语句
pstm = con.getConnection().prepareStatement(sql);
//执行查询,返回结果rs
rs = pstm.executeQuery();
//获取结果
while(rs.next())
{
User user = new User();
user.setUserid(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
lsu.add(user);
}
if (pstm != null)
{
pstm.close();
}
} catch (Exception e)
{
// TODO Auto-generated catch block
System.out.println("查询数据操作异常");
} finally
{
if (con != null)
{
con.close();
}
}
return lsu;
} }
5.DAO工厂(有效避免由于DAO实现改变导致的大量代码修改)
package com.javaweb.dao; public class DAOFactory
{
public static UserDAO getUserDAOInstance()
{
return new UserDAOImpl();
}
}
二,通过jsp调用相关函数即可进行数据库操作,省去了大量重复代码。
代码示例:
<%@page import="com.javaweb.dao.*"%>
<%@page import="org.eclipse.jdt.internal.compiler.apt.model.Factory"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
UserDAO userDAO = DAOFactory.getUserDAOInstance();
User user=new User();
user.setUsername("lu");
user.setPassword("123");
userDAO.insert(user);
%>
</body>
</html>
java web-----DAO设计模式(数据库访问)的更多相关文章
- java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】
DAO Data Access Object(数据訪问接口) 一.场景和问题 在Java程序中.常常须要把数据持久化,也须要获取持久化的数据.可是在进行数据持久化的过程中面临诸多问题(如:数据源 不同 ...
- java web面试技巧,数据库面试,java web轻量级开发面试教程
我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...
- Java的DAO设计模式
用java的DAO模式实现对一个学生实体的增加,查询操作. 1.建立一个学生实体类 Student.java public class Student { private String sid; pr ...
- Java基于数据源的数据库访问
☞ 概述 最早接触的Java访问数据库,是通过jdbc接口.后来工作之后,一般是在服务器(如weblogic)配置数据源,通过JNDI使用数据源:最近需要在程序中动态构造数据源,查了些资料,备录于此. ...
- 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例
EL应用 自定义一个标签,实现两个字符串的相加 1回顾 1.1servlet生命周期 init(ServletConfig) service ...
- java web dao 层和dao 实现层有什么好处
接口是为了屏蔽不同数据库的JDBC实现差异而出现的. 以常见的系统组织结构为例,管理系统里有一个部门department表用于存放部门信息,因为部门下面可能有子部门所以表中的字段要定义成类似树形结构的 ...
- Java Web中资源的访问路径
在web应用中,以“/”开头的是绝对路径,不以“/”开头的是相对路径. 在服务器端,通常都使用绝对路径.例如web.xml.struts.xml.servlet等的访问路径都是以“/”开始. 服务 ...
- Java Web开发——MySQL数据库的安装与配置
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RD ...
- Java web 自动备份数据库和log4j日志
利用监听自动备份 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns: ...
- Java Web下MySQL数据库的增删改查(二)
前文:https://www.cnblogs.com/Arisf/p/14095002.html 在之前图书管理系统上做了改进优化 图书管理系统v2 首先是项目结构: 1.数据库的连接: 1 pack ...
随机推荐
- UVALive-4287 Proving Equivalences 有向图的强连通分量+缩点
题意:有n个命题,已知其中的m个推导,要证明n个命题全部等价(等价具有传递性),最少还需要做出几次推导. 思路:由已知的推导可以建一张无向图,则问题变成了最少需要增加几条边能使图变成强连通图.找出所有 ...
- Esper系列(一)初探
Esper介绍 Esper是一个Java开发并且开源的轻量级和可扩展的事件流处理和复合事件处理引擎,并提供了定制的事件处理语言(EPL). 应用场景 某个用户在请求登录服务时,n秒内连续m次未登录成功 ...
- HW3.23
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- 委托demo
delegate bool Filter(string s); class test { static void Main() { Filter f=new Filter(A); Display(ne ...
- hdu 2711&&poj2182 Lost Cows (线段树)
从后往前查第一个为0的奶牛肯定应该排在第一个.每次从后往前找到第一个为0的数,这个数应该插在第j位.查找之后,修改节点的值为极大值,当整棵树的最小值不为0的时候查找结束. 至于这种查找修改的操作,再没 ...
- [转]freemaker格式化日期
转至:http://wentao365.iteye.com/blog/2047234 1.格式化日期 ${updated?string("yyyy-MM-dd HH:mm:ss") ...
- response对象详解
(响应 javax.servlet.http.HttpServletResponse) 方法名 说明 addCookie 添加一个Cookie对象 addHeader 添加Http文件指定名字头信息 ...
- SecureCRT学习之道:SecureCRT经常使用快捷键设置与字体设置方法
1:假设不想每次登陆都输入password,能够在你打开的session里邮件session option->login action 选中automate logon 双击ogin 和assw ...
- Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中scrollTo 与 scrollBy这两个函数的区别 . 首先 ,我们必须明白在Android ...
- PHP获取客户端和服务器IP地址
/** * 获取客户端IP地址 * @return string */ function get_client_ip() { if(getenv('HTTP_CLIENT_IP')){ $client ...