项目一 图书管理项目(2)

1 前期准备工作

  1. pojo

pojo包中添加book类,关联数据库信息

@Data
@AllArgsConstructor
@NoArgsConstructor
//加入有参构造和无参构造
public class Books {
    private int bookID;
    private int bookName;
    private int bookCount;
    private String detail;
}
  1. dao层(BookMapper.java
    关联数据库信息,写入增删改查插方法
public interface BookMapper {
//    增加书籍
    int addBook(Books books);
//    删除书籍
    int deleteBook(@Param("bookId") int id);
//    更新书籍
    int updateBook(Books books);
//    查询书籍
    Books queryBookById(@Param("bookId")int id);
//    查询全部书籍
    List<Books> queryAllBooks();
}
  1. service层注入dao(BookServiceImpl.java
@Service
public class BookServiceImpl implements BookService{

    //service注入dao层
    @Autowired
    private BookMapper bookMapper;

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int addBook(Books books) {
        return bookMapper.addBook(books);
    }

    @Override
    public int deleteBook(int id) {
        return bookMapper.deleteBook(id);
    }

    @Override
    public int updateBook(Books books) {
        return bookMapper.updateBook(books);
    }

    @Override
    public Books queryBookById(int id) {
        return bookMapper.queryBookById(id);
    }

    @Override
    public List<Books> queryAllBooks() {
        return bookMapper.queryAllBooks();
    }
}
  1. controller层注入service

2 查询书籍

controller层

在BookController.java(controller层)

@Controller
@RequestMapping("/book")
public class BookController {

    //controller层调用service层
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

    //查询全部书籍,返回到书籍展示页面
    @RequestMapping("/allBook")
    public String list(Model model){
        List<Books> list = bookService.queryAllBooks();
        model.addAttribute("list",list);
        return "allBook";
    }

}

通过book / allBook跳转到展示所有书籍页面
queryAllBooks()方法就是查询全部书籍

java后端代码就完成了,如何在前端将页面展示出来呢?

2.1 index.jsp

这是打开网页后的第一个页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
    <style>
      a{
        text-decoration:none;
        color: #000000;
        font-size: 18px;
      }
      h3{
        width: 180px;
        height: 38px;
        margin: 100px auto;
        text-align: center;
        line-height: 38px;
        background: #00bfff;
        /*border-radius加一个圆角边框*/
        border-radius: 5px;
      }
    </style>
  </head>
  <body>
    <h3>
      <a href="${pageContext.request.contextPath}/book/allBook">进入书籍页面</a>
    </h3>
  </body>
</html>

a href="${pageContext.request.contextPath}/book/allBook"
这句代码通过book下的allBook页面,实现跳转

2.2 allBook.jsp

<html>
<head>
    <title>书籍展示页面</title>
<%--    BookStrap 美化界面--%>
    <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

</head>
<body>
<%--container  栅格系统,把页面分为几个部分--%>
<div class="container">

    <div class="row clearfix">
<%--col-md-12 把屏幕分成12份        --%>
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>书籍列表 -----  显示所有书籍</small>
                </h1>
            </div>
        </div>
    </div>

******************************************************
添加书籍先不用管
<%--    增加书籍--%>
    <div class="row">
        <div class="col-md-4 column">
            <a  class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAllBook"></a>
        </div>
    </div>

******************************************************

    <div class="row clearfix">
        <div class="col-md-12 column">
            <table class="table table-hover table-striped">
                <thead>
                <tr>
                    <th>书籍编号</th>
                    <th>书籍名称</th>
                    <th>书籍数量</th>
                    <th>书籍详情</th>
                </tr>
                </thead>
                
<%--书籍从数据库中查出来的,从list中遍历
List<Books> list = bookService.queryAllBooks();
model.addAttribute("list",list);
--%>
<%--从item中遍历,遍历出的值写在book中--%>
                <tbody>
                    <c:forEach var="book" items="${list}">
                        <tr>
                            <td>${book.bookID}</td>
                            <td>${book.bookName}</td>
                            <td>${book.bookCounts}</td>
                            <td>${book.detail}</td>
                        </tr>
                    </c:forEach>
                </tbody>
            </table>
        </div>
    </div>

</div>
<h1>展示</h1>
</body>
</html>

3 添加书籍

和1 一样 就是把展示变成了添加,加了一部分操作而已
controller层

@Controller
@RequestMapping("/book")
public class BookController {

    //controller层调用service层
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

//    跳转到增加书籍页面
    @RequestMapping("/toAllBook")
    public String toAddPaper(){
        return "addBook";
    }

//    添加书籍的请求
@RequestMapping("/addBook")
    public String addBook(Books books){
        bookService.addBook(books);
//        添加完之后,需要重定向,才能跳转回主页面
        return "redirect:/book/allBook";
    }
}

3.1 addBook.jsp

<body>

<div class="container">

    <div class="row clearfix">
        <%--col-md-12 把屏幕分成12份        --%>
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>书籍列表 -----  新增书籍</small>
                </h1>
            </div>
        </div>
    </div>

<%--点击提交,通过action命令,跳转到bookcontroller的book/addBook方法,required参数代表整个表单必须填完才能提交--%>

    <form action="${pageContext.request.contextPath}/book/addBook" method="post">
        <div class="from-group">
            <label>书籍名称</label>
            <input type="text" class="from-control" name="bookName" required>
        </div>
        <div class="from-group">
            <label>书籍数量</label>
            <input type="text" class="from-control" name="bookCount" required>
        </div>
        <div class="from-group">
            <label >书籍描述</label>
            <input type="text" class="from-control" name="detail" required>
        </div>
        <div class="from-group">
            <input type="submit" class="from-control" value="提交" required>
        </div>
    </form>
</div>
</body>

4 修改、删除书籍

4.1 配置事务

修改书籍,修改后跳转回主页面,会出现底层修改完成,页面没有显示的情况,这里就涉及到事务

在spring-service.xml中,配置事务

<!--    aop事务支持-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="txPointCut" expression="execution(* com.wwh.dao.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"></aop:advisor>
</aop:config>

4.2 controller层

@Controller
@RequestMapping("/book")
public class BookController {

//    跳转到修改页面
    @RequestMapping("/toUpdateBook/{bookId}")
    public String toupDateBook(@PathVariable("bookId") int id,Model model){
        Books books = bookService.queryBookById(id);
        Model model1 = model.addAttribute("Qbooks",books);
        return "updateBook";
    }
    
//    修改书籍
    @RequestMapping("updateBook")
    public String updateBook(Books books){
        bookService.updateBook(books);
        return "redirect:/book/allBook";
    }
    
    //    删除书籍
    @RequestMapping("/deleteBook/{bookId}")
    public String deleteBook(@PathVariable("bookId") int id){
        bookService.deleteBook(id);
        return "redirect:/book/allBook";
    }
}

这里需要在主页面中添加修改和删除按钮

<tbody>
     <c:forEach var="book" items="${list}">
         <tr>
             <td>${book.bookID}</td>
             <td>${book.bookName}</td>
             <td>${book.bookCounts}</td>
             <td>${book.detail}</td>
             <td>
<%-- 命令意思为  点击修改,跳转到  book/toUpdateBook(到了controller中),跳转到updateBook页面--%>
                 <a href="${pageContext.request.contextPath}/book/toUpdateBook/${book.bookID}">修改</a>
                 &nbsp; | &nbsp;
                 <a href="${pageContext.request.contextPath}/book/deleteBook">删除</a>
             </td>
          </tr>
    </c:forEach>
</tbody>

这里写updateBook.jsp

<body>
<div class="container">

    <div class="row clearfix">
        <%--col-md-12 把屏幕分成12份        --%>
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>修改书籍</small>
                </h1>
            </div>
        </div>
    </div>


    <%--点击提交,通过action命令,跳转到bookcontroller的book/addBook方法,required参数代表整个表单必须填完才能提交--%>
    <form action="${pageContext.request.contextPath}/book/updateBook" method="post">
<%--        我们提交了修改的sql请求,初次考虑事务,配置完毕后还是失败--%>
<%--        sql语句中,需要我们传入bookId,但是并没有传,但是sql自动穿id,这时候需要隐藏域--%>
        <input type="hidden" name="bookId" value="${Qbooks.bookId}">

        <div class="from-group">
            <label>书籍名称</label>
            <input type="text" class="from-control" name="bookName" value="${Qbooks.bookName}" required>
        </div>
        <div class="from-group">
            <label>书籍数量</label>
            <input type="text" class="from-control" name="bookCount" value="${Qbooks.bookCounts}" required>
        </div>
        <div class="from-group">
            <label >书籍描述</label>
            <input type="text" class="from-control" name="detail" value="${Qbooks.detail}" required>
        </div>
        <div class="from-group">
            <input type="submit" class="from-control" value="提交" required>
        </div>
    </form>
</div>
</body>

5 查询书籍

5.1 dao层 ==> controller层

  1. dao层:添加搜索书籍的方法,BookMapper.java中添加
//    搜索书籍
Books queryBookByName(@Param("bookId") String bookName);

同时在BookMapper.xml中添加sql语句

<select id="queryBookByName" resultType="Books">
     select * from ssmbuild.books where bookName=#{bookId}
</select>
  1. service层,注入dao
@Override
public Books queryBookByName(String bookName) {
    return bookMapper.queryBookByName(bookName);
}
  1. controller层,注入service
@Controller
@RequestMapping("/book")
public class BookController {

    //controller层调用service层
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

//    查询书籍
    @RequestMapping("/queryBook")
    public String queryBook(String queryBookName,Model model){
        Books books = bookService.queryBookByName(queryBookName);
        
//        把books对象封装到list中
        List<Books> list = new ArrayList<>();
        list.add(books);

        //        如果查询为空
        if (books==null){
            List<Books> booksList = bookService.queryAllBooks();
            list.add((Books) booksList);
            model.addAttribute("error","未查到");
        }

        model.addAttribute("list",list);
        return "allBook";
    }
}

5.2.jsp页面

在allBook.jsp页面,添加一个div,把搜索框写出来

<div class="col-md-4 column">
<%--class="form-inline"   把查询框、查询按钮、提示框放在一行--%>
    <form class="form-inline" action="${pageContext.request.contextPath}/book/queryBook" method="post" style="float: right">
         <span style="color: red;font-weight: bold">${error}</span>
         <input type="text" name="queryBookName" class="from-control" placeholder="请输入要查询的书籍名称">
         <input type="submit" value="查询" class="btn btn-primary">
    </form>
</div>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值