DAO設計模式,dao設計

來源:互聯網
上載者:User

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("使用者名稱或密碼錯誤");        }    }}

 

運行結果如下:

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.