java DAO設計模式

 

java DAO設計模式


 分類:
 

[html] view plain copy
 print?
  1.   
DAO  數據訪問對象     屬於JAVAEE的數據層的操作    用來完成數據庫的訪問,實現基本的CURD數據庫操作

DAO包括五個部分:  

 1.   數據庫連接類                  實現數據庫連接封裝的操作  

 2.    javabean類                    對應數據庫中的表     每個bean對應一張表 

  3.   DAO接口                         定義了數據庫的CURD等操作   用於給具體子類實現數據庫操作

  4.  DAO實現類                       實現DAO接口 

  5 . DAO工廠類                       用來獲取DAO實現類的實例   完成數據庫操作    一般獲取實例的方法爲靜態方法 

代碼演示:  

  1.  數據庫連接類

package com.lbwmx.mysql;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


//創建數據庫操作類DatabaseConnection,主要負責數據庫連接及關閉。


public class DbConnection {
private final String driver="com.mysql.jdbc.Driver";
private final String url="jdbc:mysql://localhost:3306/test";
private final String dbuser="littlebear";
private final String dbpassword="littlebear";
private Connection conn=null;

public DbConnection() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
this.conn=DriverManager.getConnection(url,dbuser,dbpassword);
} catch (SQLException e) {
e.printStackTrace();
}
}

public Connection getConnection() {
return this.conn;
}

public void closeConnection() {
try {
this.conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

}


2.  javabean  類

 package com.lbwmx.bean;


import com.lbwmx.dao.DaoFactory;


public class User {
private int uid;
private String name;
private String password;


public User() {
super();
}

public User(int uid,String password){
this.uid=uid;
this.password=password;
}

public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
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 boolean LoginValidate() throws Exception{
User user=(User)DaoFactory.getDaoInstance().findByUid(this.uid);
if (user==null) {
return false;
}
if (!user.getPassword().equals(this.password)) {
return false;   //error password
}
return true;
}

}



3.  DAO接口類

package com.lbwmx.dao;


import java.util.List;


import com.lbwmx.bean.User;


public interface UserDao {
public boolean doInsert(User user) throws Exception;
public User findByUid(int uid) throws Exception;
public List findAll() throws Exception;
}


4 .  DAO實現類   

package com.lbwmx.dao;


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


import com.lbwmx.bean.User;


public class UserDaoImpl implements UserDao{
private Connection conn=null;
private PreparedStatement psmt=null;


public UserDaoImpl(Connection conn) {
this.conn=conn;
}

public boolean doInsert(User user) throws Exception {

String insert="insert into user(uid,name,password) values (?,?,?)";
this.psmt=this.conn.prepareStatement(insert);
this.psmt.setInt(1, user.getUid());
this.psmt.setString(2, user.getName());
this.psmt.setString(3, user.getPassword());
int n = this.psmt.executeUpdate();
this.psmt.close();
if (n>0) {
return true;
}
return false;  
}


public List findAll() throws Exception {
String select="select * from user";
List list=new ArrayList();
this.psmt=this.conn.prepareStatement(select);
ResultSet rst=this.psmt.executeQuery();
while (rst.next()) {
User user=new User();
user.setUid(rst.getInt("uid"));
user.setName(rst.getString("name"));
user.setPassword(rst.getString("password"));
list.add(user);
}
this.psmt.close();   //當關閉 psmt的時候,rst結果集也會隨之關閉!  
//rst.close();
return list;
}


public User findByUid(int uid) throws Exception {
String sql="select * from user where uid=?";
this.psmt=this.conn.prepareStatement(sql);
ResultSet rst=this.psmt.executeQuery();
User user=null;
if (rst.next()) {
user=new User();
user.setUid(rst.getInt("uid"));
user.setName(rst.getString("name"));
user.setPassword(rst.getString("password"));
}
this.psmt.close();
return user;
}

}

DAO代理類 

package com.lbwmx.dao;


import java.util.List;


import com.lbwmx.bean.User;
import com.lbwmx.mysql.DbConnection;


public class DaoProxy implements UserDao{
private DbConnection dbConnection=null;
private UserDao dao=null;
public DaoProxy() {
this.dbConnection=new DbConnection();
this.dao=new UserDaoImpl(this.dbConnection.getConnection());
}

public boolean doInsert(User user) throws Exception {
boolean flag=false;
try {
if (null==this.dao.findByUid(user.getUid())) {
flag=this.dao.doInsert(user);
}
} catch (Exception e) {
throw e;
}finally{
this.dbConnection.closeConnection();
}
return flag;
}

public List findAll() throws Exception {
List list=null;
try {
list=this.dao.findAll();
} catch (Exception e) {
throw e;
}finally{
this.dbConnection.closeConnection();
}
return list;
}
public User findByUid(int uid) throws Exception {
User user=null;
try {
user=this.dao.findByUid(uid);
} catch (Exception e) {
throw e;
}
return user;
}
}


5  .DAOFactory類   獲取實現類實例

package com.lbwmx.dao;


public class DaoFactory {
//定義工廠類DaoFactory。工廠類通過DaoProxy實例化IDao對象,供調用者操作數據庫。
public static UserDao getDaoInstance(){
return new DaoProxy();
}
}


測試代碼:   

        User user = new User(1000,"password" );

         boolean flag =  DaoFactory.getDaoInstance().doInsert(user);

         if(flag){

   System.out.println("success");

}else{

         System.out.println("error");

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章