[TOC]
## 问题01:DBUtils的使用
### 1. 概述
> Apache组织提供
> 实现了对JDBC的简单封装
![](https://img.kancloud.cn/e0/c6/e0c6fc5621e33d0ba9f60fffae824b35_1066x342.png)
* BeanHandler:将结果集中的**第一行**数据封装到一个对应的JavaBean实例中。
* BeanListHandler:将结果集中的**所有行**数据都封装到一个对应的JavaBean实例中,并存放到List里。
* ColumnListHandler:将**所有行**的**某列**属性的值封装到List集合中。
* ScalarHandler:将结果集中**某一行**的**某一列**数据存储成Object对象。
### 2. jar包
![](https://img.kancloud.cn/95/6c/956c2a0b795c82c9c2f395bad8c3907a_279x89.png)
### 3. 实现CRUD
1. 创建runner
```
QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());
```
2. 执行单条查询
```
XXX object = (XXX) runner.query(sql, new BeanHandler(XXX.class), Object[] params);
```
3. 执行多条查询
```
List<XXX> list = (List) runner.query(sql, new BeanListHandler(XXX.class), Object []params);
```
4. 执行更新
```
int num = runner.update(sql, Object[] params);
```
## 问题02:JdbcTemplate的使用
### 1. 概述
> Spring提供
> Spring 框架对 JDBC 进行封装
### 2. jar包
![](https://img.kancloud.cn/6e/4d/6e4de253d207e6b26b467f47d66a0a4b_279x161.png)
### 3. 实现CRUD
1. 创建template
```
private JdbcTemplate template = new JdbcTemplate(DruidUtil.getDs());
```
2. 执行单条查询
```
XXX object = template.queryForObject(sql,new BeanPropertyRowMapper<XXX>(XXX.class), Object... params);
```
3. 执行多条查询
```
List<XXX> list = (List<XXX>) template.query(sql,new BeanPropertyRowMapper<XXX>(XXX.class), Object... params);
```
4. 执行更新
```
int num = template.update(sql, Object... params);
```
- 1课程概述
- 2环境配置
- 3MVC
- 3.1View
- 3.1.1前端基础
- 3.1.2JSP语法
- 3.1.3JSP内置对象1
- 3.1.4JSP内置对象2
- 3.2Bean
- 3.3Controller
- 3.3.1Servlet
- 3.3.2Filter
- 3.3.3Listener
- 3.4EL&JSTL
- 4三层架构
- 4.1数据库操作
- 4.1.1JDBC
- 4.1.2JDBC优化
- 4.2三层架构设计
- 4.3程序优化
- 4.3.1数据库连接优化
- 4.3.2数据库操作优化
- 4.4安全专题
- 4.4.1Ajax异步查询
- 4.4.2CAPTCHA
- 4.4.3MD5&SHA
- 4.4.4Cookie
- 4.4.5分页显示
- 4.4.6文件上传
- 4.4.7发送邮件
- 5企业级框架
- 5.0Maven
- 5.1MyBatis
- 5.2Spring
- 5.3SpringMVC
- 6实践项目
- 6.1实验1-用户登录(MVC)
- 6.2实验2-访问统计(Servlet高级)
- 6.3实验3-三层架构
- 6.4实验4-安全信息系统