day14dbutils与案例.docx
- 文档编号:24444373
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:45
- 大小:680.65KB
day14dbutils与案例.docx
《day14dbutils与案例.docx》由会员分享,可在线阅读,更多相关《day14dbutils与案例.docx(45页珍藏版)》请在冰豆网上搜索。
day14dbutils与案例
第14天dbutils与案例
第14天dbutils与案例1
1.1.dbutils介绍2
2.2.dbutils快速入门2
3.3.dbutilsAPI详解-DbUtils类2
4.4.dbutilsAPI详解-QueryRunner类2
5.5.dbutilsAPI详解-ResultSetHandler3
6.6.ResultSetHandler九个实现类介绍3
7.7.案例--添加商品分析3
8.8.案例--添加商品实现4
9.9.案例--查询全部分析4
10.10.案例--查询全部实现4
11.11.案例--修改分析4
12.12.案例--修改实现4
知识点回顾:
1、昨天学习了哪些jstl标签(说出你印象最深刻的)?
C:
if判断相当于java代码中if语句
C:
choosec:
whenc:
otherwise,判断,相当于if(){}elseif(){}else{}
C:
foreach用来控制循环的标签
2、JavaBean的特点是哪些?
1、无参数构造函数
2、私有属性
3、提供访问getter和setter方法
3、MVC设计模式中MVC分别指什么?
MmodelJavaBean
Vviewjsp
Ccontrollerservlet
dbutils介绍
DBUtils:
他是一个帮助Java程序员开发Dao层代码的一个简单框架。
框架:
帮助程序员提高开发的效率的工具。
(相当于木工师傅,锤子,锯子)
JDBC技术的弊端分析:
回顾day13项目中的JDBC代码:
//获取user表中所有用户
publicList
//定义一个数据库连接对象
Connectionconn=null;
//定义操作sql语句的对象
PreparedStatementstmt=null;
//定义一个封装结果集的对象
ResultSetrs=null;
try{
conn=JDBCUtils.getConnection();
Stringsql="select*fromuser";
stmt=conn.prepareStatement(sql);
rs=stmt.executeQuery();
Listlist=newArrayList<>();
//不断的获取rs中数据封装到对象,并且存入list集合
while(rs.next()){
//封装数据到user对象
Useru=newUser();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPassword(rs.getString("password"));
u.setAge(rs.getInt("age"));
u.setSex(rs.getString("sex"));
u.setEmail(rs.getString("email"));
u.setHobby(rs.getString("hobby"));
u.setAddress(rs.getString("address"));
u.setDescription(rs.getString("description"));
u.setBirthday(rs.getDate("birthday"));
list.add(u);
}
returnlist;
}catch(SQLExceptione){
e.printStackTrace();
returnnull;
}finally{
JDBCUtils.release(rs,stmt,conn);
}
}
JDBC弊端:
1)定义数据库连接对象、sql语句操作对象、结果集封装对象,代码重复
2)封装结果集数据到User对象代码重复
3)释放资源的代码重复
导致:
程序员在开发的时候,大量的重复劳动。
开发的周期长,效率低
1.1.什么是dbutils及其作用
DBUtils:
它主要是封装了JDBC的代码,简化了dao层的操作。
它主要是封装了JDBC的代码——DBUtils的底层还是JDBC,做了一次简单的封装方便程序员使用。
Apache公司提供。
Java程序员天天要去看公司。
云计算,谷歌三篇论文,hadoop——大数据技术。
阿里巴巴技术_——大型分布式电商网站,技术特点,能解决高并发,高可用问题
XX公司——lucencesolr搜索引擎技术
Apach_——在所有java领域都有新技术,技术更新,新技术出现后一年,程序员就需要掌握。
学习新技术的思路:
1)XX
2)去官网下载资料
3)API文档(说明书——英文)
4)创建工程测试功能
5)做笔记(中文)
下载:
DBUtils——http:
//commons.apache.org/proper/commons-dbutils/
解压:
1.2.dbutils三个核心类介绍
1.2.1.连接数据库对象——DbUtils
定义:
构造函数:
DbUtils()
成员函数:
它就一个连接数据库,控制事物,加载驱动的类。
注意:
今天使用C3P0连接数据库,所以不使用DbUtils类,关闭资源的时候,会使用到DbUtils,而且这个DbUtils关闭资源的方法,是框架自动调用,不需要程序员,书写java代码,手动调用。
1.2.2.SQL语句的操作对象——QueryRunner(重点:
必须掌握)
定义:
构造函数:
QueryRunner():
创建一个与数据库无关的QueryRunner对象,后期在操作数据库的时候,需要手动传入一个Connection对象,可以手动管理事物
connection.setAutoCommit(false);
mit();
QueryRunner(DataSourceds):
创建一个与数据库关联的QueryRunner对象,后期在操作数据库的时候,无需手动传入一个Connection对象,自动的管理事物。
DataSource参数:
只需要将c3p0数据库连接池对象给到我们QueryRunner(DataSourceds)的方法中,
c3p0数据库连接池对象,它实现类java.sql.DateSource这个接口
ComboPooledDataSourceextendsAbstractPoolBackedDataSourceimplementsPooledDataSource
PooledDataSource:
PooledDataSourceextendsDataSource
成员函数:
增删改方法:
update(Stringsql,Object...params):
可以执行insert、update、deletesql语句的方法,两个参数(sql语句,sql语句的参数)
update(Connectionconn,Stringsql,Object...params):
可以执行insert、update、deletesql语句的方法,三个参数(数据库连接对象、sql语句,sql语句的参数)
查询的方法
query(Connectionconn,Stringsql,ResultSetHandler
可以执行select语句的方法,四个参数(数据库连接、sql语句、封装数据的策略对象、sql语句的参数)
query(Stringsql,ResultSetHandler
可以执行select语句的方法,三个参数(sql语句、封装数据的策略对象、sql语句的参数)
构造函数与增删改查方法的组合:
QueryRunner():
update(Connectionconn,Stringsql,Object...params):
query(Connectionconn,Stringsql,ResultSetHandler
QueryRunner(DataSourceds):
update(Stringsql,Object...params):
query(Stringsql,ResultSetHandler
1.2.3.封装数据的策略对象ResultSetHandler(重点:
必须掌握)
注意:
详解参考ResultSetHandler实现类介绍
2.dbutils快速入门
2.1.导入jar包
使用mysql数据库,mysql驱动包
C3p0的jar包
Dbutils的jar包
2.2.添加C3P0配置文件和JDBCUtils工具类
需要创建一个user对象,与数据库(jdbc)user表对应。
2.3.使用QueryRunner对象完成增删改的操作
//测试DButils插入数据的方法(将数据插入到user表中),使用queryRunner
@Test
//注解:
给java程序的注释————java注释,java开发人员。
在学习struts框架,就会学习到注解开发
publicvoidtest1(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="insertintouservalues(null,?
?
)";
//开始数据库的操作
try{
intupdate=qr.update(sql,"张四","123456");
System.out.println(update);
}catch(SQLExceptione){
e.printStackTrace();
}
}
//测试修改的方法
@Test
publicvoidtest2(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="updateusersetname=?
whereid=?
";
//开始数据库的操作
try{
intupdate=qr.update(sql,"张五",5);
System.out.println(update);
}catch(SQLExceptione){
e.printStackTrace();
}
}
//测试删除的方法
@Test
publicvoidtest3(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="deletefromuserwhereid=?
";
//开始数据库的操作
try{
intupdate=qr.update(sql,5);
System.out.println(update);
}catch(SQLExceptione){
e.printStackTrace();
}
}
3.QueryRunner的query方法与ResultSetHandler接口介绍
3.1.自定义实现ResultSetHandler封装查询结果集
自定义类:
packagecn.itcast.handler;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
importmons.dbutils.ResultSetHandler;
importcn.itcast.domain.User;
/**
*@authorwjn
*自定义ResultSetHandler实现类
*/
publicclassMyHandlerimplementsResultSetHandler>{
@Override
publicList
//方法的参数中已经获取了ResultSet
//将ResultSet中的数据封装到list集合,泛型定义成user对象
//d定义一个list集合,用存贮user对象
List
//循环不断封装数据到user对象,并且存入list集合
while(rs.next()){
Useru=newUser();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
u.setPwd(rs.getString("pwd"));
list.add(u);
}
returnlist;
}
}
测试代码:
//测试查询的方法
@Test
publicvoidtest4(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="select*fromuser";
//开始数据库的操作
try{
//第一参数sql语句,第二个参数,封装数据的策略
List
System.out.println(list);
}catch(SQLExceptione){
e.printStackTrace();
}
}
4.ResultSetHandler实现类介绍(由DBUtils框架给我提供)
实现类的学习方式:
先测试,根据测试结果,总结当前实现类的策略
4.1.ArrayHandler
/**
*测试查询的方法,使用ArrayHandler实现类
*ArrayHandler封装策略:
将查询的结果,第一行数据,封装到object数组中。
**/
@Test
publicvoidtest5(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="select*fromuser";
//开始数据库的操作
try{
//第一参数sql语句,第二个参数,封装数据的策略
Object[]objects=qr.query(sql,newArrayHandler());
for(Objectobject:
objects){
System.out.println(object);
}
}catch(SQLExceptione){
e.printStackTrace();
}
}
4.2.ArrayListHandler
/**
*测试查询的方法,使用ArrayListHandler实现类
*ArrayListHandler封装策略:
将查询的结果每一行数据,封装到object数组,再存入list集合
**/
@Test
publicvoidtest6(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="select*fromuser";
//开始数据库的操作
try{
//第一参数sql语句,第二个参数,封装数据的策略
List
for(Object[]objects:
list){
for(Objectobject:
objects){
System.out.println(object);
}
System.out.println("=====");
}
}catch(SQLExceptione){
e.printStackTrace();
}
}
4.3.BeanHandler(重点:
必须掌握)
/**
*测试查询的方法,使用BeanHandler实现类
*BeanHandler封装策略:
将查询结果的第一行,封装到user对象中
**/
@Test
publicvoidtest7(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="select*fromuser";
//开始数据库的操作
try{
//第一参数sql语句,第二个参数,封装数据的策略
Useruser=qr.query(sql,newBeanHandler
System.out.println(user);
}catch(SQLExceptione){
e.printStackTrace();
}
}
4.4.BeanListHandler(重点:
必须掌握)
/**
*测试查询的方法,使用BeanListHandler实现类
*BeanListHandler封装策略:
将查询结果的每一行先封装到user对象中,再存入list集合
**/
@Test
publicvoidtest8(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="select*fromuser";
//开始数据库的操作
try{
//第一参数sql语句,第二个参数,封装数据的策略
List
System.out.println(list);
}catch(SQLExceptione){
e.printStackTrace();
}
}
4.5.ColumnListHandler(可指定列封装数据)
/**
*测试查询的方法,使用ColumnListHandler实现类
*ColumnListHandler封装策略:
将指定列的数据封装到list集合,指定列的动作是在构造函数中完成newColumnListHandler(3)
*如果不指定列,默认是第一列
**/
@Test
publicvoidtest9(){
//创建一个QueryRunner对象,使用它来操作sql语句,这个对象使用的是带参数的构造函数,是与数据库关联
QueryRunnerqr=newQueryRunner(JDBCUtils.getDataSource());
//定义一个sql语句,给queryrunner对象操作
Stringsql="select*fromuser";
//开始数据库的操作
try{
//第一参数sql语句,第二个参数,封装数据的策略
Listobject=qr.query(sql,newColumnListHandler(3));
System.out.println(object);
}catch(SQLExceptione){
e.printStackTrace();
}
}
4.6.MapHand
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day14dbutils 案例