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 ...
随机推荐
- 使用Visual Studio 2013编写可维护的本地可视化(natvis)
在Visual Studio 2012中,我们介绍了创建可视化使用原生类型的能力natvis文件. Visual Studio 2013中包含了一些改进,使其更容易编写可视化的类,在内部利用收集来存储 ...
- FPGA开发板
kingst.cnblogs.com 各种应用需要的接口不同: 做数字信号处理的,需要有AD/DA, 做图像处理,需要有图像接口.如果是通信的,需要有通信的接口,例如PCI/LVDS等.... 然后根 ...
- PHP面向对象编程
IBM 教程:开始了解 PHP 中的对象 简明现代魔法 一篇很好的入门的Class 文章 - 技术分享 - php教程 少走弯路去学习面向对象编程 -- 简明现代魔法
- 浅谈js观察者模式
观察者模式又叫发布订阅模式,它可以让多个观察者对象同时监听某一个主题对象,即在一个事件发生时,不同的对象迅速对其进行相应.就比如当又人闯红灯,不同的人对这件事迅速发起响应,当然这个比喻不太恰当,不过在 ...
- redis多实例运行
有的时候会遇到一种情况,在一台服务器,一个redis实例会出现不够用的情况 那么这时我们可以创建多个实例,以满足不同的业务需求和功能需求 1.首先创建一个运行redis的普通用户 useradd -s ...
- 记RedisDesktopManager的一次崩溃
redis3.2的配置文件中有bind监听地址 bind 192.168.42.131默认bind的填写的127.0.0.1这样配置是只允许本地访问,如果想远程访问就改为本机网卡绑定的ip地址.我这边 ...
- 写一些有关android的东西吧,那时候玩android时候的一些笔记
写一些有关android的东西吧,那时候玩android时候的一些笔记
- 保留脚本中变量(dot)
脚本 d:\dot.ps1 内容如下: $hostwrite-host "hh"$m="pp"$a ="cc" 通过 . 方式运行脚本 ...
- \\ip 映射 指定的网络名不再可用
问题:\\ip 映射 指定的网络名不再可用 解决方法:服务器端打开服务列表 services.msc 启动两个进程 1.Computer Browser 2. Workstation 就正常了~~ ...
- [Angular 2] ROUTING IN ANGULAR 2 REVISITED
Let's say we have a list of contacts, click each contact, we can render a new route to get the detai ...