一,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>

最新文章

  1. 使用flex布局通过order控制显示顺序
  2. JAVA的界面(Swing)
  3. [No00002D] “大学生还不如农民工”背后的“身份教育”困境
  4. Linux内核装载和启动一个可执行程序
  5. php进制转换函数
  6. Bridge 桥模式
  7. Oge中Mesh的渲染流程详述
  8. 使用UpdatePanel 页面脚本不起作用
  9. Hadoop上路-01_Hadoop2.3.0的分布式集群搭建
  10. 任务分发系统gearman
  11. 宽客的人&amp;amp;&amp;amp;事件映射
  12. Angular控制器
  13. angular 实现自定义样式下拉菜单
  14. cocos2d+TexturePackerGUI动画制作
  15. (转载)C# 枚举 FlagsAttribute用法
  16. (PAT)L2-004 这是二叉搜索树吗?(数据结构)
  17. div上下切换(新增、删除、上下div切换)
  18. Nginx 反向代理 -- 一路上的坑转载
  19. ECharts上手例子
  20. 杂七杂八的JavaScript

热门文章

  1. codeforces629C Famil Door and Brackets (dp)
  2. 2015 CCPC-C-The Battle of Chibi (UESTC 1217)(动态规划+树状数组)
  3. ABAP SY标签一览 .
  4. JS跨域笔记
  5. linux下查询域名或IP注册信息的操作记录(whois)
  6. 把DataTable 转换成Json格式,适用于EasyUI 绑定DataGrid
  7. Copy-VMFile
  8. 基于 OAuth 安全协议的 Java 应用编程1
  9. iOS开发多线程篇---atomic nonatomic区别
  10. jsp中的包含 include标签和ejb的小知识点