四十五章 — 数据源及分层开发
一、了解JNDI的使用(了解)
JNDI(Java Naming and Directory Interface) java的命名和目录接口
JNDI的作用:用于在多个项目中进行资源共享,且极大的对代码进行了解耦
二、理解数据库连接池的原理
Connection Pool 连接池
作用:
用来降低每次JDBC连接数据库时的资源损耗,因为JDBC连接数据库每次都要开启连接,结束还要进行关闭,这个过程比较浪费资源
联想打客服电话
连接池原理:
提前在请求前准备一些连接对象放在连接池中,每日当有请求过来时,给其分配一个来凝结对象,然后进行处理,处理结束之后,;连接对象再回归连接池,当连接对象全部被分配之后(坐席全忙),后续的请求可以进行等待,等待连接对象可用
java提供的连接池对象接口 javax.sql.DateSource
(连接池)DBCP、 C3P0、 Druid 他们都实现自上方连接池接口
DBCP(DataBaseConnectionPool): 它是Apache的一个开源组件,它是conmmons系列的一个组件
- 下载jar包 dbcp和pooll http://commons.apache.org/proper/commons-dbcp/
- 导入过来后开始使用API(需要准备对应的工具类 可能还需要对硬编码进行解耦)
- 利用API获取对应的连接对象
1.掌握使用JNDI获取Tomcat内置的连接池
Tomcat中有内置的DBCP连接池,我们现在正好也需要,所以可以去获取一下。
<!--
name:JNDI查找用的名字
type:资源的类型 统一用接口
auth:表示这个资源是由容器(Tomcat)来管理的
maxActive:最大的连接数
maxIdle:最大的空闲连接数
maxWait:最大的连接等待时间
-->
<Resource
name="jdbc-mysql"
type="javax.sql.DataSource"
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:///kgcnewsdb?useUnicode=true&characterEncoding=utf-8"
username="root"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000"/>
public void getConnection() throws Exception {
if(conn == null || conn.isClosed()) {
// conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
// 采用连接池
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc-mysql");
conn = dataSource.getConnection();
}
}
三、熟练应用分层架构去开发项目
DAO模式:可以把业务代码和数据访问/操作代码进行分离
- DAO接口
- DAO实现类
- 数据库连接和关闭的工具类+通用的增删改查
- 实体类
三层架构:
- 表现层(Web/controller/action) :用来接收数据请求并作出响应
- 业务逻辑层(service)将业务代码完全提取出来(做业务逻辑处理,事务也是放在这一层)
- 数据访问层(dao):DAO模式