数据源和分层开发
1. 了解JNDI的使用
JNDI(Java Naming and Directory Interface)。 Java命名和目录接口。
JNDI的作用:用于在多个项目进行资源的共享,且极大的对代码进行了解耦。
2. 理解数据库连接池的原理
Connection Pool 连接池
**它的作用:**用来降低每次JDBC连接数据库时的资源损耗,因为JDBC连接数据库每次都要开启连接,结束还要进行关闭,这个过程比较浪费资源。
联想你平时打客服电话(连接池)。
**连接池原理:**提前在请求前准备一些连接对象,放在连接池中,每当有请求过来时给其分配一个连接对象,然后进行处理,处理结束之后,连接对象再回归连接池。当连接对象全部被分配之后(坐席全忙),后续的请求可以进行等待,等待连接对象可用。
Java提供的连接池接:javax.sql.DataSource
DBCP、C3P0、Druid它们都实现在上方连接池接口。
DBCP(DataBaseConnectionPool):它是Apache的一个开源池组件,它是commons系列的一个组件。
- 下载jar包 dbcp和pool http://commons.apache.org/proper/commons-dbcp/
- 导入过来之后,开始使用API(API内容不少 需要你准备对应工具类,可能还需要对硬编码进行解耦)
- 利用API获取对应的连接对象
2.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();
}
}
3. 熟练应用分层架构去开发项目
DAO模式:可以把业务代码和数据访问/操作代码进行分离
- DAO接口
- DAO实现类
- 数据库连接和关闭的工具类+通用的增删改查操作
- 实体类
三层架构:
- (酒店前台迎宾)表现层(web/controller/action):用来接收用户请求并作出响应的
- (酒店厨师)业务逻辑层(service):我们将业务逻辑代码完全提取出来(做业务逻辑处理,事务也是放在这一层的)
- (酒店采购)数据访问层(dao):DAO模式(专门做数据访问操作的)