日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DAO设计模式总结

發布時間:2023/12/18 编程问答 52 如意码农
生活随笔 收集整理的這篇文章主要介紹了 DAO设计模式总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.DAO(Data Access Object,數據訪問對象),主要的功能是用于進行數據操作的,在程序的標準開發框架中屬于數據層的操作。

數據開發結構流程:

資源層是數據庫的操作層,里面可以進行各種數據庫的存儲,但是這些數據存儲的時候肯定是依靠SQL語句,數據層通過一個專門的數據庫組件完成對數據庫的操作

業務層是整個項目的核心

2.DAO組成結構:

  • DatabaseConnection:專門負責數據庫打開與關閉操作的類。
  • VO:主要由屬性,setter, getter方法組成,VO類中的屬性與表中的字段相對應,每一個VO類的對象都表示表中的每一條記錄。
  • DAO:主要定義操作的接口,定義一系列數據庫的原子性操作,例如增刪改查等。
  • Impl: DAO接口的真實實現類,主要完成具體數據庫操作,但不負責數據庫的打開和關閉。
  • Proxy:代理實現類,主要完成數據庫的打開和關閉并且調用真實實現類對象的操作。
  • Factory: 工廠類,通過工廠類取得一個DAO的實例化對象。

3.對于包的命名:

  • 數據庫連接: xxx.dbc.DatabaseConnection
  • DAO接口: xxx.dao.IXxxDAO
  • DAO接口真實實現類:xxx.dao.impl.XxxDAOImpl
  • DAO接口代理實現類:xxx.dao.proxy.XxxDAOProxy
  • VO類: xxx.vo.Xxx, VO命名要與表的命名一致
  • 工廠類:xxx.factory.DAOFactory.

4.DAO開發:

4.1數據庫腳本如下:

create database DAO

create table Login(
UserID varchar(30) primary key,
name varchar(30),
password varchar(15)
); INSERT INTO login(UserID, name, password)VALUES('admin', 'admin', 'admin'); select * from login

4.2定義VO類,VO類有數據的屬性以及setter,getter方法,代碼如下:

package org.lxh.VO;

public class voDemo {
private String userid;
private String name;
private String password;
public void setUserid(String userid){
this.userid=userid;
}
public void setName(String name){
this.name=name;
}
public void setPassword(String password){
this.password=password;
}
public String getUserid(){
return this.userid;
}
public String getName(){
return this.name;
}
public String getPassword(){
return this.password;
}
}

4.3實現DateBaseConnection類,代碼如下:

package org.lxh.dbc;

import java.sql.Connection;
import java.sql.DriverManager;
public class DateBaseConnection {
private static final String DBDRIVER=
"com.microsoft.sqlserver.jdbc.SQLServerDriver";//SQLserver數據庫引擎
private static final String DBURL=
"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=DAO";//數據源
private static final String DBUER="sa";//SQLserver數據庫用戶名
private static final String DBPASSWORD="123";//SQLserver登錄密碼
private Connection conn=null; //聲明數據庫連接對象
public DateBaseConnection() throws Exception{//在構造方法中連接數據庫
Class.forName(DBDRIVER); //加載驅動程序
this.conn=DriverManager.getConnection(DBURL,DBUER,DBPASSWORD);//連接數據庫
}
public Connection getConnection(){//取得數據庫的連接
return this.conn;
}
public void close() throws Exception{//數據庫的關閉操作
if(this.conn!=null){
try{
this.conn.close();//數據庫關閉
System.out.println("數據庫連接成功");
}catch(Exception e){
throw e;
}
System.out.println("數據庫連接失敗");
}
}
}

4.4定義DAO操作接口,代碼如下:

package org.lxh.dao;

import org.lxh.VO.voDemo;

public interface IvoDemo {
//驗證登錄,有異常交給被調處處理
public boolean findLogin(voDemo vodemo) throws Exception;
}

4.5定義實現DAO接口類操作,代碼如下:

package org.lxh.dao.impl;

import java.sql.*;

import org.lxh.VO.voDemo;
import org.lxh.dao.IvoDemo;
/**
*
* DAO實現類,實現方法,但不負責數據庫的具體連接 ,真實主題實現類
*
*/
public class voDemoDAOImpl implements IvoDemo{
private Connection conn = null; //定義數據庫的連接對象
private PreparedStatement pstmt = null; //定義數據庫操作對象
public voDemoDAOImpl(Connection conn){ // 構造方法,設置數據庫連接
this.conn = conn;
}
/**
* 具體操作方法:查詢 ,覆寫DAO接口類
*/
public boolean findLogin(voDemo vodemo) throws Exception{
boolean flag = false; //定義標志位
try{
String sql = "SELECT name FROM Login WHERE UserID = ? AND password = ?";
this.pstmt = this.conn.prepareStatement(sql); // 實例化操作
this.pstmt.setString(1, vodemo.getUserid()); // 設置用戶id
this.pstmt.setString(2, vodemo.getPassword()); // 設置password
ResultSet rs = this.pstmt.executeQuery(); // 取得查詢結果
if(rs.next()){
vodemo.setName(rs.getString(1)); //取得姓名
flag = true;
}
}catch(Exception e){
throw e;
}
return flag;
}
}

4.6定義代理主題實現類,代碼如下;

package org.lxh.dao.Proxy;

import org.lxh.VO.voDemo;
import org.lxh.dao.IvoDemo;
import org.lxh.dao.impl.voDemoDAOImpl;
import org.lxh.dbc.DateBaseConnection; public class voDemoDAOProxy implements IvoDemo {
private DateBaseConnection dbc = null;
private IvoDemo dao = null;
public voDemoDAOProxy() { //構造方法,實例化連接,同時實例化dao對象
try {
this.dbc = new DateBaseConnection(); // 連接數據庫
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.dao = new voDemoDAOImpl(this.dbc.getConnection()); //實例化真實主題類
}
public boolean findLogin(voDemo vodemo) throws Exception{ // 實現接口中的方法。
boolean flag = false; //定義標志位
try{
flag = this.dao.findLogin(vodemo); // 調用真實主題
}catch(Exception e){
throw e; //向上拋出異常
}finally{
this.dbc.close();
}
return flag; //返回標記
} }

4.7DAO工廠實現類操作,代碼如下:

package org.lxh.factory;

import org.lxh.dao.IvoDemo;
import org.lxh.dao.Proxy.voDemoDAOProxy; public class DAOFactory {
public static IvoDemo getIvoDemoDAOInstance() throws Exception{
return new voDemoDAOProxy();
}
}

4.8定義servlet類操作,代碼如下:

package org.lxh.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.lxh.VO.voDemo;
import org.lxh.factory.DAOFactory; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String path = "login.jsp";
String userid = request.getParameter("userid"); //接收userid的內容
String userpass = request.getParameter("userpass"); //接收userpass的內容
List<String> info = new ArrayList<String>(); // 保存返回信息
//判斷輸入為空的情況
if(userid == null || "".equals(userid)){
info.add("用戶id不能為空");
}
if(userpass == null || "".equals(userpass)){
info.add("密碼不能為空");
}
//用戶名密碼驗證通過
if(info.size() == 0){
voDemo vodemo = new voDemo(); //實例化vo
vodemo.setUserid(userid); //設置userid
vodemo.setPassword(userpass); //設置userpass
try {
if(DAOFactory.getIvoDemoDAOInstance().findLogin(vodemo)){ //驗證通過
info.add("通過驗證" + vodemo.getName() + "已登錄");
}else{
info.add("登錄失敗");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
request.setAttribute("info", info);
request.getRequestDispatcher(path).forward(request, response); //跳轉
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.doGet(request, response); // 調用doGet操作
} }

4.9定義JSP顯示頁面,代碼如下:

<%@ page contentType = "text/html" pageEncoding="GBK" import = "java.util.*"%>  

<html>
<head> <title>www.thystar.com</title>
<script language = "JavaScript"> function validate(f){
if(!(/^\w{1,15}$/.test(f.userid.value))){
alert("用戶ID必須是1~15位");
f.userid.focus();
return false;
}
if(!(/^\w{1,15}$/.test(f.userpass.value))){
alert("密碼必須是1~15位");
f.userpass.focus();
return false;
}
return true;
}
</script> </head> <body>
<h2>用戶登錄</h2>
<%
request.setCharacterEncoding("GBK");
%>
<%
List<String> info=(List<String>)request.getAttribute("info");
if(info != null){
Iterator<String> iter = info.iterator();
while(iter.hasNext()){
%>
<h4><%= iter.next() %></h4>
<%
}
}
%>
<form action="LoginServlet" method="post" onSubmit = "validate(this)"> 用戶ID: <input type = "text" name = "userid"><br>
密&nbsp;碼:<input type = "password" name="userpass"><br>
<input type = "submit" value = "登錄">
<input type = "reset" value = "重置">
</form>
</body>
</html>

實現代碼圖:

總結

以上是生活随笔為你收集整理的DAO设计模式总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。