一、 公司开发基本流程
    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

 <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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.uek.project</groupId>
<artifactId>airsys</artifactId>
<version>0.1</version>
<packaging>war</packaging>
<name>airplane</name>
<!-- 2. 项目属性配置 -->
<properties>
<!-- 项目编码使用UTF-8 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 忽略掉web.xml文件 ,因为我们使用servlet3.0开发web项目 -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<!-- 3. 配置项目所需要的第三方jar 包 -->
<dependencies>
<!-- servlet api -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency> <!-- MySQL数据库连接池 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency> <!-- Druid -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency> </dependencies> <!-- 配置构建插件 -->
<build>
<plugins>
<plugin>
<!-- 编译插件 -->
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- Tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/airsys</path>
<!-- 实现热部署,不需要每次修改代码后都重新启动Tomcat -->
<contextReloadable>true</contextReloadable>
</configuration>
</plugin> </plugins>
</build>
</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

 package util;

 import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; /**
* 数据库连接池工具
* @author 儿子
*
*/
public class DruidUtil { private static DataSource ds; /**
* 静态代码块 加载配置文件信息 只读取一次
*/
static {
//-- 1. 加载配置文件信息
Properties ps = new Properties(); //-- Map<Object,object>
//-- 2. 建立到配置文件流
InputStream in = DruidUtil.class.
getClassLoader().getResourceAsStream("druid.properties");
//-- 3.读取配置文件的数据
try {
ps.load(in);
ds = DruidDataSourceFactory.createDataSource(ps);
} catch (Exception e) {
System.out.println("读取配置文件异常");
} //-- 4. 通过配置信息建立数据源对象DataSoure(其实就是连接池对象)
try {
DruidDataSourceFactory.createDataSource(ps);
} catch (Exception e) {
System.out.println("建立数据源对象DataSoure异常");
}
}
/**
* 获取连接对象
* @return Connection
*/
public static Connection getConnection() { //-- 通过连接池获取连接对象
Connection con = null;
try {
con = ds.getConnection();
} catch (SQLException e) {
System.out.println("JDBC 获取连接异常");
}
return con;
} /**
* 释放文件资源
* @param stmt
* @param con
*/
public static void close (Statement stmt, Connection con) {
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null ) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放文件资源
* @param rs
* @param stmt
* @param con
*/
public static void close(ResultSet rs, Statement stmt, Connection con) {
if (rs != null ) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null ) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {}
}

  (4) 测试是否成功

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

    b. 新建编写类 TestDruid.java

      

    c. TestDruid.java

 import java.sql.Connection;
import java.sql.Statement; import util.DruidUtil; /**
* 测试连接池工具类
* @author 儿子
*
*/
public class TestDruid {
public static void main(String[] args) throws Exception {
//-- 1. 获取连接对象
Connection con = DruidUtil.getConnection();
//-- 2. 定义sql语句
String sql = "Create table student(id int,name varchar(20))";
//-- 获取语句对象
Statement stmt = con.createStatement();
//-- 4. 执行Sql语句
stmt.execute(sql);
//-- 释放资源
DruidUtil.close(stmt, con);
}
}

Java EE 基本开发流程及数据库连接池 Druid的更多相关文章

  1. 使用Java中的动态代理实现数据库连接池

    2002 年 12 月 05 日 作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池. 数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的 ...

  2. JAVA_SE基础——3.Java程序的开发流程

    上一篇,写的是JAVA的环境变量的配置,今天我抽空写篇Java程序的开发流程,下面的教程是我结合书本和毕向东老师的视频写下的心的~ 在没有真正写Java程序前,首先需要了解Java程序的开发过程. S ...

  3. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  4. 数据库连接池druid

    推荐一个带监控的数据库连接池druid,阿里的,据说比c3p0连接池性能要好点,主要是带sql,spring,uri等访问监控,比较直观地址: https://github.com/alibaba/d ...

  5. JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的 开源 Java EE快速开发平台

    JeeSite本身是以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Ehcahe对常用数据进行缓 ...

  6. 使用 JAVA 中的动态代理实现数据库连接池

    数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的连接数据库对服务性能来讲是一个瓶颈,使用缓冲池技术可以来消除这个瓶颈.我们可以在互联网上找到很多关于数据库连接池的源程序,但是都发现这样一个共 ...

  7. 【JAVA EE企业级开发四步走完全攻略】

    本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划,单个发blog比较零散,所以整理此索引,决定以后每发一季JAVA EE blog后会 ...

  8. java web学习总结(十六) -------------------数据库连接池

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  9. Java EE业务处理流程与XML的引入

    Java EE基于MVC架构的业务处理流程 MVC架构业务处理流程 XML定义 XML是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言.XML被设计用于数据的存 ...

随机推荐

  1. Multi-Camera Coordination and Control in Surveillance Systems: A Survey 阅读笔记

    原文: Natarajan, Prabhu, Pradeep K. Atrey, and Mohan Kankanhalli. "Multi-camera coordination and ...

  2. 学习AI之NLP后对预训练语言模型——心得体会总结

    一.学习NLP背景介绍:      从2019年4月份开始跟着华为云ModelArts实战营同学们一起进行了6期关于图像深度学习的学习,初步了解了关于图像标注.图像分类.物体检测,图像都目标物体检测等 ...

  3. 如何把图片变得炫酷多彩,Python教你这样实现!

    有趣的图片 如何能让图片变得好玩?首先需要让它动起来!可如果是多张图片,我们还可以将其拼接起来组成gif动图,可一张图怎么玩?记得之前写过一个小练习,把一张图片拆分成九宫格的分片图.那么,能否由此下手 ...

  4. 关于非阻塞I/O、多路复用、epoll的杂谈

    本文主要是想解答一下这样几个问题: - 什么是非阻塞I/O - 非阻塞I/O和异步I/O的区别 - epoll的工作原理 文件描述符 文件描述符在本文有多次出现,难免有的朋友不太熟悉,有必要简单说明一 ...

  5. Spring底层源码分析

    Spring 运行原理 Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean ...

  6. .net core 3.1简体中文语言包,英文只能提示变成中文!

    .net core 3.1简体中文语言包,英文只能提示变成中文!这个是我自己手动用谷歌翻译翻译的一批文档,已经把.net core3.1完全翻译了,由于是翻译器翻译,所以怕翻译有错漏,所以没有去掉英文 ...

  7. Appium之实操(了解配置项)

    使用Appium,测试对象APP的运行环境有两种:① 真实设备 如手机  ②模拟器 如夜神 连接真实设备: - 进入开发者模式,启动usb调试 - 在电脑上 执行adb命令  adb devices ...

  8. BOM和DOM操作

    目录 BOM window对象 window子对象 location 弹出框 计时 history navigator DOM 查找节点 直接查找 间接查找 节点操作 创建节点 添加节点 删除节点 替 ...

  9. java虚拟机栈 相关操作

    针对JVM虚拟栈 和栈帧的操作 虚拟机栈: 栈元素是栈帧.方法调用,栈帧入栈,反之出栈. 栈帧:一个方法的运行空间. 1.局部变量表:方法定义的局部变量.方法的参数存在该表. 实例方法中有个隐含参数“ ...

  10. python之with语句结合上下文管理器

    所谓上下文管理器即在一个类中重写了__enter__方法和__exit__方法的类就可以成为上下文管理器类. 我们可以通过with语句结合上下文管理器简化一些操作. 使用with语句结合自定义上下文管 ...