效果图





部分代码

Books.java

package entity;

import java.util.Date;

public class Books {
//书籍编号
private String sid;
//书名
private String sname;
//借书日期
private Date loandate;
//书籍剩余数量
private String total; public Books() { } public Books(String sid, String sname, Date loandate, String total) {
//super();
this.sid = sid;
this.sname = sname;
this.loandate = loandate;
this.total = total;
} public String getSid() {
return sid;
} public void setSid(String sid) {
this.sid = sid;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public Date getLoandate() {
return loandate;
} public void setLoandate(Date loandate) {
this.loandate = loandate;
} public String getTotal() {
return total;
} public void setTotal(String total) {
this.total = total;
} @Override
public String toString() {
return "Books [sid=" + sid + ", sname=" + sname + ", loandate="
+ loandate + ", total=" + total + "]";
} }

Books.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="entity.Books" table="BOOKS">
<!-- 主键 -->
<id name="sid" type="java.lang.String" length="8">
<!-- 主键生成方式:自动生成 -->
<generator class="assigned"></generator>
</id>
<property name="sname" type="java.lang.String"></property>
<property name="loandate" type="date"></property>
<property name="total" type="java.lang.String"></property>
</class>
</hibernate-mapping>

BooksAction.java

package action;

import java.text.SimpleDateFormat;
import java.util.List; import service.BooksDAO;
import service.impl.BooksDAOImpl;
import entity.Books; public class BooksAction extends SuperAction {
private static final long serialVersionUID = 1L; // 查询所有书籍
public String query() {
BooksDAO sdao = new BooksDAOImpl();
List<Books> list = sdao.queryAllBooks();
// 放进session中
if (list != null && list.size() > 0) {
session.setAttribute("books_list", list);// !!!!
}
return "query_success";
} // 删除书籍
public String delete() {
BooksDAO sdao = new BooksDAOImpl();
String sid = request.getParameter("sid");
sdao.deleteBook(sid);// 调用删除方法
return "delete_success";
} // 添加书籍
public String add() throws Exception {
Books s = new Books();
// 获得学生姓名
s.setSname(request.getParameter("sname"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 判断管理员输入的日期是否为空
// 不为空则继续后面的工作,为空则跳转到添加书籍失败界面
if (request.getParameter("loandate") != "") {
s.setLoandate(sdf.parse(request.getParameter("loandate")));
s.setTotal(request.getParameter("total"));
BooksDAO sdao = new BooksDAOImpl();
sdao.addBooks(s);
return "add_success";
} else {
return "add_failure";
} } // 修改书籍
public String modify() {
// 获取学生编号
String sid = request.getParameter("sid");
BooksDAO sdao = new BooksDAOImpl();
Books s = sdao.queryBooksBySid(sid);
// 保存在会话中
session.setAttribute("modify_books", s);// !!!!!
return "modify_success";
} // 保存修改后的书籍资料动作
public String save() throws Exception {
Books s = new Books();
s.setSid(request.getParameter("sid"));
s.setSname(request.getParameter("sname")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 判断管理员输入的日期是否为空
// 不为空则继续后面的工作,为空则跳转到添加书籍失败界面
if (request.getParameter("loandate") != "") {
s.setLoandate(sdf.parse(request.getParameter("loandate")));
s.setTotal(request.getParameter("total"));// !!!
BooksDAO sdao = new BooksDAOImpl();
sdao.updateBook(s);
return "save_success";
} else {
return "modify";
} }
}
BooksDAO.java
```java
package service; import java.util.List; import entity.Books; /**
* @ClassName: BooksDAO.java
* @Description: 书籍业务逻辑接口
* @version: "1.8.0_131"
* @author: 寇爽
* @date: 2017年11月14日 下午8:19:19
*/
public interface BooksDAO {
//查询所有书籍资料
public List<Books> queryAllBooks(); // 根据书籍编号查询书籍资料
public Books queryBooksBySid(String sid); // 添加书籍资料
public boolean addBooks(Books s); // 修改书籍资料
public boolean updateBook(Books s); //删除书籍资料
public boolean deleteBook(String sid); } <div class="se-preview-section-delimiter"></div>

BooksDAOImpl.java

package service.impl;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import db.MyHibernateSessionFactory;
import entity.Books;
import service.BooksDAO; /**
* @ClassName: BooksDAOImpl.java
* @Description: 书籍业务逻辑接口实现类
* @version: "1.8.0_131"
* @author: 寇爽
* @date: 2017年11月14日 下午8:34:05
*/
public class BooksDAOImpl implements BooksDAO {
/**
* 查询所有书籍资料
*/
@SuppressWarnings("unchecked")
@Override
public List<Books> queryAllBooks() {
Transaction tx = null;
List<Books> list = null;
String hql = "";
try {
Session session = MyHibernateSessionFactory.getSessionFactory()
.getCurrentSession();
tx = session.beginTransaction();
hql = "from Books";
Query query = session.createQuery(hql);
list = query.list();
tx.commit();
return list;
} catch (Exception ex) {
ex.printStackTrace();
tx.commit();
return list;
} finally {
if (tx != null) {
tx = null;
}
}
} /**
* 根据书籍编号查询书籍资料
*/
@Override
public Books queryBooksBySid(String sid) {
Transaction tx = null;
Books s = null;
try {
Session session = MyHibernateSessionFactory.getSessionFactory()
.getCurrentSession();
tx = session.beginTransaction();
s = (Books) session.get(Books.class, sid);
tx.commit();
return s;
} catch (Exception ex) {
ex.printStackTrace();
tx.commit();
return s;
} finally {
if (tx != null) {
tx = null;
}
}
} /**
* 添加书籍资料
*/
@Override
public boolean addBooks(Books s) {
// 设置学生学号为getNewSid()生成的学号
s.setSid(getNewSid());
Transaction tx = null;
try {
Session session = MyHibernateSessionFactory.getSessionFactory()
.getCurrentSession();
tx = session.beginTransaction();
session.save(s);
tx.commit();
return true;
} catch (Exception ex) {
ex.printStackTrace();
tx.commit();
return false;
} finally {
if (tx != null) {
tx = null;
}
}
} /**
* 修改书籍资料
*/
@Override
public boolean updateBook(Books s) {
// TODO Auto-generated method stub
Transaction tx = null;
try {
Session session = MyHibernateSessionFactory.getSessionFactory()
.getCurrentSession();
tx = session.beginTransaction();
session.update(s);
tx.commit(); return true;
} catch (Exception ex) {
ex.printStackTrace();
tx.commit();
return false;
} finally {
if (tx != null) {
tx = null;
}
}
} /**
* 删除书籍资料
*/
@Override
public boolean deleteBook(String sid) {
// TODO Auto-generated method stub
Transaction tx = null;
String hql = "";
try {
Session session = MyHibernateSessionFactory.getSessionFactory()
.getCurrentSession();
tx = session.beginTransaction();
Books s = (Books) session.get(Books.class, sid);
session.delete(s);
tx.commit();
return true;
} catch (Exception ex) {
ex.printStackTrace();
tx.commit();
return false;
} finally {
if (tx != null) {
tx = null;
}
}
} /**
* 生成书籍编号的方法
*
* @return 书籍号
*/
private String getNewSid() {
Transaction tx = null;
String hql = "";
String sid = null;
try {
Session session = MyHibernateSessionFactory.getSessionFactory()
.getCurrentSession();
tx = session.beginTransaction();
// 获得当前学生的最大编号
hql = "select max(sid) from Books";
Query query = session.createQuery(hql);
sid = (String) query.uniqueResult();
if (sid == null || "".equals(sid)) {
// 给一个默认的最大编号
sid = "B0000001";
} else {
// 取后7位
String temp = sid.substring(1);
// 转成数字
int i = Integer.parseInt(temp);
i++;
// 还原成字符串
temp = String.valueOf(i);
int len = temp.length();
// 凑够7位
for (int j = 0; j < 7 - len; j++) {
temp = "0" + temp;
}
sid = "B" + temp;
}
tx.commit();
return sid;
} catch (Exception ex) {
ex.printStackTrace();
tx.commit();
return null;
} finally {
if (tx != null) {
tx = null;
}
}
} } <div class="se-preview-section-delimiter"></div>

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> <package name="default" namespace="/" extends="struts-default"> </package>
<package name="users" namespace="/users" extends="default">
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="login_success">/users/Users_login_success.jsp</result>
<result name="login_failure">/users/Users_login.jsp</result>
<result name="logout_success">/users/Users_login.jsp</result>
<result name="input">/users/Users_login.jsp</result>
</action>
</package>
<package name="students" namespace="/students" extends="default">
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="query_success">/students/Students_query_success.jsp</result>
<result name="modify_success">/students/Students_modify.jsp</result>
<result name="modify">/students/Students_modify.jsp</result>
<result name="add_success">/students/Students_add_success.jsp</result>
<result name="add_failure">/students/Students_add_failure.jsp</result>
<result name="save_success">/students/Students_modify_success.jsp</result>
<result name="delete_success" type="chain">Students_query</result>
</action>
</package>
<package name="books" namespace="/books" extends="default">
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="query_success">/books/Books_query_success.jsp</result>
<result name="modify_success">/books/Books_modify.jsp</result>
<result name="modify">/books/Books_modify.jsp</result>
<result name="add_success">/books/Books_add_success.jsp</result>
<result name="add_failure">/books/Books_add_failure.jsp</result>
<result name="save_success">/books/Books_modify_success.jsp</result>
<result name="delete_success" type="chain">Books_query</result> </action>
</package>
</struts>

项目源码:

https://github.com/Snailclimb/JavaWebProject/tree/master/immoc_sh (推荐star不要fork,还在继续改动中),后续还会上传SSH,SSM的项目。

Struts2+Hibernate实现图书管理系统的更多相关文章

  1. struts2+hibernate 项目实战:图书管理系统

    经典项目,练手必备. 图书管理系统 需求分析(大致,并不专业):1.需要有用户管理: 1.1 用户注册: 1.2 用户登录: 1.3 用户信息修改: 1.4 用户修改密码: 2.需要有书本管理: 2. ...

  2. JAVA图书管理系统汇总共27个

    好多人都在搜索图书管理系统,感觉这个挺受欢迎的,所以整理了一系列的图书管理系统,让大家选择.java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/683 ...

  3. JAVA图书管理系统汇总共27个[转]

    java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/68350java+sql server图书管理系统 http://down.51cto.com/ ...

  4. Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)

    1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...

  5. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  6. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  7. struts2+hibernate整合-实现登录功能

    最近一直学习struts2+hibernate框架,于是想把两个框架整合到一起,做一个小的登录项目.其他不多说,直接看例子. 1).Struts2 和hibernate的环境配置 包括jar包.web ...

  8. JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册

    写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...

  9. 基于TXT文本的简单图书管理系统

    1 ////////////////////////////////////////////////////////////////////////////////////// //SqList.h ...

随机推荐

  1. Delphi 模式窗体返回值ModalResult的使用方法及注意事项

    1.基础知识简介: ModalResult是指一个模式窗体(form.showmodal)的返回值,一般用于相应窗体上按钮的ModalResult属性: 显示完窗体(关闭)后,会返回此属性预设的值做为 ...

  2. Hessian矩阵【转】

    http://blog.sina.com.cn/s/blog_7e1ecaf30100wgfw.html 在数学中,海塞矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵,一元函数就是二阶导, ...

  3. bzoj3998-弦论

    给定一个长度为\(n(n\le 5\times 10^5)\)的字符串,求它的第\(k\)小字串.有两种模式: \(Type=0\),不同位置的相同字串只算一个 \(Type=1\),不同位置相同字串 ...

  4. linux虚拟机磁盘扩展与分区大小调整

    有段时间觉得linux虚拟机上的磁盘不太够用,研究了下其磁盘扩展 1.linux虚拟机磁盘扩展 step1. 先关机在编辑虚拟机中,找到硬盘选项增加空间,进行扩展step2. 进入root fdisk ...

  5. 51nod 1385凑数字(字符串+构造)

    题目大意: 给定一个n,要求找出一个最短的字符串S,使得所有1到n的整数都是S的子序列. 比如n=10,那么S=”1234056789”的时候,是满足条件的.这个时候S的长度是10. 现在给出一个n, ...

  6. POJ 3261 Milk Patterns (后缀数组,求可重叠的k次最长重复子串)

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 16742   Accepted: 7390 Ca ...

  7. [LOJ2983] [WC2019] 数树

    题目链接 LOJ:https://loj.ac/problem/2983 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5475 洛谷:https ...

  8. Codeforces Round #466 (Div. 2) E. Cashback

    Codeforces Round #466 (Div. 2) E. Cashback(dp + 贪心) 题意: 给一个长度为\(n\)的序列\(a_i\),给出一个整数\(c\) 定义序列中一段长度为 ...

  9. C++中数组和vector

    本文基于邓俊辉编著<数据结构(C++语言版)(第3版)>.<C++ Primer(第5版)>以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出. 一.数组 C++中数组 ...

  10. bzoj4822: [Cqoi2017]老C的任务(扫描线+BIT/线段树)

    裸题... 依旧是写了BIT和线段树两种(才不是写完线段树后才想起来可以写BIT呢 怎么卡常数都挺大...QAQ ccz和yy的写法好快哇%%% BIT: #include<iostream&g ...