1. DAO簡介
DAO設計模式是屬於J2EE數據庫層的操作,使用DAO設計模式可以簡化大量代碼,
增強程序的可移植性。
2. DAO各部分詳解
DAO設計模式包括5個重要的部分,分別為數據庫連接類,VO類,DAO接口,
DAO實現類以及DAO工廠類。
2-1 數據庫連接類:
數據庫連接類的主要功能就是連接數據庫並獲得連接對象,
以及關閉數據庫。通過數據庫連接類可以大大地簡化開發,在需要進行數據庫連接時,
只需要創建該類的實例,並調用其中的方法就可以獲得數據庫連接對象和關閉數據庫而不必進行重復操作。
2-2 VO類
VO類是一個包含屬性和表中字段完全對應的類。並在該類中提供setter和getter方法
來設置並獲取該類中的屬性。
2-3 DAO接口
DAO接口中定義了所有的用戶操作,如添加記錄,刪除記錄以及查詢記錄等。不過因為是接口
所以僅僅是定義,還需要子類來實現。
2-4 DAO實現類
DAO實現類實現了DAO接口,並實現了DAO接口中定義的所有方法。在DAO實現中
通過連接數據庫進行數據庫操作。
2-5 DAO工廠類
在沒有DAO工廠類的情況下,必須通過創建DAO實現類的實例才能完成數據庫的操作。
這是就必須知道具體的子類,對於后期的修改非常不方便。如后期需要創建一個操作Oracle
的DAO實現類,這是就必須修改所有使用DAO實現類的代碼。
使用DAO工廠類可以比較方便地對代碼進行管理,而且可以很好滴解決后期修改的問題,。
通過DAO工廠類的一個靜態方法來獲得DAO實現類的實例。這是如果需要替換DAO實現類,
只需要修改DAO工廠類中的方法代碼,而不必修改所有的操作數據庫代碼。
3.示例:構建一個用戶數據操作的DAO,要求如下:
1)數據庫連接類:DatabaseConnection.java,用於連接mysql中javaweb數據庫。
2)VO類:User.java,其中的屬性名對應於user表中的字段名
3)DAO接口類: UserDAO.java,實現對user表的添加、修改、刪除、查詢等操作。
4)DAO實現類:UserDAOImpl.java
5)DAO工廠類:DAOFactory.java ;
並根據這個DAO實現添加記錄的數據庫操作:
DataBaseConnection.java
1 package com.mhb; 2 import java.sql.*; 3 4 //主要功能就是連接數據庫,關閉數據庫 5 public class DataBaseConnection { 6 //定義數據庫驅動類 7 private final String DBDRIVER = "com.mysql.jdbc.Driver"; 8 //定義數據庫連接URL 9 private final String DBURL = "jdbc:mysql://localhost/bbs"; 10 //定義數據庫連接用戶名 11 private final String DBUSER = "root"; 12 //定義數據庫連接密碼 13 private final String DBPASSWORD = "123456"; 14 //定義數據庫連接對象 15 private Connection conn = null; 16 //構造方法,加載驅動 17 public DataBaseConnection(){ 18 try{ 19 Class.forName(DBDRIVER); 20 this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 21 System.out.println("數據庫連接成功!"); 22 }catch(Exception e){ 23 System.out.println("加載驅動失敗!"); 24 } 25 } 26 27 //取得數據庫連接 28 public Connection getConnection(){ 29 return conn; 30 } 31 32 //關閉數據庫 33 public void close(){ 34 35 try { 36 conn.close(); 37 } catch (SQLException e) { 38 System.out.println("數據庫連接關閉失敗!"); 39 } 40 } 41 }
User.java
1 package com.mhb; 2 3 public class User { 4 //用戶ID 5 private int userid; 6 //用戶姓名 7 private String username; 8 //用戶密碼 9 private String password; 10 11 public int getUserid() { 12 return userid; 13 } 14 public void setUserid(int userid) { 15 this.userid = userid; 16 } 17 public String getUsername() { 18 return username; 19 } 20 public void setUsername(String username) { 21 this.username = username; 22 } 23 public String getPassword() { 24 return password; 25 } 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 }
UserDAO.java
1 package com.mhb; 2 import java.util.*; 3 4 //定義數據庫操作方法 5 public interface UserDAO { 6 //增加操作 7 public void insert (User user) throws Exception; 8 //修改操作 9 public void update (User user) throws Exception; 10 //刪除操作 11 public void delete (int userid) throws Exception; 12 //按ID查詢 13 public User queryById(int userid) throws Exception; 14 //查詢全部 15 public List queryAll() throws Exception; 16 17 }
UserDAOImpl.java
1 package com.mhb; 2 3 import java.sql.PreparedStatement; 4 import java.util.List; 5 6 public class UserDAOImpl implements UserDAO { 7 8 //添加操作 9 public void insert(User user) throws Exception { 10 String sql = "INSERT INTO user(username,password) VALUES (?,?)"; 11 PreparedStatement pstmt = null; 12 DataBaseConnection dbc = null; 13 //下面是針對數據庫的具體操作 14 try{ 15 dbc= new DataBaseConnection(); 16 pstmt = dbc.getConnection().prepareStatement(sql); 17 pstmt.setString(1, user.getUsername()); 18 pstmt.setString(2, user.getPassword()); 19 //進行數據庫更新 20 pstmt.executeUpdate(); 21 pstmt.close(); 22 }catch(Exception e){ 23 throw new Exception ("操作出現異常"); 24 }finally{ 25 //關閉數據庫 26 dbc.close(); 27 } 28 } 29 30 public void delete(int userid) throws Exception { 31 32 } 33 34 35 36 public List queryAll() throws Exception { 37 return null; 38 }
DAOFactory.java
1 package com.mhb; 2 3 public class DAOFactory { 4 public static UserDAO getUserDAOInstance(){ 5 return new UserDAOImpl(); 6 } 7 }
MySql數據庫中user表語句
1 CREATE TABLE `user` ( 2 `userid` int(11) NOT NULL AUTO_INCREMENT, 3 `username` varchar(20) DEFAULT NULL, 4 `password` varchar(20) DEFAULT NULL, 5 PRIMARY KEY (`userid`) 6 ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8
至此,DAO的5個部分就以全部結束,接下來通過DAO工廠獲得DAO實現類實例。
通過DAO實現類中的方法就可以完成添加記錄的數據庫操作了。
添加記錄AddUserDemo.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ page import="com.mhb.*" %> 3 4 <html> 5 <head><title>添加用戶</title></head> 6 7 <body> 8 <form action="" method="post"> 9 <table> 10 <tr> 11 <td colspan="2">添加用戶</td> 12 </tr> 13 <tr> 14 <td>用戶姓名:</td> 15 <td><input type="text" name="username"></td> 16 </tr> 17 <tr> 18 <td>用戶密碼</td> 19 <td><input type="password" name="password"></td> 20 </tr> 21 <tr> 22 <td colspan="2"> 23 <input type="submit" value="添加"> 24 <input type="reset" value="重置"> 25 </td> 26 </tr> 27 </table> 28 </form> 29 30 <% 31 //獲取表單中輸入的用戶名以及密碼 32 String userName = (String)request.getParameter("username"); 33 String password = (String)request.getParameter("password"); 34 //通過DAO工廠獲得DAO實現類的實例 35 UserDAO userDAO = DAOFactory.getUserDAOInstance(); 36 //設置需要添加的用戶 37 User user = new User(); 38 user.setUsername(userName); 39 user.setPassword(password); 40 //如果用戶名密碼不為空則添加入數據庫 41 if(userName != null && userName != ""){ 42 if(password != null && password != ""){ 43 userDAO.insert(user); 44 } 45 }else{ 46 out.print("用戶名或密碼不能為空!"); 47 } 48 %> 49 </body> 50 </html>
瀏覽器顯示
username:admin,password:123456
數據庫顯示