准备工作
1.创建web项目
2.导入相关jar包
commons-logging-1.1.1.jar // druid数据库连接池依赖包
druid-1.0.9.jar // druid数据库连接池jar包
gson-2.2.4.jar//json工具jar包
log4j-1.2.8.jar//日志jar包
ojdbc6.jar/数据库连接jar包
3.使用mvc架构进行分层
4.加入工具类
5.加入过滤器(前置不配置)
6.加入html页面
7.部署并测试
部门管理模块实现思路
1.添加部门实现思路
浏览器发送请求到服务器,服务器调用servlet,servlet调用添加的方法进行处理,接收浏览器发送过来添加部门的相关信息,调用service调用dao调用jdbc工具类进行数据库的DML操作,返回受影响的行数,把结果中转给service中转给servlet,判断添加部门是否成功,true时使用请求转发访问servlet中查询部门列表的方法,然后把部门jsp页面展示给用户,false时把错误提示存储在session作用域中重定向到添加部门jsp页面,并展示错误提示
2.查询部门列表实现思路
浏览器发送请求到服务器,服务器调用servlet,servlet掉用查询部门列表信息的方法进行处理,调用service调用dao调用jdbc工具类进行数据库的DQL操作,把查询到的数据封装到List集合中,返回给service返回给servlet,把数据存储在request作用域中,转发到部门列表jsp页面
3.更新部门信息实现思路
浏览器发送请求到服务器,服务器调用servlet,servlet调用查询指定部门(根据部门id)的方法进行处理,调用service调用dao调用jdbc工具类进行数据库的数据的DQL操作,把查询到的部门信息返回给service返回给servlet,转发到修改部门信息jsp页面,并把查询到的部门信息填充在jsp页面上,然后用户进行修改时,浏览器发送请求到服务器,服务器调用servlet,调用service调用dao调用jdbc工具类进行数据库的数据的DML操作(根据部门的id),把返回受影响的行数,把结果中转给service中转给servlet,true时使用重定向发送请求访问servlet中的查询部门列表的方法,然后把部门jsp页面展示给用户,false时把错误提示存储在session作用域中使用重定向发送请求访问servlet中的查询部门列表的方法,然后把部门jsp页面展示给用户并展示错误提示。
更新部门时序图
数据库连接池的原理及介绍
jvm虚拟机与数据库进行连接什么耗费性能,在并发访问的情况在一个数据库连接对象均对应着个一个数据数据库连接,每次操作只能打开一个物理连接,在使用完成后关闭连接,因此会造成性能低下。
数据库连接池会在应用程序启动时,先创建一定数量的数据库连接对象放在连接池中,在需要进行数据库的相关操作时,会去数据库连接池获取连接对象,数据库连接池把以被使用的连接对象进行标记为忙,在使用完成后释放数据库连接对象,数据库连接池在把连接对象标记为闲
对于多于连接池中连接数的并发请求情况下,在请求队列中排队等待。并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。
数据库连接池对比
druid数据库连接池简单代码示例
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
//初始化时建立物理连接的个数
dataSource.setInitialSize(5);
//最大连接池数量
dataSource.setMaxActive(20);
//最小连接池数量
dataSource.setMinIdle(10);
//是否缓存preparedStatement
dataSource.setPoolPreparedStatements(true);
//要启用PSCache,poolPreparedStatements自动触发修改为true在Druid中,不会存在Oracle下PSCache占用内存过多的问题
dataSource.setMaxPoolPreparedStatementPerConnectionSize(100);
//保持空闲而不被驱逐的最小时间
dataSource.setMinEvictableIdleTimeMillis(3000);
//配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
dataSource.setTimeBetweenEvictionRunsMillis(2000);
//用来检测连接是否有效的sql
dataSource.setValidationQuery("SELECT 'x'");