Struts2+Hibernate实现图书管理系统
效果图

部分代码
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实现图书管理系统的更多相关文章
- struts2+hibernate 项目实战:图书管理系统
经典项目,练手必备. 图书管理系统 需求分析(大致,并不专业):1.需要有用户管理: 1.1 用户注册: 1.2 用户登录: 1.3 用户信息修改: 1.4 用户修改密码: 2.需要有书本管理: 2. ...
- JAVA图书管理系统汇总共27个
好多人都在搜索图书管理系统,感觉这个挺受欢迎的,所以整理了一系列的图书管理系统,让大家选择.java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/683 ...
- JAVA图书管理系统汇总共27个[转]
java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/68350java+sql server图书管理系统 http://down.51cto.com/ ...
- Django学习——图书管理系统图书修改、orm常用和非常用字段(了解)、 orm字段参数(了解)、字段关系(了解)、手动创建第三张表、Meta元信息、原生SQL、Django与ajax(入门)
1 图书管理系统图书修改 1.1 views 修改图书获取id的两种方案 1 <input type="hidden" name="id" value=& ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- struts2+hibernate整合-实现登录功能
最近一直学习struts2+hibernate框架,于是想把两个框架整合到一起,做一个小的登录项目.其他不多说,直接看例子. 1).Struts2 和hibernate的环境配置 包括jar包.web ...
- JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册
写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...
- 基于TXT文本的简单图书管理系统
1 ////////////////////////////////////////////////////////////////////////////////////// //SqList.h ...
随机推荐
- 【bzoj4921】[Lydsy六月月赛]互质序列 暴力
题目描述 给出一个序列,要求删除一段非空区间,使得剩下的数的个数大于等于2.求所有删除方式剩下的数的最大公约数的和. 输入 第一行包含一个正整数n(3<=n<=100000),表示序列的长 ...
- 【bzoj1593】[Usaco2008 Feb]Hotel 旅馆 线段树区间合并
题目描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...
- C# 面向对象——多态
多态分三种:1.虚方法 2.抽象类 3.接口 1.虚方法1.将父类的方法标记为虚方法 ,使用关键字 virtual,这个函数可以被子类重新写一个遍. 如: class Program { static ...
- UOJ117:欧拉回路——题解
http://uoj.ac/problem/117 (作为一道欧拉回路的板子题,他成功的令我学会了欧拉回路) (然而我不会背……) 就两件事: 1.无向图为欧拉图,当且仅当为连通图且所有顶点的度为偶数 ...
- hdu6184 Counting Stars 【三元环计数】
题目链接 hdu6184 题解 题意是让我们找出所有的这样的图形: 我们只需要求出每条边分别在多少个三元环中,记为\(x\),再然后以该点为中心的图形数就是\({x \choose 2}\) 所以我们 ...
- 51nod 1962 区间计数(单调栈+二分)
维护两个单调递减的栈,当i加进栈,位置x的数弹出的时候,在另一个栈中找到和这个数一样大的数,计算贡献(x-靠右左端点)*(i-x). #include<iostream> #include ...
- mysql定时器,定时查询数据库,把查询结果插入到一张表中
1.有两张表order_repayment_detail,msg_sim ,需要把前者中的按时间过滤出来的信息插入到短信发送表中,可以每晚12点钟查询执行一次查询. 创建存储过程,这里的存储过程主要提 ...
- 中国MOOC_面向对象程序设计——Java语言_第2周 对象交互_秒计时的数字时钟
第2周编程题 查看帮助 返回 第2周编程题,在课程所给的时钟程序的基础上修改 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系 ...
- noip模拟赛 helloworld
分析:对于第一个点,答案为26^n - 25^n,这个很好想.另外30%的点因为n <= 5,所以可以直接暴力搜索. 数学方法不是很好处理,考虑dp,设f[i][j]为前i位匹配到危险串第j位的 ...
- UVA315:Network(求割点)
Network 题目链接:https://vjudge.net/problem/UVA-315 Description: A Telephone Line Company (TLC) is estab ...