Spring_Struts2_Hibernate_Maven框架使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao3587717/article/details/80581808

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}&reg=update">修改</a>
                    <button id="del${bookAuthor.bookid}" value="${bookAuthor.bookid}" onclick="deleteBook(${bookAuthor.bookid},this)">删除</button>
                </td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

代码已经上传,需要参考的可以点击下面的连接下载:源码下载地址

猜你喜欢

转载自blog.csdn.net/zhao3587717/article/details/80581808
今日推荐