写一个Struts2的增删改查的项目
就以老师给的这道题目为例:
首先分析一下这道题目需要什么:
这道题目完成查询功能就可以了:
单条件查询就需要一个搜索框,写在view层(jsp页面)
多条件查询就需要多个搜索框了,
写一个类似这样的界面
好的开始写这个页面:
代码如下:
<%@ taglib prefix="s" uri="/struts-tags"%>
<body>
<div align='center'>
<h2>单条件搜索</h2>
<s:form action="Search" method="post">
<s:textfield name="book.Name" label="图书名字"></s:textfield>
<s:submit value="搜索"></s:submit>
</s:form>
</div>
<div align='center'>
<h2>多条件搜索</h2>
<s:form action="MulSearch" method="post">
<s:textfield name="book.ISBN" label="图书编号"></s:textfield>
<s:textfield name="book.Name" label="图书名字"></s:textfield>
<s:textfield name="book.Author" label="图书作者"></s:textfield>
<s:submit value="搜索"></s:submit>
</s:form>
</div>
<a href="BookList">全部书籍</a>
</body>写好这个就可以了,接下来我习惯写Model层
package com.zmy.model;
public class Book {
private String bookISBN;
private String bookName;
private String bookAuthor;
public String getBookISBN() {
return bookISBN;
}
public void setBookISBN(String bookISBN) {
this.bookISBN = bookISBN;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookAuthor() {
return bookAuthor;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
}
把属性都封装了。
接下来写操作SearchDao
实现单条件和多条件查询
package com.zmy.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.zmy.dbpool.*;
import com.zmy.model.Book;
public class SearchDao {
private Connection conn;
private Statement state;
private PreparedStatement pst;
private ResultSet rs;
private ArrayList<Book> books;
public SearchDao(){
if(conn==null)
{
try
{
conn=Dbpool.getConnection();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public ArrayList<Book> getBookByName(String bookName){
books=new ArrayList<Book>();
try {
state=conn.createStatement();
rs=state.executeQuery("select * from book where bookName='"+bookName+"'");
while(rs.next())
{
Book book=new Book();
book.setBookISBN(rs.getString(1));
book.setBookName(rs.getString(2));
book.setBookAuthor(rs.getString(3));
books.add(book);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
rs.close();
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return books;
}
public ArrayList<Book> getBookByMul(String bookISBN,String bookName,String bookAuthor){
books=new ArrayList<Book>();
try {
state=conn.createStatement();
rs=state.executeQuery("select * from book where bookName='"+bookName+"' and bookISBN='"+bookISBN+"' and bookAuthor='"+bookAuthor+"'");
while(rs.next())
{
Book book=new Book();
book.setBookISBN(rs.getString(1));
book.setBookName(rs.getString(2));
book.setBookAuthor(rs.getString(3));
books.add(book);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
rs.close();
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return books;
}
public ArrayList<Book> getBookList(){
books=new ArrayList<Book>();
try {
state=conn.createStatement();
rs=state.executeQuery("select * from book");
while(rs.next())
{
Book book=new Book();
book.setBookISBN(rs.getString(1));
book.setBookName(rs.getString(2));
book.setBookAuthor(rs.getString(3));
books.add(book);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
rs.close();
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return books;
}
}
这些就是三个查询,其他的改变sql语句就可以了。
接下来是重点说的,发现有很多同学在传值这一块有问题,有很多同学思维定式,struts2传值和servlet就不是一回事。
大家可以看我前面写的帖子。我使用域模式传值。
写控制层Action
package com.zmy.action;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.zmy.dao.SearchDao;
import com.zmy.model.Book;
@SuppressWarnings("serial")
public class SearchAction extends ActionSupport {
private List<Book> books;
private SearchDao searchDao;
private Book book;
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
public SearchDao getSearchDao() {
return searchDao;
}
public void setSearchDao(SearchDao searchDao) {
this.searchDao = searchDao;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public SearchAction()
{
searchDao=new SearchDao();
}
public String getAllBook()
{
this.books=searchDao.getBookList();
return SUCCESS;
}
public String getBookByBookName()
{
this.books=searchDao.getBookByName(book.getBookName());
return SUCCESS;
}
public String getBookByMul()
{
books=searchDao.getBookByMul(book.getBookISBN(), book.getBookName(), book.getBookAuthor());
return SUCCESS;
}
}
这就是他的控制层,通过调用searchDao()得出结果。
再写的就是数据库连接程序:
package com.zmy.dbpool;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Dbpool {
public static Connection getConnection(){
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost/db_library?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
Connection conn=null;
try{
Class.forName(driver);
try{
conn=DriverManager.getConnection(url,"root",null);
}catch(SQLException e){
e.printStackTrace();
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}
System.out.println("Successfully connected to the database");
return conn;
}
}
建议大家每次写代码时都写一些提示性语句,这样就容易得出出问题的位置,方便排查。
到了这而之后就写配置文件:
struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default">
<action name="Search" class="com.zmy.action.SearchAction" method="getBookByBookName">
<result name="success">/bookList.jsp</result>
</action>
<action name="MulSearch" class="com.zmy.action.SearchAction" method="getBookByMul">
<result name="success">/bookList.jsp</result>
</action>
<action name="BookList" class="com.zmy.action.SearchAction" method="getAllBook">
<result name="success">/bookList.jsp</result>
</action>
</package>
</struts>
这样就快接近尾声了
最后一步迭代输出
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr bgcolor="#33ccff">
<td>编号</td><td>书名</td><td>作者</td>
</tr>
<s:iterator value="books" status="st">
<tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>
<td align="center">
<s:property value="bookISBN"></s:property>
</td>
<td align="center">
<s:property value="bookName"></s:property>
</td>
<td align="center">
<s:property value="bookAuthor"></s:property>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>这样整个流程就搞定了,当然我写的时候是没这么顺利的,出过一些问题,不过错误在控制台会爆出来的,
把错误改掉就可以了
本文详细介绍了一个基于Struts2框架实现图书信息查询的应用案例,包括单条件与多条件查询功能的设计与实现过程。
545

被折叠的 条评论
为什么被折叠?



