程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> DAO設計模式,dao設計

DAO設計模式,dao設計

編輯:JAVA綜合教程

DAO設計模式,dao設計


DAO設計模式

  DAO設計模式簡介: DAO設計模式可以減少代碼量,增強程序的可移植性,提高代碼的可讀性。

  DAO(數據庫操作對象)設計模式是 JavaEE 數據層的操作.主要由五部分組成:

    1.數據庫連接類:連接數據庫並獲取連接對象。

    2.VO實體類:包含屬性和表中字段完全對應的類。

    3.DAO接口:提供了用戶所有的操作方法(就如老師給學生提供一些學習方法)。

    4.DAO實現類:實現DAO中所有的方法(就如老師給提供的方法看你如何去完成)。

    5.DAO工廠類:為程序提供方法,如果要替換DAO實現類,只需要修改該Dao工廠類中的方法代碼,

而不必邀修改所有的操作數據庫代碼(如代理人專門為需要的公司提供人才,也叫做服務層)。

 

下面以一個用戶登錄為例:

  1.數據庫建表:

         

  2.數據庫連接類  com.util(記得導入c3p0框架包)

package com.util;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Util {
    // C3P0數據源
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource();

    public static DataSource getDataSource() {
        return dataSource;
    }

    public static Connection getConn() {
        Connection conne = null;
        try {
            conne = dataSource.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conne;
    }

    // 關閉資源
    public static void closeAll(ResultSet rs, Statement st, Connection conne) {
        try {
            if (null != rs) {
                rs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            if (null != st) {
                st.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            if (conne != null) {
                conne.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

  3.VO實體類  com.entity

package com.entity;

import java.io.Serializable;

public class Person implements Serializable {

    private static final long serialVersionUID = 1L;

    private int id;
    private String name;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

}

  

  4.DAO接口類  com.dao

package com.dao;

import com.entity.Person;

public interface PersonDao {
    
    //根據對象查詢
    public Person findMaster(Person person);
}

  

  5.DAO實現類  com.daoImpl

package com.daoImpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.dao.PersonDao;
import com.entity.Person;
import com.util.C3P0Util;

public class PersonDaoImpl implements PersonDao {

    @Override
    public Person findMaster(Person person) {
        Connection conne = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Person person2 = null;
        String sql = "SELECT * FROM person WHERE name = ? AND password = ?";

        try {
            conne = C3P0Util.getConn();

            // 建立了到特定數據庫的連接之後,就可用該連接發送 SQL 語句。
            pstmt = conne.prepareStatement(sql);
            pstmt.setString(1, person.getName());
            pstmt.setString(2, person.getPassword());
            rs = pstmt.executeQuery();

            if (rs.next()) {
                person2 = new Person();
                person2.setId(rs.getInt("id"));
                person2.setName(rs.getString("name"));
                person2.setPassword(rs.getString("password"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            C3P0Util.closeAll(rs, pstmt, conne);
        }
        return person2;
    }

}

  

  6.DAO工廠接口  com.service

package com.service;

import com.entity.Person;

public interface PersonService {
    public boolean login (Person person);
}

  

  7.DAO工廠實現類  com.serviceImpl

package com.serviceImpl;

import com.dao.PersonDao;
import com.daoImpl.PersonDaoImpl;
import com.entity.Person;
import com.service.PersonService;

public class PersonServiceImpl implements PersonService {

    @Override
    public boolean login(Person person) {
        boolean islogin = false;
        PersonDao pd = new PersonDaoImpl();
        Person ps2 = pd.findMaster(person);
        if (null != ps2) {
            islogin = true;
        }
        return islogin;
    }
}

  

  8.測試

package com.test;

import java.util.Scanner;

import org.junit.Test;

import com.entity.Person;
import com.service.PersonService;
import com.serviceImpl.PersonServiceImpl;

public class LoginTest {
    @Test
    public void loginTest() {
        Scanner sc = new Scanner(System.in, "UTF-8");
        System.out.println("請輸入用戶名");
        String loginName = sc.next();
        System.out.println("請輸入密碼");
        String loginPassword = sc.next();

        Person person = new Person();
        person.setName(loginName);
        person.setPassword(loginPassword);

        PersonService ps = new PersonServiceImpl();
        boolean isLoginid = ps.login(person);

        if (isLoginid) {
            System.out.println("登錄成功");
        } else {
            System.out.println("用戶名或密碼錯誤");
        }
    }
}

 

運行結果如下:

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved