DBUtils一.DBUtils
1. DButils的先容
dbutils的先容及其浸染
DBUtils是java编程中的数据库操作实用工具,小巧大略实用。
浸染:
封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
例如:
对付数据表的读操作,可以把结果转成Array,List等java凑集,便于程序员操作;
对付数据表的写操作,也变得很大略(只需写sql语句)
可以利用数据源,利用JNDI,数据库连接池等技能来优化性能--重用已经构建好的数据库连接工具
dbutils三个核心功能先容
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. 案例-修正商品信息实现