前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaWeb15-DBUtils(Java真正的全栈开发)

JavaWeb15-DBUtils(Java真正的全栈开发)

作者头像
Java帮帮
发布2018-03-19 11:01:21
7540
发布2018-03-19 11:01:21
举报

DBUtils

一.DBUtils

1. DButils的介绍

dbutils的介绍及其作用

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

作用:

封装了对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表达式获取商品信息。

注意:在修改页面上,如何选中下拉选

代码语言:javascript
复制
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. 案例-修改商品信息实现

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java帮帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DBUtils
  • 一.DBUtils
  • 二.案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档