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:工具类

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

 (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

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

     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 }