DAO设计模式

Wesley13
• 阅读 717

jsp只关注于数据的显示,而不关心数据是从哪里来,所以jsp中不应该使用任何sql包,数据库操作代码最好使用PreparedStatement。

j2ee的组件层次:客户端-->表示层-->业务层-->数据层

DAO属于j2ee数据层的操作,操作数据库,DAO封装了数据库中表的全部操作。

实例:

假设表:

 create table person
 (
  id varchar(32) primary key not null,
 name varchar(20) not null,
 password varchar(20) not null,
 age varchar(20) not null,
 email varchar(20) not null
 );

那么DAO则规定了操作person表或person对象的接口

针对对象插入,而对象包括值对象(VO),传输对象(TO),最根本的java对象(POJO)

客户通过VO操作DAO

DAO设计模式其实就是把数据库中的表用类描述为对象,然后规定该对象的数据库操作接口,最后实现该接口的类。

1,类描述的对象

package cn.lxh.vo;

public class Person {

 public String id;
 
 public String name;
 
 public String password;
 
 public String age;
 
 public String email;
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String getAge() {
  return age;
 }
 public void setAge(String age) {
  this.age = age;
 }
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
 
 
}

2,对象操作接口

package cn.lxh.dao;

import java.util.List;
import cn.lxh.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 void queryById(String id) throws Exception;
 //查询全部
 public List queryAll() throws Exception;
 //模糊查询
 public List queryByLike(String cond) throws Exception; 
}

3,实现该接口的类(数据库操作代码)

数据库连接/关闭类

package cn.lxh.dbc;

import java.sql.*;

public class DataBaseConnection {

 //驱动程序
 private String url="oracle.jdbc.driver.OracleDriver";
 
 //数据库连接字符串
 private String conStr="jdbc:oracle:thin:@192.168.1.113:1521:orcl";
 
 //连接对象
 private Connection con=null;
 
    //对象在实例化的时候自动连接数据库
 public DataBaseConnection() throws Exception
 {
  Class.forName(url);
  this.con=DriverManager.getConnection(conStr);
 }
 
 //取得连接
 public Connection getCon()
 {
  return this.con;
 }
 
 //关闭数据库
 public void closeDba() throws SQLException
 { 
  con.close();
 }
 
}

对象操作数据库类

package cn.lxh.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import cn.lxh.dao.PersonDAO;
import cn.lxh.vo.Person;
import cn.lxh.dbc.*;

public class PersonDAOImpl implements PersonDAO {

 public void delete(String id) throws Exception {

 }

 public void insert(Person person) throws Exception {
       String sql="insert into person(id,name,password,age,email) values(?,?,?,?,?) ";
       Connection con=null;
       DataBaseConnection conn =null;
       try 
       {
   conn = new DataBaseConnection();
   con= conn.getCon();
   PreparedStatement prepare = con.prepareStatement(sql);
   prepare.setString(0, "1");
   prepare.setString(1, "jin");
   prepare.setString(2, "123");
   prepare.setString(3, "14");
   prepare.setString(4, "932654256@qq.com");
   prepare.executeUpdate();
   prepare.close();
  }
         catch (Exception e) {
   throw new Exception("出现错误!");
  }
  finally
  {
   conn.closeDba();
  }
 }

 public List queryAll() throws Exception {
  return null;
 }

 public void queryById(String id) throws Exception {
         String sql="select * from person where id=?";
         DataBaseConnection con=null;
         try {
   con = new DataBaseConnection();
   Connection conn = con.getCon();
   PreparedStatement preState = conn.prepareStatement(sql);
   preState.setString(0, "1");
   ResultSet rs = preState.executeQuery();
   if(rs.next()) {
    Person person = new Person();
    person.setId(rs.getString(1));
   }
   preState.close();
  } catch (Exception e) {
   throw new Exception("出现错误!");
  }finally
  {
   con.closeDba();
  }
 }

 public List queryByLike(String cond) throws Exception {
  List list=new ArrayList();
  String sql="select * from person where name like ?";
         DataBaseConnection con=null;
         try {
   con = new DataBaseConnection();
   Connection conn = con.getCon();
   PreparedStatement preState = conn.prepareStatement(sql);
   preState.setString(0, "%"+cond+"%");
   ResultSet rs = preState.executeQuery();
   while (rs.next()) {
    Person person = new Person();
    person.setId(rs.getString(1));
    list.add(person);
   }
   preState.close();
  } catch (Exception e) {
   throw new Exception("出现错误!");
  }finally
  {
   con.closeDba();
  }
  return list;
 }

 public void update(Person person) throws Exception {

 }

}

jsp页面代码:

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="cn.lxh.dao.*"%>
<%@ page import="cn.lxh.dao.impl.*"%>
<%@ page import="cn.lxh.vo.*"%>
<%@ page import="cn.lxh.dbc.*"%>

<%
 Person person=new Person();
 person.setId("jin");
 PersonDAO dao=new PersonDAOImpl();
 try
 {
  dao.insert(person);
 }
 catch(Exception e)
 {
   throw new Exception("出现错误!");
 }
%>

DAO设计模式

http://www.cnblogs.com/jinzhengquan/archive/2011/02/11/1951323.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Wesley13 Wesley13
3年前
java中的VO DTO DAO
VO是跟数据库里表的映射,一个表对应一个VODAO是用VO来访问真实的表,对数据库的操作都在DAO中完成BO是业务层,做逻辑处理的VO,PO,BO,QO,DAO,POJOO/RMapping是ObjectRelationalMapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示
Stella981 Stella981
3年前
JSP+Servlet+JavaBean实现数据库的增删改查
基本思想:JSP文件显示页面,使用form或href超链接传值到Servlet中方法,在Servlet方法中调用Dao层的类对象,实现对数据库里的数据的增删改查,之后重新返回到JSP输出操作完的结果。共分为四个包和对应的JSP文件:1.DB包:建立连接数据库的方法,以及关闭操作数据库的方法。2.Servlet包:①接受来自JSP页面的参数,将这些
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Wesley13 Wesley13
3年前
Java web
上次我们已经搞完了jsp的操作。现在该是后台的配置了。在dao包里面进行数据链接:DBConn.java/   //  @author Administrator  /package dao;import java.sql.;
Stella981 Stella981
3年前
31_java之项目中的数据库操作
01项目训练目标A:项目训练目标a:项目目标综合运用前面所学习的知识点熟练View层、Service层、Dao层之间的方法相互调用操作、熟练dbutils操作数据库表完成增删改查了解公司项