DAO设计模式

什么是设计模式呢?一种反复被使用,项目组成员都必须知晓,经过分类编写代码的设计经验的总和。1995年将设计模式提高了新的高度,并且规范化,这个事情是由4个的一个组织完成的,GOF(四人帮)。


DAO:数据访问对象(Data Access Object),以对象形式来操作数据库,之前我们第一阶段使用DAO设计模式就是一个标准的DAO,到了现在,我们主要是jsp+JDBC进行操作,在jsp中存在大量java代码,像之前的程序,我们应该用面向对象的方式进行封装,形成一个小小的组件。

DAO设计模式的流程:

DAO组成:
·POJO:每一个POJO对象就是数据库中一笔数据
·DAO:操作的接口,按照功能实现的需求贵了一组对数据库的操作方法,方法命名的规范:
·数据库的更新操作:doXxx(),新增doIns(),修改doUpd(),删除doDel()
·数据库的查询操作:findByUserName(String userName),findByID,findAll
·代理类:代理完成数据库连接的取得和关闭,并且调用真实主题类(实现类)
·实现类:应该完成和业务具体相关的数据库操作,不去专门处理数据库连接的取得和关闭
·工厂类:有接口就必须要有工厂,工厂的作用就是为了解耦合
注意:
在以后的开发中,jsp中是绝对不再允许导入java.sql包的
DAO完成之后,实际上就是按照一个组件的方式运行的
在使用DAO进行程序开发的时候,可以很好的将显示和具体的java代码分开,从java代码端进行数据库操作,而java代码我们完成的就是一个业务模型,很好的进行解耦合的操作。


POJO类:

package userPOJO;

public class UserPOJO {

    private int userId;
    private String userName;
    private String password;
    private String headicon;

    public UserPOJO(int userId, String userName, String password, String headicon) {
        super();
        this.userId = userId;
        this.userName = userName;
        this.password = password;
        this.headicon = headicon;
    }

    public UserPOJO() {
        super();
        // TODO Auto-generated constructor stub
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getHeadicon() {
        return headicon;
    }

    public void setHeadicon(String headicon) {
        this.headicon = headicon;
    }
}



DAO接口:

package userDAO;

import userPOJO.UserPOJO;

public interface UserDAO {
    public  boolean AddUser(UserPOJO pojo) ;
    public  boolean UpdUserInfo(UserPOJO pojo);
    public  UserPOJO getUserpojoByUserName(String userName);
}



数据库连接:

package pub;

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

public class GetDataBaseConnection {
    public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    public static final String URL = "jdbc:oracle:thin:@10.211.55.3:1521:orcl";
    public static final String USERNAME = "lizhi";
    public static final String PASSWORD = "lizhi";

    public static Connection getConnection() throws Exception{
        Connection conn = null;
        Class.forName(DRIVER);
        conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
        return conn;
    }
}



DAO实现类:

package userImpl;

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

import pub.GetDataBaseConnection;
import userDAO.UserDAO;
import userPOJO.UserPOJO;

public class UserImpl implements UserDAO{
    Connection conn ;
    public UserImpl(Connection conn){
        this.conn = conn;
    }

    public  boolean AddUser(UserPOJO pojo){
        boolean flag = false;
        Connection conn = null;
        PreparedStatement pstate = null;
        try {
            conn = GetDataBaseConnection.getConnection();
            conn.setAutoCommit(false);
            String sql = "insert into usert (user_id,username,password,headicon) values(?,?,?,?)";
            pstate = conn.prepareStatement(sql);
            pstate.setInt(1, pojo.getUserId());
            pstate.setString(2, pojo.getUserName());
            pstate.setString(3, pojo.getPassword());
            pstate.setString(4, pojo.getHeadicon());
            pstate.execute();
            conn.commit();
            flag = true;
        } catch (Exception e) {
            try {
                conn.rollback();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            try {
                pstate.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return flag;
    }

public  boolean UpdUserInfo(UserPOJO pojo){
    boolean flag = false;
      Connection conn = null;
      PreparedStatement pstate = null;
      try{
      conn = GetDataBaseConnection.getConnection();
      conn.setAutoCommit(false);
      String sql = "update usert set username = ?,password = ?,headicon = ? where user_id="+pojo.getUserId();
      pstate = conn.prepareStatement(sql);
      pstate.setString(1,pojo.getUserName());
      pstate.setString(2,pojo.getPassword());
      pstate.setString(3,pojo.getHeadicon());
      pstate.execute();
      conn.commit();
      flag = true;
      }catch(Exception e){
          try{
          conn.rollback();
          }catch(Exception e1){
              e1.printStackTrace();
          }
          e.printStackTrace();
      }finally{
          try{
              pstate.close();
              conn.close();
          }catch(Exception e){
              e.printStackTrace();
          }
      }
      return flag;
}   
public  UserPOJO getUserpojoByUserName(String userName){
    UserPOJO pojo = null;
     Connection conn = null;
      PreparedStatement pstate = null;
      ResultSet res = null;
      try{
      conn = GetDataBaseConnection.getConnection();
      String sql = "select user_id,password,headicon from usert where username="+"'"+userName+"'";
      pstate = conn.prepareStatement(sql);
      res = pstate.executeQuery();
      while(res.next()){
          int userId = res.getInt(1);
          String password = res.getString(2);
          String headicon = res.getString(3);
          pojo = new UserPOJO(userId,userName,password,headicon);
      }
      }catch(Exception e){
          try{
          conn.rollback();
          }catch(Exception e1){
              e1.printStackTrace();
          }
          e.printStackTrace();
      }finally{
          try{
              res.close();
              pstate.close();
              conn.close();
          }catch(Exception e){
              e.printStackTrace();
          }
      }
    return pojo;
}
}



DAO代理类:

package userProxy;

import java.sql.Connection;
import pub.GetDataBaseConnection;
import userDAO.UserDAO;
import userImpl.UserImpl;
import userPOJO.UserPOJO;

public class UserProxy implements UserDAO{
    Connection conn;
    UserImpl impl ;
    public UserProxy(){
        try {
            this.conn = GetDataBaseConnection.getConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
        this.impl = new UserImpl(this.conn);
    }

    @Override
    public boolean AddUser(UserPOJO pojo) {
        // TODO Auto-generated method stub
        boolean flag = this.impl.AddUser(pojo);
        this.close();
        return flag;
    }

    @Override
    public boolean UpdUserInfo(UserPOJO pojo) {
        // TODO Auto-generated method stub
        boolean flag = this.impl.UpdUserInfo(pojo);
        this.close();
        return flag;
    }

    @Override
    public UserPOJO getUserpojoByUserName(String userName) {
        // TODO Auto-generated method stub
        UserPOJO pojo = this.impl.getUserpojoByUserName(userName);
        this.close();
        return pojo;

    }
    public void close(){
        try {
            this.conn .close();
        } catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }
    }


}



DAO工厂类:

package userFactory;

import userDAO.UserDAO;
import userProxy.UserProxy;

public class UserFactory {
    public static UserDAO getUserInfoDAOInstences(){
        return new UserProxy();
    }
}

测试代码:

boolean bool=UserFactory.getUserInfoDAOInstences().AddUser(pojo);//使用了添加用户功能

通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值