Java-Web程序设计与案例教程-第6章-数据库整合开发

PPT
  • 阅读 53 次
  • 下载 0 次
  • 页数 59 页
  • 大小 1012.000 KB
  • 2022-11-12 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
Java-Web程序设计与案例教程-第6章-数据库整合开发
可在后台配置第一页与第二页中间广告代码
Java-Web程序设计与案例教程-第6章-数据库整合开发
可在后台配置第二页与第三页中间广告代码
Java-Web程序设计与案例教程-第6章-数据库整合开发
可在后台配置第三页与第四页中间广告代码
Java-Web程序设计与案例教程-第6章-数据库整合开发
Java-Web程序设计与案例教程-第6章-数据库整合开发
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 59
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】Java-Web程序设计与案例教程-第6章-数据库整合开发.ppt,共(59)页,1012.000 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-2276.html

以下为本文档部分文字说明:

第6章数据库整合开发本章内容MySQL简介JDBC概述数据库连接池DBUtils框架简介简易购物商城6.1MySQL简介MySQL是一个关系型数据库,它由瑞典MySQLAB公司开发,目前属于Oracle旗下的产品。MySQL是最流行的关系型数据

库管理系统之一,在Web应用方面,MySQL是最好的关系数据库管理系统(RelationalDataBaseManagementSystem,RDBMS)应用软件。6.2JDBC概述Java数据库连接技术(JavaDataBaseConnectivity,JDBC)是Java访问数据库资

源的标准,JDBC标准定义了一组JavaAPI,允许用户写出SQL语句,然后交给数据库。6.2JDBC概述如图6.1所示,如果没有JDBC或者ODBC,开发人员必须使用不同的一组API来访问不同的数据库;而有了JDBC或者ODBC,则只需要使用一组API,再加上数据库厂商提供的数据库驱动程

序就可以访问不同的数据库了,如图6.2所示。所以,利用JDBC,我们就可以把同一个企业级Java应用移植到另一个数据库应用上。6.2JDBC概述图6.1应用程序直接访问数据库图6.2应用程序访问JDBC6.2JDBC概

述JDBC主要包含两部分:面向Java程序员的JDBCAPI和面向数据库厂商的JDBCDriveAPI。◼1.面向Java程序员的JDBCAPI它主要由一系列的接口定义所构成。java.sql.DriveManager:该接

口定义了用来处理装载驱动的程序,并且为创建新的数据库连接提供支持。java.sql.Connection:该接口定义了实现对某一种指定数据库连接的功能。6.2JDBC概述java.sql.Statement:该接口定义了在一个给定的连接中作为SQL语

句执行声明的容器以实现对数据库的操作。它主要包含有如下两种子类型。◼java.sql.PreparedStatement:该接口定义了用于执行带或不带IN参数的预编译SQL语句。◼java.sql.CallableStatement:该接口定义了用于执行数据库的存储过程的调用。

java.sql.ResultSet:该接口定义了执行数据库的操作后返回的结果集。◼2.面向数据库厂商的JDBCDriveAPI6.2JDBC概述6.2.1创建数据库连接6.2.2SQL的执行6.2.3SQL执行

结果的处理6.2.1创建数据库连接在Java程序中要操作数据库,一般应该通过如下几步。◼1.下载数据库开发所需要的驱动包用户可以从对应的数据库厂商的官网进行下载,例如,下载MySQL驱动包,如图6.3所示,选择“JDBCDriverforMySQL”进行下载。下载的驱动包是一

个压缩包,将包内的“mysql-connector-java-5.1.42-bin.jar”复制到“WebRoot\lib”文件夹下,如图6.4所示。6.2.1创建数据库连接图6.3下载MySQL驱动包图6.4加载MySQL驱动包6.2.1创建数据库连接◼2.数据库管理工具在开发中,我

们一般会创建一个专用于创建数据库连接和释放数据库连接的工具类。建立与数据库的连接需要完成如下两个步骤。(1)加载驱动类到内存Class.forName("com.mysql.jdbc.Driver");(2)创建与数据源

的连接Connectioncon=DriverManager.getConnection(Stringurl,Stringusername,Stringpassword);6.2.2SQL的执行在实际开发中,当需要访问数据库时,只需要调用以下方法:Connection

conn=DBUtil.getConnection();就可以获得一个java.sql.Connection类型的数据库连接对象,通过这个连接对象,用户可以操作数据库,发送目标SQL给数据库,并接收响应

结果。6.2.2SQL的执行在已建立数据库连接的基础上,向数据库发送要执行的SQL语句的接口是Statement。Statement用于执行静态的SQL语句。◼(1)java.sql.Statementjava.sql.Statement类型的对

象,是通过java.sql.Connection对象获得的,其代码如下:Statementst=conn.createStatement();所获得的Statement对象st,可以用来执行SQL语句,Statement执行SQL语句的主要方法有两

个:intexecuteUpdate(Stringsql);ResultSetexecuteQuery(Stringsql);6.2.2SQL的执行其中,executeUpdate(Stringsql)方法可用来执行数据库的更新操作。该方法的返回值类型为int,代表影响的记录

条数,即插入了几条数据,修改了几条数据,删除了几条数据等。而executeQuery(Stringsql)方法可用来执行数据库的查询操作。该方法的返回值类型是java.sql.ResultSet,该类型能够存储数据库返回的所有记录,并支持按条读取结果数据。6.2.2SQL的执行◼(

2)java.sql.PreparedStatement接口在Statement中可以看到,动态SQL的生成是通过字符串拼接而成的,但是字符串拼接会带来很多的安全隐患,其中最为常见的安全漏洞就是SQL注入。下面以登录功能为例,

在cn.edu.zzti.dao包下的UserDAO接口中定义登录判断方法,代码如下:publicUserDOfindUser(Stringusername,Stringpassword)throwsSQLException;

具体代码如下:6.2.2SQL的执行在代码的第6行,我们将拼接后的SQL语句打印到控制台进行观察。在第12行处,需要将获得的数据库查询结果进行封装,这里暂不实现这个功能。下面先来创建一个cn.edu.zzti.dao.impl.mysql.jdbc.t

est.UserDAOImplTest类,对方法findUser进行测试,具体代码如下。1publicUserDOfindUser(Stringusername,Stringpassword)throwsSQ

LException{2Stringsql="select*fromuserwhereusername='"+3username+4"'andpassword='"+5password+"'";6System.out.println("登录sql是:"+sql);7Connectionconn=

DBUtil.getConnection();8Statementst=conn.createStatement();9ResultSetrs=st.executeQuery(sql);10if(rs.next()){11UserDOuser=ne

wUserDO();12//将查询结果封装到user对象中,此处先不处理13returnuser;14}15returnnull;16}6.2.2SQL的执行Assert.assertNotNull(Objecto)是Junit的断言,该断言方法判断对象o是否为空,

为空则当前测试方法通过,否则测试方法失败。执行结果显示,使用不存在的用户名和密码,调用登录方法执行结果为登录正常。在输出的SQL结果显示,最终执行的SQL如下:1publicclassUserDAOImplTest{2privateUs

erDAOuserDAO=(UserDAO)3DAOFactory.getDAO("cn.edu.zzti.dao.impl.mysql.jdbc.UserDAOImpl");4@Test5publicvoidtestFinUser(){6Strin

gusername="test'or1=1#";7Stringpassword="";8try{9Assert.assertNull(userDAO.findUser(username,password));10}catch(SQLExceptione){11e.printStackTrace(

);12fail("出现异常,执行失败");13}14}15}6.2.2SQL的执行select*fromuserwhereusername='test'or1=1#'andpassword=‘’在这个SQL中,“#”代表MySQL

中的注释。该语句的本意是从数据库中获取全部的数据,因为“or1=1”使得这个条件恒为真。select*fromuserwhereusername='test'or1=16.2.2SQL的执行为了避免SQL注入的问题,JDBC提供了一种SQL预编译的机制,即PreparedStatement。首先

用户提交的SQL中可以不指定具体的参数,对于可变值部分让用户使用“?”(即占位符)来代替。然后再对SQL中的占位符单独设置值,将两者提交给数据库引擎进行编译,此时数据库引擎仅仅编译带有占位符“?”的SQL语句,等到

编译完成后,在执行SQL时,将参数带入编译结果,此时,参数就只会作为参数整体进行数据比较,而不会作为SQL语法的一部分。6.2.2SQL的执行◼PreparedStatement对象的创建方式如下:PreparedStatementps=conn.prepareStatement(St

ringsql);◼而SQL也需要进行相应的改写:Stringsql="select*fromuserwhereusername=?andpassword=?";与之前的SQL对比可以发现,原来的形式参数部分被占位符“?”代替,那么就需要将形式参数与具体

的“?”绑定。绑定操作可通过调用setXXX方法来完成,其中,XXX是与该参数相对应的类型。例如,如果参数的数据类型是long,则使用的方法就是setLong。setXXX方法的第一个参数是要设置的参数的序数位置,第二个参数是设置给该参数的值。例如,上

述SQL将第一个参数设为形式参数username,第二个参数设为形式参数password,代码如下所示:ps.setString(1,username);ps.setString(2,password);6.2.3SQL执行结果

处理无论是Statement,还是PreparedStatement,在执行SQL的时候,主要应用的执行方法是executeQuery和executeUpdate,Statement在执行execute*方法时,需要以SQL为字符串参数进行传递,而PreparedStatement则不需要参

数。调用规则总结如表6.2所示。6.2.3SQL执行结果处理类名方法定义说明StatementResultSetexecuteQuery(Stringsql)执行select等StatementintexecuteUpdate(Stringsql)执行insert、u

pdate、delete等PreparedStatementResultSetexecuteQuery()执行select等PreparedStatementintexecuteUpdate(Stringsql)执行insert、update、delete等表6.2SQL执行结果6.3数据库连接

池创建数据库连接是一个十分耗时的操作,也容易让数据库产生安全隐患。因此,在程序初始化的时候,集中创建了多个数据库连接,并对它们进行集中管理,以供程序使用,这样就可以保证较快的数据库读/写速度,而且更加

安全可靠。数据库连接池的运行原理如图6.16所示。6.3数据库连接池Servlet1Servlet2......ServletnDAO1.....DAOmMySQLuser1......usersC

onnectionConnection......Connection图6.16数据库连接池原理6.3数据库连接池6.3.1DataSource6.3.2Tomcat数据源6.3.3DBCP6.3.1DataSourceJDBC1.0原来是用DriverManager类来产生一个对数据源

的连接。JDBC2.0用一种替代的方法,使用java.sql.DataSource实现,代码变得更小巧精致,也更容易控制。编写数据库连接池需实现Java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法

:6.3.1DataSourceConnectiongetConnection()ConnectiongetConnection(Stringusername,Stringpassword)开发数据库连接池实现DataSource接口时,在DataSo

urce的实现类的构造方法中批量创建与数据库的连接,并把创建的连接加入存储java.sql.Connection对象的集合中。实现getConnection方法,让getConnection方法每次调用时,从存储java.sql.Connection对象的集合中取一个

Connection返回给用户。6.3.2Tomcat数据源Tomcat提供了数据源和连接池的实现,开发者直接使用即可。这里的Tomcat需要JDBC驱动,而不再是应用程序需要JDBC驱动,所以要先将对应数据库的JDBC驱动类库复制到Tomcat目录中的lib文件夹下,供Tomcat

调用。首先在Tomcat目录中的“lib”目录下放入数据库驱动jar包,在工程的“META-INF”目录下创建一个“context.xml”文件,如图6.17和图6.18所示。6.3.2Tomcat数据源图6.

17添加MySQL驱动包图6.18工程添加配置文件6.3.2Tomcat数据源“context.xml”的配置内容如下:这些属性含义如表6.4所示。1<Context>2<Resourcename="shop"3auth="Container"4typ

e="javax.sql.DataSource"5username="root"6password="root"7driverClassName="com.mysql.jdbc.Driver"8url="jdbc:mysql://localhost:3306/shop"9ini

tialSize="10"10maxActive="20"11maxIdle="4"/>12</Context>6.3.2Tomcat数据源键名含义name指定资源相对于java:comp/env上下文的JNDI名auth指定资源的管理者(

默认Container即可)type指定资源所属的Java类的完整限定名(默认即可)maxIdle指定连接池中保留的空闲数据库连接的最大数目maxWait指定等待一个数据库连接成为可用状态的最大时间,单位毫秒

username指定连接数据库的用户名password指定连接数据库的密码driverClassName指定JDBC驱动程序类名url指定连接数据库的URL表6.4Tomcat数据源配置文件属性解析6.3.2

Tomcat数据源这里<Resource>元素的name属性即为我们使用JNDI去检索的关键字,在本例中为“shop”。接下来采用与之前工程相同的方式,创建数据库工具类cn.edu.zzti.util.tomcat.DBUti

l来简化对数据库的操作。6.3.2Tomcat数据源1publicclassDBUtil{2privatestaticDataSourceds=null;3static{4try{5ContextinitCtx=newInitialContext();6Contextenv

Ctx=(Context)initCtx.lookup("java:comp/env");7ds=(DataSource)envCtx.lookup("shop");8//根据<Resource>元素的name属性值到

JNDI容器中检索连接池对象9}catch(Exceptione){10thrownewExceptionInInitializerError(e);11}12}13publicstaticConnectionget

Connection()throwsSQLException{14returnds.getConnection();//利用数据源获取连接15}16}6.3.3DBCP数据库连接池(DataBaseConnectionPool,DBCP)是Java数据

库连接池的一种,由Apache开发,通过数据库连接池可以让程序自动管理数据库连接的释放和断开。DBCP是Apache上的一个Java连接池项目,也是Tomcat使用的连接池组件。单独使用DBCP需要准备3个包:◼co

mmons-dbcp-版本.jar;◼commons-pool-版本.jar;◼commons-logging-版本.jar。6.3.3DBCPDBCP的配置文件的内容如下,其参数含义如表6.5所示。参数描述username传递给JDBC驱动的用于建立连接的用户名passw

ord传递给JDBC驱动的用于建立连接的密码url传递给JDBC驱动的用于建立连接的URLdriverClassName使用的JDBC驱动的完整有效的Java类名connectionProperties当建立新连接时被发送给JDBC驱动的连接参数表6.5DBCP常见配置参数含义6.4DBU

tils框架简介CommonsDBUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。DBUtils是Java编程中的数据库操作实用工具,简单且实用。6.4DBUtils框架简介DBUtils对于数据表的

读操作,它可以把结果转换成List、Array、Set等Java集合,以便于程序员操作。对于数据表的写操作,也变得很简单,只需写SQL语句;可以使用数据源、JNDI、数据库连接池等技术来优化性能,重用已经构建好的数据库连接对象,而不必

像PHP、ASP那样,需要费时费力地不断重复构建和析构这样的对象。CommonsDBUtils的核心类有3个:org.apache.commons.dbutils.ResultSetHandler、org.apache.commons.dbutils.QueryR

unner、org.apache.commons.dbutils.DBUtils。6.4DBUtils框架简介6.4.1QueryRunner6.4.2ResultSetHandler6.4.3资源释放

6.4.1QueryRunnerQueryRunner类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。◼(1)QueryRunner类的构造方法①默认的

构造方法QueryRunnerqueryRunner=newQueryRunner();。②需要一个javax.sql.DataSource来作参数的构造方法。QueryRunnerqr=newQueryRunner(DBUtil.getDat

aSource())6.4.1QueryRunner(2)QueryRunner类的主要方法◼①publicObjectquery(Connectionconn,Stringsql,Object[]params,ResultSetHandlerrsh)throwsSQLException:执行一

个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理PreparedStatement和ResultSet的创建和关闭流程。◼②publicObjectque

ry(Stringsql,Object[]params,ResultSetHandlerrsh)throwsSQLException:基本与第一种方法相同,唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的DataSo

urce数据源或使用setDataSource方法设置的数据源。6.4.1QueryRunner◼③publicObjectquery(Connectionconn,Stringsql,ResultSetHandlerrsh)throwsSQLExcept

ion:执行一个不需要置换参数的查询操作。◼④publicintupdate(Connectionconn,Stringsql,Object[]params)throwsSQLException:用来执行一个

更新操作,如插入、更新或删除。◼⑤publicintupdate(Connectionconn,Stringsql)throwsSQLException:用来执行一个不需要置换参数的更新操作。6.4.2ResultSetHandlerResultSetHan

dler接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式。ResultSetHandler接口提供了一个单独的处理java.sql.ResultSet的方法:Objecthandle(java.sql.ResultSetrs

)6.4.2ResultSetHandler◼(1)查询类操作方法介绍ResultSetHandler接口的实现类见表6.6,下面对每个接口的实现类的具体使用方式进行介绍。功能实现类单行数据处理ScalarHandler、Ar

rayHandler、MapHandler、BeanHandler多行数据处理BeanListHandler、ArrayListHandler、MapListHandler、ColumnListHandler、Keye

dHandler、BeanMapHandler可供扩展的类BaseResultSetHandler表6.6ResultSetHandler接口实现类说明6.4.2ResultSetHandler①ArrayHandler:把结果集中的第一行数据

转换成对象数组,示例代码如下。②ArrayListHandler:把结果集中的每一行数据都转换成一个对象数组,再存放到List中,示例代码如下。1publicstaticvoidqueryToArray(Connectionconn)throwsSQLExcept

ion{2QueryRunnerqueryRunner=newQueryRunner();3Stringsql="select*fromauction";4Object[]rs=queryRunner.query(conn,sql,newArrayHandler());5for(in

ti=0;i<rs.length;i++){6System.out.print("第一列:"+rs[i]+"\t");7}8System.out.print("\n");9}1publicstaticvoidqueryToArrayList(Connectionconn)th

rowsSQLException{2QueryRunnerqueryRunner=newQueryRunner();3Stringsql="select*fromauction";4Listrs=queryRunner.query(conn,sql,newArrayListHandl

er());5for(Objectrecord:rs){6System.out.println(Arrays.toString((Object[])record));7}8}6.4.2ResultSetHandler③BeanHandler<T>

:把结果集中的第一行数据封装到一个对应的JavaBean实例中,示例代码如下。④BeanListHandler<T>:把结果集中的每一行数据都封装到一个对应的JavaBean实例中,再存放到List中,示例代码如下。1publicst

aticvoidqueryToBean(Connectionconn)throwsSQLException{2QueryRunnerqueryRunner=newQueryRunner();34AuctionDOauc=queryRunner.query(conn,5"select*fromau

ction",6newBeanHandler<AuctionDO>(AuctionDO.class));7System.out.println(auc);8}1publicstaticvoidqueryToBeanList(Connectionco

nn)throwsSQLException{2Stringsql="select*fromauction";3QueryRunnerqueryRunner=newQueryRunner();4List

<AuctionDO>list=queryRunner.query(conn,sql,5newBeanListHandler<AuctionDO>(AuctionDO.class));6for(inti=0;i<list.size()

;i++){7System.out.println(list.get(i));8}9}6.4.2ResultSetHandler⑤MapHandler:把结果集中的第一行数据封装到一个Map中,key是列名,value就是对应的值,示例代码如下。⑥

MapListHandler:把结果集中的每一行数据都封装到一个Map中,然后再存放到List,示例代码如下。1publicstaticvoidqueryToMap(Connectionconn)throwsSQLException{2Stringsql=

"select*fromauction";3QueryRunnerqueryRunner=newQueryRunner();4Map<String,Object>map=queryRunner.query(conn,sql,newMapHandler());5Set<Entry<String,

Object>>set=map.entrySet();6for(Entry<String,Object>entry:set){7System.out.println(entry.getKey()+":"+entry.getValue());8}

9}1publicstaticvoidqueryToMapList(Connectionconn)throwsSQLException{2Stringsql="select*fromauction";3QueryRunnerqueryRunner=newQueryRunner();4

ist<Map<String,Object>>list=queryRunner.query(conn,sql,newMapListHandler());5for(Map<String,Object>mapValue:list){6Set<Entry<String,Object>>set

1=mapValue.entrySet();7for(Entry<String,Object>entry:set1){8System.out.println(entry.getKey()+":"+entry.getValue());9}10}11}6.4.2ResultSetHandl

er⑦ColumnListHandler<T>:把结果集中的某一列的数据存放到List中,示例代码如下。⑧KeyedHandler<K>:把结果集中的每一行数据都封装到一个Map中(List),再把这些Map存到一个Map里,其ke

y为指定的列,示例代码如下。1publicstaticvoidqueryToColList(Connectionconn)throwsSQLException{2QueryRunnerqueryRunner=newQueryRunner();3Stringsql="select

*fromauction";//whereid=14List<Object>list=(List<Object>)queryRunner.query(conn,sql,5newColumnListHa

ndler("name"));6System.out.println(list);7}1publicstaticvoidqueryToKeyedHandler(Connectionconn)throwsSQLExce

ption{2QueryRunnerqueryRunner=newQueryRunner();3Stringsql="select*fromusers";4Map<Integer,Map<String,Object>>rs1=queryRunner.query(c

onn,sql,5newKeyedHandler<Integer>(1));6System.out.println("KeyedHandler:"+rs1);7Map<Integer,Map<String,Object>>rs2=queryRunner

.query(conn,sql,8newKeyedHandler<Integer>("title"));9System.out.println("KeyedHandler:"+rs2);10}6.4.2Resul

tSetHandler⑨BeanMapHandler<K,V>:用于获取所有结果集,将每行结果集转换为Javabean作为value,并指定某列为key,封装到HashMap中。相当于对每行数据进行与BeanHandler相同的处理后,再指定列值

为Key封装到HashMap中。1publicstaticvoidqueryToBeanMap(Connectionconn)throwsSQLException{2QueryRunnerqueryRunner=newQueryRunner();3Strings

ql="select*fromauction";4Map<Integer,AuctionDO>rs=queryRunner.query(conn,sql,5newBeanMapHandler<Integer,Auction

DO>(AuctionDO.class,1));6System.out.println("BeanMapHandler:"+rs);7}6.4.2ResultSetHandler⑩ScalarHandler<T>:获取结果集中第一行数据指定列的值,常用来进行

单值查询,示例代码如下。◼(2)更新类操作方法介绍在执行insert、delete、update等更新数据库方法时,将调用QueryRunner的update方法,该方法返回影响的记录条数。1publicstaticvoidqueryToBeanMap(Co

nnectionconn)throwsSQLException{2QueryRunnerqueryRunner=newQueryRunner();3Stringsql="select*fromauction";4intrs=runner.qu

ery(conn,sql,newScalarHandler<Integer>());5System.out.println("ScalarHandler:"+rs);6Stringrs=runner.query(conn,sql,newScalarHandler<String>

(2));7//或者Stringrs=runner.query(conn,sql,newScalarHandler<String>("userName"));8System.out.println("ScalarHandler:"+rs);9}6.4.3资源释放DBUti

ls框架提供了关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:publicstaticvoidclose()throwsSQLExceptionDBUtils类提供了3个重载的关闭方法。这些方法检查所提供的参数是否为NULL,如果不是,它们就关闭Co

nnection、Statement和ResultSet6.5简易购物商城使用DBCP作为数据库连接池连接数据库,与DBUtils框架整合来改写简易购物商城的前台系统,将商品、用户、个人信息持久化存储到MySQL数据库

中。6.5简易购物商城6.5.1数据库设计6.5.2DAO接口实现6.5.1数据库设计根据前面章节的需求分析,简易购物商城前台系统共设计数据库表三张,首先创建数据库shop,然后在数据库shop中设

计auction、user和personalInfo三张数据表,具体表结构如图6.23~图6.25所示。图6.23action商品表图6.24user用户表图6.25personal个人信息表6.5.2DAO接口实现首先在工程中导入相关的jar包,并创建cn.edu.zzti.dao包中各个接

口的具体实现类,放在cn.edu.zzti.dao.impl.mysql包下,如图6.26和图6.27所示。图6.26导入相关jar包图6.27基于DBUtils的DAO实现6.5.2DAO接口实现各个实现类的具体实现代码如下所示。◼(1)A

uctionDAOImpl1publicclassAuctionDAOImplimplementsAuctionDAO{2@Override3publicAuctionDOgetAuction(Stringi

d)throwsSQLException{4QueryRunnerqueryrunner=newQueryRunner(DBUtil.getDataSource());5Stringsql="select*fro

mauctionwhereid=?";6AuctionDOauctionDO=queryrunner.query(sql,7newBeanHandler<AuctionDO>(AuctionDO.class),id);8returnauc

tionDO;9}10@Override11publicvoidaddAuction(AuctionDOauc)throwsSQLException{12QueryRunnerqueryrunner=newQueryRun

ner(DBUtil.getDataSource());13Stringsql="insertintoauctionvalues(?,?,?,?)";14Object[]params=newObject[]{UUID.randomUU

ID().toString(),15auc.getTitle(),auc.getDescription(),auc.getPrice()};16queryrunner.update(sql,params);17}

6.5.2DAO接口实现各个实现类的具体实现代码如下所示。◼(1)AuctionDAOImpl18@Override19publicList<AuctionDO>getAll()throwsSQLException{20QueryRunnerqueryr

unner=newQueryRunner(DBUtil.getDataSource());21Stringsql="select*fromauction";22List<AuctionDO>list=queryrunner.query(sql,23newBeanListHandler

<AuctionDO>(AuctionDO.class));24returnlist;25}26@Override27publicvoiddeleteAuction(Stringid)throwsSQLException{28QueryRunnerqueryrunner=new

QueryRunner(DBUtil.getDataSource());29Stringsql="deletefromauctionwhereid=?";30queryrunner.update(sql,id);31}32@Over

ride33publicvoidupdateAuction(AuctionDOauc)throwsSQLException{34QueryRunnerqueryrunner=newQueryRunner(DBUtil.getDataSource());35Stringsql="updateauct

ionsettitle=?,description=?,price=?whereid=?";36Object[]params=newObject[]{auc.getTitle(),37auc.getDescription(),auc.getPrice(

),auc.getId()};38queryrunner.update(sql,params);39}40}6.5.2DAO接口实现◼(2)PersonalDAOImpl1publicclassPersonalDAOImplimplementsPersona

lDAO{2@Override3publicPersonalInfoDOgetPersonalInfo(Stringusername)throwsSQLException{4QueryRunnerque

ryrunner=newQueryRunner(DBUtil.getDataSource());5Stringsql="select*frompersonalInfowhereusername=?";6Pers

onalInfoDOp=queryrunner.query(sql,7newBeanHandler<PersonalInfoDO>(PersonalInfoDO.class),username);8returnp;9}10@Override11p

ublicvoidsetPersonalInfo(Stringusername,PersonalInfoDOp)throwsSQLException12{13QueryRunnerqueryrunner=newQueryRunner(DBUti

l.getDataSource());14Stringsql="insertintopersonalInfovalues(?,?,?,?,?,?,?,?,?,?)";15Object[]params=newObject[]{16username,17p.getAge(),18p

.getGender(),19p.getAddress(),20p.getTel(),21p.getEmail(),22p.getGraduateSchool(),23p.getHighestEducation(),24p.

getMajor(),25p.getRealName()26};27queryrunner.update(sql,params);28}29}6.5.2DAO接口实现◼(3)UserDAOImpl1publicclassUserDAOImplimplemen

tsUserDAO{2publicList<UserDO>getAll()throwsSQLException{3QueryRunnerqueryrunner=newQueryRunner(DBUtil.getDataSource());4Stringsql="select*from

user";5List<UserDO>list=queryrunner.query(sql,6newBeanListHandler<UserDO>(UserDO.class));7returnlist;8}9publicUserDOfindU

ser(Stringusername,Stringpassword)throwsSQLException{10QueryRunnerqueryrunner=newQueryRunner(DBUtil.getDataSource());11Stringsql="select*fromu

serwhereusername=?andpassword=?";12Object[]params=newObject[]{username,password};13UserDOuserDO=queryrunner.query(sql,1

4newBeanHandler<UserDO>(UserDO.class),params);15returnuserDO;16}17publicintinsertUser(UserDOu)throwsSQLE

xception{18QueryRunnerqueryrunner=newQueryRunner(DBUtil.getDataSource());19Stringsql="insertintouservalues(?,?)";20Object[]params=newObject[]{u.

getUsername(),u.getPassword()};21returnqueryrunner.update(sql,params);22}23publicintdeleteUser(Stringid)throwsSQLException{24QueryRunnerqueryrunner=n

ewQueryRunner(DBUtil.getDataSource());25Stringsql="deletefromuserwhereusername=?";26returnqueryrunner.update(sql,id);27}28}

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?