• java web学习


    一些基础和名词解释

    servlet

    一套用于处理 HTTP 请求的 API 标准。我们可以基于 Servlet 实现 HTTP 请求的处理。

    servlet container

    要真正运行 Servlet,需要使用 Servlet Container。 比较常用支持 Servlet Container 的Server 软件有 Apache Tomcat,Glassfish,JBoss,Jetty 等等。
    EJB(Enterprise JavaBean)
    (不重要,java web中不必须)

    DAO (Data Access Object)

    • 可以理解为一种模式,通俗来讲,就是把数据库操作封装起来。
    • 也可以理解为“数据访问对象”,都是进行数据库操作的类。

    一个典型的DAO 模式主要由以下几部分组成。

    1. DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。用于规范实现类.
    2. DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。用于操作数据库.
    3. 实体类:用于存放与传输对象数据。
    4. 数据库连接和关闭工具类: 避免了数据库连接和关闭代码的重复使用,方便修改。

    如:有如下接口ConfigDao和实现该接口的类ConfigDaoImpl:
    DAO接口:

    public interface PetDao {
        /**
         * 查询所有宠物	(返回类型是Pet)
         */
        List<Pet> findAllPets() throws Exception;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    DAO实现类:

    public class PetDaoImpl implements PetDao {
        /**
         * 查询所有宠物
         */
        public List<Pet> findAllPets() throws Exception {
            Connection conn=BaseDao.getConnection();
            String sql="select * from pet";
            PreparedStatement stmt= conn.prepareStatement(sql);
            ResultSet rs=    stmt.executeQuery();
            List<Pet> petList=new ArrayList<Pet>();
            while(rs.next()) {
                Pet pet=new Pet(
                        rs.getInt("id"),
                        rs.getInt("owner_id"),
                        rs.getInt("store_id"),
                        rs.getString("name"),
                        rs.getString("type_name"),
                        rs.getInt("health"),
                        rs.getInt("love"),
                        rs.getDate("birthday")
                        );
                    petList.add(pet);
            }
            BaseDao.closeAll(conn, stmt, rs);
            return petList;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    实体类:

    public class Pet {
        private Integer id;    
        private Integer ownerId;    //主人ID
        private Integer storeId;    //商店ID
        private String name;    //姓名
        private String typeName;    //类型
        private int health;    //健康值
        private int love;    //爱心值
        private Date birthday;    //生日
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    数据库工具类(连接等功能):

    public class BaseDao {
        private static String driver="com.mysql.jdbc.Driver";
        private static String url="jdbc:mysql://127.0.0.1:3306/epet";
        private static String user="root";
        private static String password="root";
            static {
                try {
                    Class.forName(driver);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
            
        public static Connection getConnection() throws SQLException {
            return DriverManager.getConnection(url, user, password);    
        }
        
        public static void closeAll(Connection conn,Statement stmt,ResultSet rs) throws SQLException {
            if(rs!=null) {
                rs.close();
            }
            if(stmt!=null) {
                stmt.close();
            }
            if(conn!=null) {
                conn.close();
            }
        }
        
    
        public int executeSQL(String preparedSql, Object[] param) throws ClassNotFoundException {
            Connection conn = null;
            PreparedStatement pstmt = null;
            /* 处理SQL,执行SQL */
            try {
                conn = getConnection(); // 得到数据库连接
                pstmt = conn.prepareStatement(preparedSql); // 得到PreparedStatement对象
                if (param != null) {
                    for (int i = 0; i < param.length; i++) {
                        pstmt.setObject(i + 1, param[i]); // 为预编译sql设置参数
                    }
                }
            ResultSet num = pstmt.executeQuery(); // 执行SQL语句
            } catch (SQLException e) {
                e.printStackTrace(); // 处理SQLException异常
            } finally {
                try {
                    BaseDao.closeAll(conn, pstmt, null);
                } catch (SQLException e) {    
                    e.printStackTrace();
                }
            }
            return 0;
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    我这里有个问题

    定义的这个接口有啥用啊?是为了别的类似的类可以继承吗?

    DAO模式的优势?

    1. 将数据访问和业务逻辑分离。也就是访问数据库的代码和具体业务逻辑的代码分开来,不耦合在一起。这样也可以提高可复用性。
    2. 隔离了不同数据库实现。如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQL实现不用修改。

    DTO?

  • 相关阅读:
    CentOS 7安装zookeeper
    小程序:下拉刷新+上拉加载+自定义导航栏
    Java中线程的实现与生命周期的简介说明
    php的伪协议详解
    了解服务级别协议(SLA)在 ITSM 中的重要性
    c++获取当前时间的字符串
    pdf暴力解除密码,忘记pdf密码怎么找回?
    【MySQL 8.0新特性】窗口函数
    C#获取CPU/主板/硬盘/电脑名称
    Kotlin 乘法、我怎么越乘越小?
  • 原文地址:https://blog.csdn.net/virusos/article/details/125537841