DBUtils一.DBUtils

1. DButils的先容

dbutils的先容及其浸染

DBUtils是java编程中的数据库操作实用工具,小巧大略实用。

用jsp与SQL实现商品查找JavaWeb15DBUtilsJava真正的全栈开辟 PHP

浸染:

封装了对JDBC的操作,简化了JDBC操作,可以少写代码

例如:

对付数据表的读操作,可以把结果转成Array,List等java凑集,便于程序员操作;

对付数据表的写操作,也变得很大略(只需写sql语句)

可以利用数据源,利用JNDI,数据库连接池等技能来优化性能--重用已经构建好的数据库连接工具

dbutils三个核心功能先容

QueryRunner

QueryRunner中供应了对sql语句操作的API

紧张有一下三个方法:

query() 用于实行select

update() 用于实行 insert update delete

batch() 批处理

ResultSetHandler接口

用于定义select操作后,若何封装结果集.

DBUtils类

便是一个工具类,定义了关闭资源与事务处理的方法

2. DButils入门案例

a. 导入jar包 (除了commons-dbutils-1.4.jar还需连接池和驱动jar包)

b. 创建QueryRunner工具

c. 利用query方法实行select语句

d. 利用ResultSetHandler封装结果集

e. 利用DbUtils类开释资源

public static void main(String[] args) throws SQLException {

//创建QueryRunner工具

QueryRunner runner=new QueryRunner(DataSourceUtils.getDateSource());

//调用查询方法

List<User> list=runner.query(\公众select from user\公众, new ResultSetHandler<List<User>>() {

@Override

public List<User> handle(ResultSet rs) throws SQLException {

List<User> list=new ArrayList<User>();

while(rs.next()){

list.add(new User(rs.getInt(1), rs.getString(2), rs.getString(3)));

}

return list;

}

});

//遍历结果

if(list.size()>0){

for (User user : list) {

System.out.println(user);

}

}

}

3. DButils API详解-DButils类

关闭操作

事务操作

4. DButils API详解-QueryRunner类

布局方法

QueryRunner runner=new QueryRunner(DataSouce ds);有参数布局.

这时期表它的事务是自动事务,一条sql一个事务.

QUeryRunner runner=new QueryRunner();无参数布局

它的事务是手动事务

有参数的QueryRunner与无参数的QueryRunner它们在实行query,update,batch方法时,是不一样的。
有参数QueryRunner----它利用的query,update,batch方法时,是不用通报Connection参数的. 无参数QueryRunner----它利用的query,update,batch方法时,是须要有Connection参数的.如果利用的是QueryRunner()无参数,底层利用的是PreparedStatement工具,利用完成后会自动关闭PreparedStatement,但是Connection工具不会关闭.如果利用的是QueryRunner(DataSource ds)有参数,底层会先根据通报的数据源工具,获取一个Connection工具.它利用的是也是PreparedStatement工具,利用完成后关闭了PreparedStatement工具,并且也关闭了Connection工具.

query方法

update方法

batch方法

5. DButils API详解-ResultSetHandler接口

ResultSetHandler功能剖析

它紧张是用于将结果集封装到工具中.

自定义封装便是创建一个ResultSetHandler的实现类去完成封装。

在dbutils的api中供应了ResultSetHandler的实现类:

ArrayHandler :将ResultSet中第一行的数据转化成工具数组

ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]

BeanHandler :将ResultSet中第一行的数据转化成类工具

BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类工具

ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object工具

KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。
Map中存放的是数据

MapHandler :将ResultSet中第一行的数据存成Map映射

MapListHandler :将ResultSet中所有的数据存成List。
List中存放的是Map

ScalarHandler :将ResultSet中一条记录的个中某一列的数据存成Object

ResultSetHandler中handler方法浸染

它的紧张浸染是用于将结果集数据封装到我们指定的一个工具中。

6. ResultSetHandler九个实现类的先容

ArrayHandler

ArrayListHandler

BeanHandler

BeanListHandler

ColumnListHandler

MapHandler

MapListHandler

KeyedHandler

ScalarHandler

二.案例

案例准备:

将resource下的页面下的webroot更换掉myeclipse中的webroot

支配项目之后,访问 localhost:xx/dayxx/admin/login/home.jsp

这个页面也是我们往后在登录成功之后的后台首页

后台页面是利用frameset做的框架,分为上中下三部分,

中间左边的菜单栏是一棵树(dtree)

dtree的用法:

1.创建一棵树

2.添加根节点

3.添加其他节点

//创建一棵树

var d = new dTree('d');

//添加根节点

d.add(0,-1,'系统菜单树');

//添加其他节点

d.add(1,0,'商品管理','${pageContext.request.contextPath}/admin/login/welcome.jsp','','mainFrame');

add方法的参数解释:

位置 参数别名 类型 功能

1 id int 节点自身的id(唯一)

2 pid int 节点的父节点id

3 name string 节点显示在页面上的名称

4 url string 节点的链接地址

5 title string 鼠标放在节点上显示的提示信息

6 target string 节点链接所打开的目标frame

7 icon string 节点关闭状态时显示的图标

8 iconOpen string 节点打开状态时显示的图标

9 open bool 节点第一次加载是否打开

把稳:前三个参数必须有.

在本日的案例里面:我们要完成添加商品,展示全部商品以及修正商品这三个功能

添加商品的页面:/admin/products/add.jsp

展示全部商品的页面:/admin/products/list.jsp

修正商品的页面:/admin/products/edit.jsp

接下来看看做这些功能须要准备什么:

查看商品时显示的信息

添加商品时的信息

商品具有的信息:

商品编号

商品名称

商品价格

商品数量

商品种别

商品描述

创建商品表及实体类:

Create table products(

id varchar(50) primary key,

name varchar(30),

price double,

pnum int,

category varchar(20),

description varchar(200)

);

private String id;

private String name;

private Double price;

private Integer pnum;

private String category;

private String description;

导入jar包

1. 案例-添加商品剖析

功能描述

在add.jsp页面上输入商品信息完成商品信息添加到数据库操作,添加完成后跳转到商品查询页面,显示出所有商品

剖析

步骤:

1. 添加商品的页面是 admin/products/add.jsp

2. 当输入商品信息,该当将信息提交到一个servlet中(AddProductServlet)

3. 在AddProductServlet中.获取要求参数封装到javaBean 然后调用ProductService中的addProduct(Product p)方法完成添加商品操作。

4. 在ProductService中的addProduct方法内调用ProductDao中的addProduct(Product p)方法完成添加 商品操作

5. 在ProductDao中的addProduct方法内利用dbutils完成商品添加

2. 案例-添加商品实现

3. 案例-查询全部商品剖析

功能描述

在点击left.jsp页面上的商品查看时,展示出所有商品信息

剖析

步骤:

1.修正left.jsp页面上的路径

在点击商品查看时,就会访问ListProductServlet.

2.在ListProductServlet中调用service,在调用dao查询出所有商品信息 List<Product> ps;

3.将ps通过request.setAttribute(“ps”,ps)要求转发到admin/products/list.jsp页面

4.在list.jsp页面上显示出ps凑集中商品的信息。

通过<c:forEach>将所有的ps中的数据迭代出来展示

4. 案例-查询全部商品实现

5. 案例-修正商品信息剖析

功能描述

在商品展示页面上,点击编辑商品,首先将商品的详细信息展示出来,在页面上可以对商品息进行修正,当修正后,跳转到展示商品页面展示出所有商品信息

剖析

步骤:

1.根据id查询出商品并展示在页面上

a. 修正list.jsp页面上的编辑连接

b. 在FindProductByIdServlet中获取id值

c. 在FindProductByIdServlet调用service中findProductById方法得到一个Product工具

d. 将Product存储到request域中,并要求转发到/admin/products/edit.jsp页面

e. 在edit.jsp页面通过el表达式获取商品信息。

把稳:在修正页面上,如何选中下拉选

var category = \"大众${p.category}\"大众; //1.得到商品的种别

//2.将category这个下拉框中的option的value与category相同的项设置为默认值

var ops = document.getElementById(\公众category\公众).options;

for ( var i = 0; i < ops.length; i++) {

if (ops[i].value == category) {

ops[i].selected = true;

}

}

2.修正操作

根据商品的id来进行修正操作。
我们在开拓中,一样平常进行修正时,在表单中都会存在一个隐蔽域。

a. .在edit.jsp页面上添加一个隐蔽域,它用于保存商品的id.

b. 表单提交到EditProductServlet中,通过BeanUtils将数据封装到Product 工具中,调用ProductServcie的修正操作的方法

c. 在ProductService中调用ProductDao中修正操作的方法

d. 在ProductDao中进行修正

e. 当修正完成后,我们重新查询出商品信息

6. 案例-修正商品信息实现