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表达式获取商品信息。
注意:在修改页面上,如何选中下拉选
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. 案例-修改商品信息实现