目录
我们以图书管理系统为例子,利用DBUtils进行完整的连接数据库开发。
一、准备工作
假设现在有个图书管理系统,可以在上面任意添加图书,包括图书的名字,价格等信息,也可以显示、修改与删除图书的信息,并将这些都在网页上显示出来。
主要涉及到四个功能:
- 书籍的显示功能
- 书籍的添加功能
- 书籍的修改功能
- 书籍的删除功能
首先我们把做好的界面文件(提取码:u11q)导入进来,放至WEB文件夹下,
然后在WEB-INF目录下的lib路径放置我们需要的jar包(提取码:fu23),将之前写过的C3P0Util.java文件放在Util包下,同时写好配置文件c3p0-config.xml(可参考博客地址),
我们还要建立好相关的数据库与数据表,并且修改好配置文件c3p0-config.xml。
二、书籍显示功能
现在我们需要完成点击商品管理中的商品查看可以看到数据库中的书籍的信息,示意图如下:
首先我们实现数据访问层的代码,从数据库拿取所有的书籍(在这之前要实现实体类Book,并且根据数据表中的列名新建Book的属性,完成get和set方法)
package Dao;
import Util.Book;
import Util.C3P0Util;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class BookDaoImpl {
/**
* 查找所有的图书
* @return
* @throws SQLException
*/
public List<Book> findAllBooks() throws SQLException {
QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource());
List<Book> bookList = queryRunner.query("select * from book", new BeanListHandler<Book>(Book.class));
return bookList;
}
}
然后是业务逻辑层,完成主要的业务逻辑,因为这里仅仅是获取数据显示出来,所有直接调用findAllBooks方法即可,
package Service;
import Dao.BookDaoImpl;
import Util.Book;
import java.sql.SQLException;
import java.util.List;
public class BookServiceImpl {
BookDaoImpl bookDao=new BookDaoImpl();
public List<Book> findAllBooks(){
try {
return bookDao.findAllBooks();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
然后是通过servlet来获取数据并且通过request对象将数据分发转向到显示界面list.jsp,
package Web;
import Service.BookServiceImpl;
import Util.Book;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "BookListServlet")
public class BookListServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用业务逻辑
BookServiceImpl bookService=new BookServiceImpl();
List<Book> bookList = bookService.findAllBooks();//获取所有书籍
//跳转页面
if (bookList!=null){
request.setAttribute("books",bookList);//把所有书籍放入到request对象中
request.getRequestDispatcher("/admin/products/list.jsp").forward(request,response);//跳转到list.jsp中
}
}
}
配置好web.xml的servlet路径:
<welcome-file-list><welcome-file>admin/login/home.jsp</welcome-file></welcome-file-list>
<servlet>
<servlet-name>bookListServlet</servlet-name>
<servlet-class>Web.BookListServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>addBookServlet</servlet-name>
<servlet-class>Web.AddBookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bookListServlet</servlet-name>
<url-pattern>/servlet/bookListServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>addBookServlet</servlet-name>
<url-pattern>/servlet/addBookServlet</url-pattern>
</servlet-mapping>
最后修改admin/login/left.jsp中点击商品查看时跳转的路径名称即可,这里的路径要和web.xml中的servlet配置路径相同,
然后就可以运行得到本节开始的效果图了。
三、书籍添加功能
书籍列表里面可以点击添加,点击添加之后会弹出添加商品的具体信息,
这里我们先实现数据访问层的添加书籍方法,在数据库根据书本信息中插入数据,
/**
* 添加书籍信息
* @param book
* @throws SQLException
*/
public void addBook(Book book) throws SQLException {
QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource());
queryRunner.update("insert into book values(?,?,?,?,?,?)",book.getId(),book.getName(),book.getPrice(),book.getPnum(),book.getCategory(),book.getDescription());
}
然后是业务逻辑层,直接调用方法:
//添加图书
public void addBook(Book book){
try {
bookDao.addBook(book);
} catch (SQLException e) {
e.printStackTrace();
}
}
然后我们通过servlet将添加页面中的信息封装到Book对象中,并且调用业务层方法将书本添加到数据库中,然后跳转显示的servlet,
package Web;
import Service.BookServiceImpl;
import Util.Book;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.UUID;
@WebServlet(name = "AddBookServlet")
public class AddBookServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");//设置编码格式
//获取数据
Book book=new Book();
try {
BeanUtils.populate(book,request.getParameterMap());//从request对象中获取到书籍信息,并封装到book对象中
book.setId(UUID.randomUUID().toString());//给书籍设置随机ID
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//调用业务逻辑
BookServiceImpl bookService=new BookServiceImpl();
bookService.addBook(book);
request.getRequestDispatcher("/servlet/bookListServlet").forward(request,response);//转发到显示的servlet
}
}
然后在web.xml中配置一下添加书籍servlet的映射地址,
<servlet>
<servlet-name>addBookServlet</servlet-name>
&