美文网首页
Dao 是个什么东西?

Dao 是个什么东西?

作者: 谁吃了我的薯条 | 来源:发表于2017-10-28 17:42 被阅读0次

    最近忙于,采用jsp/servlet设计个人网站,但设计注册与登陆系统,以及文件、用户模板设计的时候,突然发现如果只是有传统的JDBC编程,会造成大量的重复,而且逻辑相当混乱,百度了一下,才知道还有Dao神器(请原谅,楼主小白一个),它将数据库的操作(增加、删除、修改、查找等)抽象为了一个类,而且在建立多对多、一对多或者一对一关系的时候,相当的便利;下面,结合我的个人网站项目对其进行介绍和展示;

    //下面为登陆与注册系统的简单实现;
    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    package MagicWorld;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet(
            name = "index"
    )
    public class index extends HttpServlet {
        private static String DBMETH = "com.mysql.jdbc.Driver";
        private static String DBURL = "jdbc:mysql://localhost:3306/MagicWorld";
        private static String USERNAME = "root";
        private static String PASSWORD = "root";
    
        public index() {
        }
    
        private static Connection LinkDB() {
            Connection coo = null;
    
            try {
                Class.forName(DBMETH);
            } catch (ClassNotFoundException var3) {
                var3.printStackTrace();
            }
    
            try {
                coo = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
            } catch (SQLException var2) {
                var2.printStackTrace();
            }
            return coo;
        }
    
        protected void Sign(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException, ServletException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html; charset=utf-8");
            String message=null;
            PrintWriter out = response.getWriter();
            Connection coo = LinkDB();
            System.out.println("驱动加载成功");
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            String sign=request.getParameter("sign in");
            System.out.println(username+ " "+password+" "+sign);
            String sql = "SELECT USERNAME,PASSWORD FROM usersmessage Where USERNAME=?;";
            String sqlindex = "INSERT INTO usersmessage(username,password)values(?,?);";
            PreparedStatement temp = coo.prepareStatement(sql);
            temp.setString(1, username);
            System.out.println("连接成功...");
            ResultSet result = temp.executeQuery();
            System.out.println("查询成功...");
            if (("sign in").equals(sign)) {
                if (result.next()) {
                    if (result.getString(2).equals(password)) {
                        //out.println("登录成功");
                        message="登录成功";
    
                    } else {
                        message="密码错误,请重新输入";
                        // out.println("密码错误,请重新输入");
                    }
    
                    result.close();
                } else {
                    message="该用户不存在";
                    //out.println("该用户不存在");
                }
    
                temp.close();
                coo.close();
            } else {
                System.out.println("开始注册");
                if (result.next()) {
                    //out.println("用户名已存在");
                    message="用户名已存在";
                    temp.close();
                    result.close();
                }
                else {
                    System.out.println("开始注册...");
                    temp.close();
                    result.close();
                    PreparedStatement emp = coo.prepareStatement(sqlindex);
                    System.out.println("连接成功");
                    emp.setString(1,username);
                    emp.setString(2,password);
                    int num = emp.executeUpdate();
                    if (num > 0) {
                        //out.println("注册成功,请返回登录");
                        message="注册成功,请返回登录";
                        request.getRequestDispatcher("jsp/sign.jsp").forward(request,response);
                    } else {
                        //out.println("数据库异常,请重新注册");
                        message="数据库异常,请重新注册";
                    }
    
                    emp.close();
                }
    
                coo.close();
            }
    
            System.out.println(message);
            //request.getRequestDispatcher("jsp/sign.jsp").forward(request,response);
            request.setAttribute("message",message);
            request.getRequestDispatcher("jsp/sign.jsp").forward(request,response);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                this.Sign(request, response);
            } catch (SQLException e) {
                System.out.println("数据库异常");
            } finally {
                System.out.println("完毕,已关闭数据库");
            }
        }
        @Override
        public void destroy() {
            super.destroy();
        }
    }
    ---
    // 是不是觉得逻辑混乱,so do I !
    

    Dao, what the fu ** ?

    首先分析一下,上面给出的源码:
    1、登录:输入用户名和密码后,登录此系统,首先要对其进行验证,看看是否在数据库中;
    2、注册:首先进行查找用户名操作,看看是否已存在此用户名,没有的话,对数据库进行插入操作;

    可以看出以上主要是数据库的插入与删除等操作;
    但是,如果我要存入一篇文章呢,是不是又要用到插入了呢?
    如果我要进行实现每日推荐系统的更新呢,是不又要用到查找了呢?
    如果,我要再实现一个blog分类呢?
    因此,我们可以提取这些共性的或者是通用的东西,然后封装为一个个接口;我们只操作这些接口,或者实现这些接口;

    Dao 规范
    Dao是一个组件,它有自己的分包规范:

       com.song.pss.domain;  //装pss模块的domain类,模型对象.
       com.song.pss.dao;     //装pss模块的dao接口.
       com.song.pss.dao.impl;//装pss模块的dao接口的实现类.
       com.song.pss.test;    //存储DAO的测试类
    
    \
    

    相关文章

      网友评论

          本文标题:Dao 是个什么东西?

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