• Java EE 基本开发流程及数据库连接池 Druid


    一、 公司开发基本流程
        a. 了解需求信息(比较模糊)
            需求,不是别人告诉你的,是你自己挖掘出来的。
            售前工程师(对行业知识了解):编程学不好,但懂点代码,对人的综合能力要求比较高

        b. 产品经理:
            整理需求,了解,从网上找些竞品分析。[3,5 个同类产品]
            竞品分析:
                1. 客户人群(流量)
                2. 市场前景
                3. 功能(优劣势)


        c. 产品设计师:
                通过竞品分析,做个系统原型(线框图/草图)通过ps/axture/c4d把原型做出来
                页面优势,技术优势,我们做的系统功能优势,交互效果(感觉)(研究人的行为)


        d. 原型会给客户做展示(ppt axture)


        e. 前端程序员:照着原型去做静态的页面(HTML5/CSS3/JS)
            设计人员与前端对接
            静态 Demo 做出来


        f. 后台程序员:拿着静态 Demo 做成真正带功能的东西。
        g. 静态 Demo :根据这个 Demo 看到这个系统要做哪些功能。
        h. 需求分析: 概要设计  项目的详细设计 OOA/OOD
            功能:划分模块
                例子: 产品模块 : 产品分类  产品信息  
                        订单模块:
                          购物车:
                        个人中心:
                        商铺模块:
                        物流模块:
                        支付模块:
        I. 开发阶段:
                你要每个功能模块,做E-R图(实体关系模型图)
                工具:Rose(IBM开发 笨重)    PD(PowerDesigner  轻量级)
        J. 根据E-R图建立数据库(SQL关系型是数据库,NoSQL 不仅仅是关系数据库)
        K. 实体类    Dao类  Service类  Servlet类 ...
        L. 测试上线

    注意:切记要有规范:(制定规范)

       例如:类名:XXXServlet
        
    二、数据库连接池

    1.连接池的出现

      普通的jdbc:
          驱动:jdbc接口的实现类
          DriverManager(驱动管理器):获取数据连接 Connection
          Statement ResultSet等:Connection
                  connect
          jdbc<--------------->DB   

        时间浪费在:  建立一次连接 销毁一次连接    效率不高,真正的开发中也不会这么做。


        连接池的出现:        
          jdbc<---------连接池------------>DB        缓存机制
          Sun公司的人: 一套接口 DataSource(数据源),他就是数据库连接池的标准规范
              DataSource:谁实现?
                  c3p0 : Hibernate
                  druid: 阿里

    2. 如何编写数据库连接池:
        (1)引入 Jar 包  数据库的驱动,在pom.xml引入地址   JDBC的实现类
        (2)引入数据库连接池的实现类,在pom.xml引入地址   Druid

    3. 实现:

      Maven项目包:

       Project Directory
          entity: 实体类
          dao:    持久层
              prototype(原型)
              impl
          service:业务层代码
              prototype
              impl
          servlet:控制层
          util:工具类

     (1). pom.xml

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     2   <modelVersion>4.0.0</modelVersion>
     3   <groupId>com.uek.project</groupId>
     4   <artifactId>airsys</artifactId>
     5   <version>0.1</version>
     6   <packaging>war</packaging>
     7   <name>airplane</name>
     8    <!-- 2. 项目属性配置 -->
     9   <properties>
    10   <!-- 项目编码使用UTF-8 -->
    11       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    12   <!-- 忽略掉web.xml文件 ,因为我们使用servlet3.0开发web项目 -->
    13       <failOnMissingWebXml>false</failOnMissingWebXml>
    14   </properties>
    15   <!-- 3. 配置项目所需要的第三方jar 包 -->
    16   <dependencies>
    17           <!-- servlet api -->
    18            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    19      <dependency>
    20         <groupId>javax.servlet</groupId>
    21         <artifactId>javax.servlet-api</artifactId>
    22         <version>3.1.0</version>
    23         <scope>provided</scope>
    24      </dependency>
    25      
    26     <dependency>
    27         <groupId>javax.servlet.jsp</groupId>
    28         <artifactId>jsp-api</artifactId>
    29         <version>2.0</version>
    30         <scope>provided</scope>
    31     </dependency>
    32     
    33     <!-- MySQL数据库连接池 -->
    34     <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    35     <dependency>
    36         <groupId>mysql</groupId>
    37         <artifactId>mysql-connector-java</artifactId>
    38         <version>5.1.48</version>
    39     </dependency>
    40     
    41     <!-- Druid -->
    42     <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    43     <dependency>
    44         <groupId>com.alibaba</groupId>
    45         <artifactId>druid</artifactId>
    46         <version>1.1.20</version>
    47     </dependency>
    48     
    49   </dependencies>
    50   
    51       <!-- 配置构建插件 -->
    52       <build>
    53           <plugins>
    54               <plugin>
    55               <!-- 编译插件 -->
    56                   <artifactId>maven-compiler-plugin</artifactId>
    57                   <version>3.5.1</version>
    58                   <configuration>
    59                       <source>1.8</source>
    60                       <target>1.8</target>
    61                   </configuration>
    62               </plugin>
    63               <!-- Tomcat 插件 -->
    64               <plugin>
    65                 <groupId>org.apache.tomcat.maven</groupId>
    66                 <artifactId>tomcat7-maven-plugin</artifactId>
    67                 <version>2.2</version>
    68                 <configuration>
    69                     <port>8080</port>
    70                     <path>/airsys</path>
    71                     <!-- 实现热部署,不需要每次修改代码后都重新启动Tomcat -->
    72                     <contextReloadable>true</contextReloadable>
    73                 </configuration>
    74             </plugin>
    75             
    76             
    77           </plugins>
    78       </build>
    79 </project>

      (2). druid.properies

    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/demo
    username=root
    password=root
    
    #Druid连接池
    initialSize=5
    # 初始化连接池里建立的数量 :5
    maxActive=10
    # 最大的连接数量:10
    maxWait=3000
    # 等待时间:3s

      (3).  DruidUtil.java

      1 package util;
      2 
      3 
      4 import java.io.InputStream;
      5 import java.sql.Connection;
      6 import java.sql.ResultSet;
      7 import java.sql.SQLException;
      8 import java.sql.Statement;
      9 import java.util.Properties;
     10 
     11 import javax.sql.DataSource;
     12 
     13 import com.alibaba.druid.pool.DruidDataSourceFactory;
     14 
     15 
     16 /**
     17  * 数据库连接池工具
     18  * @author 儿子
     19  *
     20  */
     21 public class DruidUtil {
     22     
     23     private static DataSource ds;
     24     
     25     /**
     26      * 静态代码块  加载配置文件信息  只读取一次
     27      */
     28     static {
     29         //-- 1. 加载配置文件信息
     30         Properties ps = new Properties();     //-- Map<Object,object>
     31         //-- 2. 建立到配置文件流
     32         InputStream in = DruidUtil.class.
     33                 getClassLoader().getResourceAsStream("druid.properties");
     34         //-- 3.读取配置文件的数据
     35         try {
     36             ps.load(in);
     37             ds = DruidDataSourceFactory.createDataSource(ps);
     38         } catch (Exception e) {
     39             System.out.println("读取配置文件异常");
     40         }
     41         
     42         //-- 4. 通过配置信息建立数据源对象DataSoure(其实就是连接池对象)
     43         try {
     44             DruidDataSourceFactory.createDataSource(ps);
     45         } catch (Exception e) {
     46             System.out.println("建立数据源对象DataSoure异常");            
     47         }
     48     }
     49     /**
     50      * 获取连接对象
     51      * @return Connection
     52      */
     53     public static Connection getConnection() {
     54         
     55         //-- 通过连接池获取连接对象
     56         Connection con = null;
     57         try {
     58             con = ds.getConnection();
     59         } catch (SQLException e) {
     60             System.out.println("JDBC 获取连接异常");
     61         }
     62         return con;
     63     }
     64     
     65     /**
     66      * 释放文件资源
     67      * @param stmt
     68      * @param con
     69      */
     70     public static void close (Statement stmt, Connection con) {
     71         if(stmt!=null) {
     72             try {
     73                 stmt.close();
     74             } catch (SQLException e) {
     75                 e.printStackTrace();
     76             }
     77         }
     78         if (con != null ) {
     79             try {
     80                 con.close();
     81             } catch (SQLException e) {
     82                 e.printStackTrace();
     83             }
     84         }
     85     }
     86     /**
     87      * 释放文件资源
     88      * @param rs
     89      * @param stmt
     90      * @param con
     91      */
     92     public static void close(ResultSet rs, Statement stmt, Connection con) {
     93         if (rs != null ) {
     94             try {
     95                 rs.close();
     96             } catch (SQLException e) {
     97                 e.printStackTrace();
     98             }
     99         }
    100         if(stmt!=null) {
    101             try {
    102                 stmt.close();
    103             } catch (SQLException e) {    
    104                 e.printStackTrace();
    105             }
    106         }
    107         if (con != null ) {
    108             try {
    109                 con.close();
    110             } catch (SQLException e) {
    111                 e.printStackTrace();
    112             }
    113         }
    114     }
    115     
    116     
    117     
    118     public static void main(String[] args) {}
    119 }

      (4) 测试是否成功

        a. 将druid.properties 复制到 test/resources/ 下

        b. 新建编写类 TestDruid.java

          

         c. TestDruid.java

     1 import java.sql.Connection;
     2 import java.sql.Statement;
     3 
     4 import util.DruidUtil;
     5 
     6 /**
     7  * 测试连接池工具类
     8  * @author 儿子
     9  *
    10  */
    11 public class TestDruid {
    12     public static void main(String[] args) throws Exception {
    13         //-- 1. 获取连接对象
    14         Connection con = DruidUtil.getConnection();
    15         //-- 2. 定义sql语句
    16         String sql = "Create table student(id int,name varchar(20))";
    17         //-- 获取语句对象
    18         Statement stmt = con.createStatement();
    19         //-- 4. 执行Sql语句
    20         stmt.execute(sql);
    21         //-- 释放资源
    22         DruidUtil.close(stmt, con);
    23     }
    24 }
  • 相关阅读:
    Flutter 复制文本到剪切板、从剪切板读取文本【转】
    CSS元素超出部分滚动,并隐藏滚动条【转】
    Flutter解决按钮请求防重复提交【转】
    CSS文字超出宽度自动换行【转】
    flutter 使用 url_launcher 唤起三方应用【转】
    Dart 基本数据类型与类型归属判断【转】
    JS 生成唯一字符串UUID【转】
    gtk+笔记
    Win32 API笔记
    utf-8与utf-16的区别
  • 原文地址:https://www.cnblogs.com/zhangze-lifetime/p/11722109.html
Copyright © 2020-2023  润新知