Spring_Struts2_Hibernate_Maven框架使用
框架的搭建已经在Spring_Struts2_Hibernate_Maven框架搭建中详细的介绍过了,这里就直接开始介绍框架的具体使用方法。特别声明,文章主要用于个人学习记录,如有不当,请多多指教。
一、创建数据库
我这里使用的数据库是Mysql,数据库如下:
book表
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`price` int(255) DEFAULT NULL,
`authorid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
author表
CREATE TABLE `author` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
二、逆向工程创建实体类
逆向工程创建实体类,请参考Spring_Struts2_Hibernate_Maven框架从数据库逆向生成Hibernate实体类,效果如图所示
三、实战
3.1 编写工具类BaseDao.java
BaseDao工具类,用于获取session,如果当前没有创建一个新的,如果已经有了就不用创建了。
public class BaseDao {
protected Session session;
//使用@Autowired注入SessionFactory
@Autowired
private SessionFactory SessionFactory;
//获取session,当前已经有就直接用,没有就创建
public void OpenConncetion() throws Exception {
session = SessionFactory.getCurrentSession();
}
}
3.2 创建BookAction.java
public class BookAction {
// 注入BookBiz
@Autowired
private BookBiz bookbiz;
// 注入AuthorBiz
@Autowired
private AuthorBiz authorbiz;
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
// 查看所有图书
public String getAllBook() {
String result = "";
List<Book> books = null;
List<BookAuthor> bookAuthors = new ArrayList<BookAuthor>();
try {
books = bookbiz.getAllBook();
for (Book book : books) {
BookAuthor bookAuthor = new BookAuthor();
bookAuthor.setBookid(book.getId());
bookAuthor.setBookname(book.getName());
bookAuthor.setBookprice(book.getPrice());
Author author = new Author();
author = authorbiz.getAuthorById(book.getAuthorid());
bookAuthor.setAuthorid(author.getId());
bookAuthor.setAuthorname(author.getName());
bookAuthors.add(bookAuthor);
}
request.setAttribute("bookAuthors", bookAuthors);
result = "getallbookok";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
result = "error";
}
return result;
}
// 添加一本书籍
public String AddBook() {
String reg = request.getParameter("reg");
String bookid = request.getParameter("id");
if (reg == null) {
reg = "";
}
String bookname = request.getParameter("bookname");
if (bookname == null) {
bookname = "";
}
String authorid = request.getParameter("authorid");
if (authorid == null) {
authorid = "";
}
String price = request.getParameter("price");
if (price == null) {
price = "";
}
int pri = 0;
if (!price.equalsIgnoreCase("")) {
pri = Integer.valueOf(price);
}
List<Author> authors = null;
try {
authors = authorbiz.getAllUser();
request.setAttribute("authors", authors);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (reg == "") {
return "addBook";
} else if (reg.equals("update")) {
Book book = new Book();
book.setId(Integer.parseInt(bookid));
try {
book = bookbiz.getBook(book);
request.setAttribute("book", book);
return "updateBookok";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("msg", "书籍修改失败!");
return "updateBookerror";
}
} else {
Book book = new Book();
book.setName(bookname);
book.setPrice(pri);
book.setAuthorid(Integer.parseInt(authorid));
if (!bookid.equals("")) {
book.setId(Integer.parseInt(bookid));
}
try {
bookbiz.AddBook(book);
request.setAttribute("msg", "书籍添加成功!");
return "addBookok";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("msg", "书籍添加失败!");
return "addBookerror";
}
}
}
// 删除书籍
public String DelOneBook() {
String id = request.getParameter("id");
if (id == null) {
id = "";
}
if (id == "") {
return "idempty";
} else {
Book book = new Book();
book.setId(Integer.valueOf(id));
try {
bookbiz.DelOneBook(book);
return "deletok";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "deleteerror";
}
}
}
/**
* 模仿事物
* 删除书籍同时删除作者,如果成功删除书籍的同时删除书籍作者,其中任何过程
* 失败,执行回滚。
*/
public String DelBookAndAuthor() {
String id = request.getParameter("id");
if (id == null) {
id = "";
}
if (id == "") {
return "idempty";
} else {
Book book = new Book();
book.setId(Integer.valueOf(id));
try {
bookbiz.DelBookAndAuthor(book);
return "deletok";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "deleteerror";
}
}
}
}
3.3 创建AuthorBiz.java和AuthorBiz.java
AuthorBiz.java
@Service("authorBiz") //@Service标记本类为service层
@Transactional
public class AuthorBiz {
@Autowired
private IAuthorDao authordao;
public List<Author> getAllUser() throws Exception {
List<Author> users = null;
users = authordao.getAllUser();
return users;
}
public Author getAuthorById(Integer authorid) throws Exception {
return authordao.getAuthorById(authorid);
}
}
BookBiz.java
@Service("bookBiz")
@Transactional
public class BookBiz {
@Autowired
private IBookDao bookdao;
@Autowired
private IAuthorDao authordao;
public List<Book> getAllBook() throws Exception {
List<Book> books = null;
books = bookdao.getAllBook();
return books;
}
public Book getBook(Book book) throws Exception {
return bookdao.getBook(book);
}
public boolean AddBook(Book book) throws Exception {
try {
bookdao.AddBook(book);
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}
public boolean DelOneBook(Book book) throws Exception {
try {
bookdao.DelOneBook(book);
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}
public boolean AddMoreBook(List<Book> books) throws Exception {
try {
bookdao.AddMoreBook(books);
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}
/**
* 模仿事物
* 删除书籍同时删除作者,如果成功删除书籍的同时删除书籍作者,其中任何过程失败,执行回滚。
*/
@Transactional(rollbackFor=Throwable.class)
public boolean DelBookAndAuthor(Book book) throws Exception {
Book book1 = new Book();
book1 = bookdao.getBook(book);
Author author = new Author();
author.setId(book1.getAuthorid());
authordao.DelAuthor(author);
bookdao.DelOneBook(book);
return true;
}
}
3.4 创建AuthorDaoImpl.java和BookDaoImpl.java
AuthorDaoImpl.java
@Repository("authorDao")
public class AuthorDaoImpl extends BaseDao implements IAuthorDao{
public List<Author> getAllUser() throws Exception{
this.OpenConncetion();
List<Author> users = null;
String hql = "FROM Author";
Query query = session.createQuery(hql);
return query.list();
}
public Author getAuthorById(Integer authorid) throws Exception{
this.OpenConncetion();
String hql = "FROM Author WHERE id =:id";
Query query = session.createQuery(hql);
query.setParameter("id", authorid);
return (Author)query.list().get(0);
}
public boolean DelAuthor(Author author) throws Exception{
this.OpenConncetion();
try {
String hql = "delete from Author where id =:id";
Query query = session.createQuery(hql);
query.setParameter("id", author.getId());
query.executeUpdate();
session.flush();
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}
}
BookDaoImpl.java
@Repository("bookDao")
public class BookDaoImpl extends BaseDao implements IBookDao {
public List<Book> getAllBook() throws Exception {
this.OpenConncetion();
List<Book> books = null;
String hql = "FROM Book";
Query query = session.createQuery(hql);
return query.list();
}
public Book getBook(Book book) throws Exception {
this.OpenConncetion();
return session.get(Book.class, book.getId());
}
public boolean AddBook(Book book) throws Exception {
this.OpenConncetion();
try {
session.saveOrUpdate(book);
session.flush();
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}
public boolean DelOneBook(Book book) throws Exception {
this.OpenConncetion();
String hql = "delete from Book where id =:id";
Query query = session.createQuery(hql);
query.setParameter("id", book.getId());
query.executeUpdate();
//手动抛出异常,实现事物回滚
throw new Exception("书籍删除 失败!!!!");
// return true;
}
public boolean AddMoreBook(List<Book> books) throws Exception {
this.OpenConncetion();
try {
for (Book book : books) {
session.save(book);
}
session.flush();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
3.5编写book.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="<%=basePath%>/js/jquery.js"></script>
<title>测试页面</title>
</head>
<script type="text/javascript">
function gohome(){
window.location.href = "<%=basePath%>list/listAction_getList.action";
}
function updateBook(varid){
$.ajax({
url:'<%=basePath%>book/bookAction_AddBook.action',
type:'post',
async:true,
data:{
'id':varid,
'reg':'update'
},
});
}
<%-- function deleteBook(varid,index){
$.ajax({
url:'<%=basePath%>book/bookAction_DelOneBook.action',
type:'post',
async:true,
data:{
'id':varid
},
success:function(data){
$(index).parents("tr").remove();
alert('删除成功');
},
error:function(data){
alert('删除失败');
}
});
} --%>
//模仿事物,删除书籍同时删除作者
function deleteBook(varid,index){
$.ajax({
url:'<%=basePath%>book/bookAction_DelBookAndAuthor.action',
type:'post',
async:true,
data:{
'id':varid
},
success:function(data){
$(index).parents("tr").remove();
alert('删除成功');
},
error:function(data){
alert('删除失败');
}
});
}
</script>
<body>
<button id="gohome" onclick="gohome()">返回主页</button>
<table align="center" width="500px" border="1px">
<thead align="center">
<td>编号</td>
<td>书名</td>
<td>作者</td>
<td>价格</td>
<td>操作</td>
</thead>
<c:forEach var="bookAuthor" items="${bookAuthors}">
<tr align="center">
<td>${bookAuthor.bookid}</td>
<td>${bookAuthor.bookname}</td>
<td>${bookAuthor.authorname}</td>
<td>${bookAuthor.bookprice}</td>
<td>
<a id="xiu${bookAuthor.bookid}" value="${bookAuthor.bookid}"
href="<%=basePath%>book/bookAction_AddBook.action?id=${bookAuthor.bookid}®=update">修改</a>
<button id="del${bookAuthor.bookid}" value="${bookAuthor.bookid}" onclick="deleteBook(${bookAuthor.bookid},this)">删除</button>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
代码已经上传,需要参考的可以点击下面的连接下载:源码下载地址