DAO设计模式

作者: 17f6ebdcf197 | 来源:发表于2018-08-01 00:43 被阅读14次

    DAO(Data Access Objects)设计模式属于JavaEE数据层的操作。

    使用DAO设计模式可以简化代码量和提高程序的可移植性

    解决问题:

    在JDBC操作数据库,都是在JSP页面中写JDBC代码,或者借助于Java Bean实现,这样导致JSP页面中包含大量的HTML代码和Java代码,显示和功能代码混合在一起,难以维护,程序可读性差。

    使用DAO设计模式可以很好解决上述问题,JSP页面仅用来做表现层。

    图-1

       DAO的整体设计流程:

    JSP -> 工厂模式 -> 具体实现类 -> 完成数据库操作

    DAO设计模式组成部分    :

    DemoLearn

    |-DAO接口

    |-DAO实现类

    |-DAO工厂类

    |-VO类/数据传递对象(值对象)

    |-数据库连接类


    DAO接口

    DAO接口中定义了所有的用户操作(增、删、改、查...);

    package DAO_Learn;

    import code0729.User;

    import java.util.List;

    public interface UserDAO {

    //增加操作

            public void insert(User user)throws Exception;

    //修改操作

            public void update(User user)throws Exception;

    //删除操作

            public void delete(User user)throws Exception;

    //按ID查询操作

            public User queryById(int userid)throws Exception;

    //查询全部

            public List queryAll()throws Exception;

    //模糊查询

            public List queryByLike(String keyword)throws Exception;

    }

    *************************************************************************************

    DAO实现类

    DAO实现类实现了DAO接口,在DAO实现类中通过【数据库连接类】操作数据库。

    package DAO_Learn;

    import java.sql.Connection;

    import java.sql.PreparedStatement;

    /**

    * 引入usebean下的Person类

    * */

    public class UserDAOImpl implements UserDAO{

    public  void delete(int userid)throws Exception

        {

    String sql ="delete from user where userid=?";

    PreparedStatement preparedStatement =null;

    DataBaseConnection dataBaseConnection =null;

    //下面是针对数据库的操作

            try

            {

    //连接数据库

                dataBaseConnection =new DataBaseConnection();

    preparedStatement = dataBaseConnection.getConnection().prepareStatement(sql);

    preparedStatement.setInt(1,userid);

    // 进行数据库操作

                preparedStatement.executeUpdate();

    preparedStatement.close();

    }

    catch (Exception e)

    {

    throw new Exception("操作出现异常");

    }

    finally

            {

    dataBaseConnection.close();

    }

    }

    }

    *************************************************************************************

    DAO工厂类

    DAO工厂类通过自身的一个静态方法来获得实现类的实例,有了DAO工厂类,只需要修改DAO工厂类中的方法代码。

    好处:

              用户不用知道底层的具体实现,只要操作接口;同时实现前台和后台的分离(当添加新的功能时只要在DAO接口中添加抽象方法,然后在DAOImpl中实现用户所增加的功能,就能完成用户功能的需求)

    package DAO_Learn;

    public class DAOFactory {

    public static UserDAO getUserDAOInstance()

    {

    return new UserDAOImpl();

    }

    }

    *************************************************************************************

    VO类/数据传递对象(值对象)

    VO类是一个包含属性与表中字段完全对应的类,在该类中提供【setter and getter】方法来获取该类中的属性。

    package DAO_Learn;

    public class User {

    //用户userID

            private int userId;

    //用户名userName

            private String userName;

    //用户密码password

            private String password;

    //setter and getter

        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;

    }

    }

    *************************************************************************************

    数据库连接类

    数据库连接类(JDBC)通过连接数据库获得连接对象以及关闭数据库...

    简便开发,在进行数据库连接时,只要创建该类的实例即可获得数据库连接对象,不必再进行重复操作。

    package DAO_Learn;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.SQLException;

    public class DataBaseConnection {

    //数据库驱动以及url

        private static final String JDBC_Driver ="com.mysql.jdbc.Driver";

    private static final String DB_URL ="jdbc:mysql://localhost:3306/javaweb?encodingCharacter=utf8&useSSL=true";

    //数据库用户以及密码

        private static final String USER ="root";

    private static final String PWD ="mysqladmin";

    private Connection connection;

    public DataBaseConnection() {

    try {

    //注册连接数据库驱动

                Class.forName(JDBC_Driver);

    this.connection =DriverManager.getConnection(DB_URL,USER,PWD);

    }

    catch (ClassNotFoundException e)

    {

    e.printStackTrace();

    }

    catch (SQLException e)

    {

    e.printStackTrace();

    }

    }

    public Connection getConnection()

    {

    return this.connection;

    }

    public void close()

    {

    try

            {

    this.connection.close();

    }

    catch (SQLException e)

    {

    e.printStackTrace();

    }

    }

    }

    *************************************************************************************

    相关文章

      网友评论

        本文标题:DAO设计模式

        本文链接:https://www.haomeiwen.com/subject/kjwkvftx.html