<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加图书</title>
<script type="text/javascript" src="statics/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="statics/js/jquery-1.8.3.js"></script>
<script type="text/javascript">
function check() {
var btype = $("#btype").val();
/*var bname = $("#bname").val();
var bauthor = $("#bauthor").val();
var btime = $("#btime").val();
if (bname == "") {
alert("图书名称不能为空");
return false;
}
if (bauthor == "") {
alert("作者姓名不能为空");
return false;
}
if (btime == "") {
alert("购买日期不能为空");
return false;
}
*/
/*
var regBtime=/^(19|20)\d{2}-(1[0-2])|0?[1-9]-(3[0-1]|[1-2]\d|0?[1-9])$/;
if (regBtime.test(btime) == false) {
alert("购买日期无效");
return false;
}
*/
if (btype == -1) {
alert("请选择图书类别");
return false;
}
return true;
}
</script>
</head>
<body>
<form:form action="book" commandName="book" method="post" onsubmit="return check();">
<form:errors path="*" ></form:errors>
<table width="500" border="1">
<caption>新增图书信息</caption>
<tr>
<td width="91">图书名称:</td>
<td width="216"><input type="text" name="bname" id="bname" /></td>
<td width="171"> </td>
</tr>
<tr>
<td>图书作者:</td>
<td><input type="text" name="bauthor" id="bauthor" /></td>
<td> </td>
</tr>
<tr>
<td>购买日期:</td>
<td> <input type="text" class="Wdate" id="btime" name="btime"
onClick="WdatePicker({dateFmt:'yyyy-MM-dd'})" size="21"
value="" /></td>
<td>yyyy-MM-dd格式</td>
</tr>
<tr>
<td>图书类别:</td>
<td><select id="btype" name="btype">
<option value="-1">--选择所属分类--</option>
<option value="0">计算机/软件</option>
<option value="1">小说/文摘</option>
<option value="2">杂项</option>
</select></td>
<td> </td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit"
value="新增图书" /></td>
</tr>
</table>
</form:form>
</body>
</html>
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5 <html>
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8 <title>图书详细信息</title>
9
10 </head>
11 <body>
12 <h2>图书详细信息</h2>
13 <Br /> 图书名称:${requestScope.book.bname }
14 <Br /> 图书作者:${requestScope.book.bauthor }
15 <Br /> 出版时间:${requestScope.book.btime }
16 <Br /> 图书类别:
17 <c:choose>
18 <c:when test="${book.btype eq 0}">计算机/软件</c:when>
19 <c:when test="${book.btype eq 1}">小说/文摘</c:when>
20 <c:when test="${book.btype eq 2}">杂项</c:when>
21 </c:choose>
22 </body>
23 </html>
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 出错了!!!
11 </body>
12 </html>
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5 <html>
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8 <title>查询图书</title>
9 <style type="text/css">
10 td {
11 text-align: center;
12 }
13
14 table, tr, td {
15 border: 1px solid black;
16 border-collapse: collapse;
17 }
18
19 a.add {
20 text-decoration: none;
21 color: red;
22 }
23
24 div {
25 width:900px;
26 text-align: center;
27 }
28 </style>
29 <script type="text/javascript" src="statics/js/jquery-1.8.3.js"></script>
30 <script type="text/javascript">
31 $(document).ready(function() {
32 $("#all").click(function() {
33 var $bids = $("input[name=bids]");
34 if ($(this).is(":checked")) {
35 $bids.prop("checked", true);
36 } else {
37 $bids.prop("checked", false);
38 }
39 });
40
41 $("#delBtn").click(function() {
42 var $bids = $("input[name=bids]");
43 var flag=false;
44 $bids.each(function(index,i){
45 if($(i).is(":checked")){
46 flag=true;
47 return;
48 }
49 });
50 if(flag){
51 if(confirm("确认删除吗?")){
52 var bids="";
53 for(var i=0;i<$bids.length;i++){
54 if($bids[i].checked){
55 if(i==$bids.length-1){
56 bids+="bids="+$bids[i].value;
57 }else{
58 bids+="bids="+$bids[i].value+"&";
59 }
60 }
61 }
62 location.href="deleteBooks?"+bids;
63 }
64 }
65 else{
66 alert("请选择要删除的图书");
67 return false;
68 }
69 });
70
71 $("#btnSearch").click(function() {
72 $("#f2").submit();
73
74 });
75 });
76 function turnPage(pageIndex){
77 location.href="book?pageIndex="+pageIndex;
78 }
79 </script>
80 </head>
81 <body>
82 <c:if test="${not empty msg }">
83 <script type="text/javascript">
84 alert("${msg}");
85 </script>
86 </c:if>
87
88 <table width="900" border="1">
89 <caption>
90 <h1>图书信息</h1>
91 </caption>
92
93 <tr class="bg">
94 <td>选择</td>
95 <td>图书名称</td>
96 <td>图书作者</td>
97 <td>购买时间</td>
98 <td>图书分类</td>
99 <td>删除</td>
100 <td>更新</td>
101 </tr>
102 <c:forEach items="${p.list}" var="book">
103 <tr>
104 <td><input type="checkbox" name="bids" value="${book.bid}" /></td>
105 <td><a href="book/${book.bid}">${book.bname }</a></td>
106 <td>${book.bauthor }</td>
107 <td>${book.btime }</td>
108 <td><c:choose>
109 <c:when test="${book.btype eq 0}">计算机/软件</c:when>
110 <c:when test="${book.btype eq 1}">小说/文摘</c:when>
111 <c:when test="${book.btype eq 2}">杂项</c:when>
112 </c:choose></td>
113 <td>
114 <%-- <a href="deleteBook?bid=${book.bid}" onclick="return confirm('确认删除吗?')">删除</a> --%>
115 <form action="book/${book.bid}" method="post">
116 <input type="hidden" name="_method" value="delete" /> <input
117 type="submit" value="删除" />
118 </form>
119 </td>
120 <td>
121 <a href="book/${book.bid}/edit" >更新</a>
122 </td>
123 </tr>
124 </c:forEach>
125 </table>
126 <br />
127 <form id="f1" action="deleteBooks">
128 <input type="checkbox" id="all" />全选
129 <input id="delBtn"
130 type="button" value="删除所选" />
131 </form>
132
133 <div>
134 <a onclick="turnPage(1)">首页</a>
135 <a onclick="turnPage(${requestScope.p.prevPage})">上一页</a>
136 <a onclick="turnPage(${requestScope.p.nextPage})">下一页</a>
137 <a onclick="turnPage(${requestScope.p.totalPage})">末页</a>
138 第 ${requestScope.p.currPage }/共 ${requestScope.p.totalPage }页
139
140 转到第:
141 <select id="pageIndex" name="pageIndex" onchange="turnPage(this.value)">
142 <c:forEach var="i" begin="1" end="${requestScope.p.totalPage }">
143 <option value="${i}">${i}</option>
144 </c:forEach>
145 </select>
146 </div>
147 <br />
148 <br />
149 <a class="add" href="../book/new">新增图书信息</a>
150 </body>
151 </html>
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
9 <script type="text/javascript">
10 function check() {
11 var bname = $("#bname").val();
12 var bauthor = $("#bauthor").val();
13 var btime = $("#btime").val();
14 var btype = $("#btype").val();
15 if (bname == "") {
16 alert("图书名称不能为空");
17 return false;
18 }
19 if (bauthor == "") {
20 alert("作者姓名不能为空");
21 return false;
22 }
23 if (btime == "") {
24 alert("购买日期不能为空");
25 return false;
26 }
27 var regBtime=/^(19|20)\d{2}-(1[0-2])|0?[1-9]-(3[0-1]|[1-2]\d|0?[1-9])$/;
28
29 if (regBtime.test(btime) == false) {
30 alert("购买日期无效");
31 return false;
32 }
33 if (btype == -1) {
34 alert("请选择图书类别");
35 return false;
36 }
37 return true;
38 }
39 $(document).ready(function(){
40 $("#bname").val("${requestScope.book.bname}");
41 $("#bauthor").val("${requestScope.book.bauthor}");
42 $("#btime").val("${requestScope.book.btime}");
43 $("#btype").val(["${requestScope.book.btype}"]);
44 });
45 </script>
46 </head>
47 <body>
48 <form action="update" method="post" onsubmit="return check();">
49 <input type="hidden" name="bid" value="${requestScope.book.bid }"/>
50 <table width="500" border="1">
51 <caption>更新图书信息</caption>
52 <tr>
53 <td width="91">图书名称:</td>
54 <td width="216"><input type="text" name="bname" id="bname" /></td>
55 <td width="171"> </td>
56 </tr>
57 <tr>
58 <td>图书作者:</td>
59 <td><input type="text" name="bauthor" id="bauthor" /></td>
60 <td> </td>
61 </tr>
62 <tr>
63 <td>购买日期:</td>
64 <td><input type="text" name="btime" id="btime" /></td>
65 <td>yyyy-MM-dd格式</td>
66 </tr>
67 <tr>
68 <td>图书类别:</td>
69 <td><select id="btype" name="btype">
70 <option value="-1">--选择所属分类--</option>
71 <option value="0">计算机/软件</option>
72 <option value="1">小说/文摘</option>
73 <option value="2">杂项</option>
74 </select></td>
75 <td> </td>
76 </tr>
77 <tr>
78 <td colspan="3" align="center"><input type="submit"
79 value="更新图书" /></td>
80 </tr>
81 </table>
82 </form>
83 </body>
84 </html>
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <form action="upload" method="post" enctype="multipart/form-data">
11 上传者:<input type="text" name="name"/><br/>
12 上传文件:<input type="file" name="f1"/>
13 <input type="submit" value="上传"/>
14 </form>
15 </body>
16 </html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
上传成功!!!
</body>
</html>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:aop="http://www.springframework.org/schema/aop"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xmlns:p="http://www.springframework.org/schema/p"
7 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
9 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
10
11
12 <context:component-scan base-package="cn.jbit.ssm"></context:component-scan>
13 <!-- 连接数据库的 -->
14 <context:property-override location="classpath:db.properties"/>
15 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
16 p:driverClassName="" p:url="" p:username="" p:password=""></bean>
17
18 <!-- dbcp数据源连接数据库
19 <context:property-placeholder location="classpath:db.properties"/>
20 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
21 ></bean> -->
22
23 <!-- 配置sqlSessionFactory -->
24 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
25 p:dataSource-ref="dataSource"
26 p:mapperLocations="classpath:cn/jbit/ssm/dao/*.xml"
27 p:configLocation="classpath:mybatis-config.xml">
28 </bean>
29
30 <!-- 扫描接口 -->
31 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
32 p:sqlSessionFactoryBeanName="sqlSessionFactory" p:basePackage="cn.jbit.ssm.dao"></bean>
33
34 </beans>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
4 <configuration>
5 <typeAliases>
6 <typeAlias alias="Book" type="cn.jbit.ssm.entity.Book"/>
7 </typeAliases>
8
9
10 </configuration>
1 dataSource.driverClassName=com.mysql.jdbc.Driver
2 dataSource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8
3 dataSource.username=root
4 dataSource.password=123456
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:aop="http://www.springframework.org/schema/aop"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xmlns:mvc="http://www.springframework.org/schema/mvc"
7 xmlns:p="http://www.springframework.org/schema/p"
8 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
9 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
10 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
11 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
12
13 <context:component-scan base-package="cn.jbit"></context:component-scan>
14 <mvc:annotation-driven></mvc:annotation-driven>
15 <!-- 对静态资源的解析 -->
16 <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
17 <!-- 视图解析器 -->
18 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
19 p:suffix=".jsp"
20 p:prefix="/WEB-INF/jsp/"
21 p:viewClass="org.springframework.web.servlet.view.JstlView"
22 />
23 <!-- 配置全局异常
24 <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
25 <property name="exceptionMappings">
26 <props>
27 <prop key="java.lang.Exception">error</prop>
28 </props>
29 </property>
30 </bean> -->
31 <!-- 配置文件上传的解析器 -->
32 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
33 <property name="defaultEncoding" value="utf-8"></property>
34 <property name="maxUploadSize" value="50000"></property>
35 </bean>
36 </beans>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
3
4
5
6 <display-name>ch_ssm_bookmanage</display-name>
7 <welcome-file-list>
8 <welcome-file>index.html</welcome-file>
9 <welcome-file>index.htm</welcome-file>
10 <welcome-file>index.jsp</welcome-file>
11 <welcome-file>default.html</welcome-file>
12 <welcome-file>default.htm</welcome-file>
13 <welcome-file>default.jsp</welcome-file>
14 </welcome-file-list>
15
16
17 <context-param>
18 <param-name>contextConfigLocation</param-name>
19 <param-value>classpath:applicationContext.xml</param-value>
20 </context-param>
21 <!-- 不配置默认WEB-INF下面的applicationContext.xml -->
22 <listener>
23 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
24 </listener>
25
26
27 <servlet>
28 <servlet-name>springmvc</servlet-name>
29 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
30 <load-on-startup>1</load-on-startup>
31 </servlet>
32 <servlet-mapping>
33 <servlet-name>springmvc</servlet-name>
34 <url-pattern>/</url-pattern>
35 </servlet-mapping>
36
37 <!-- 配置过滤器 -->
38 <filter>
39 <filter-name>HiddenHttpMethodFilter</filter-name>
40 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
41 </filter>
42 <filter-mapping>
43 <filter-name>HiddenHttpMethodFilter</filter-name>
44 <url-pattern>/*</url-pattern>
45 </filter-mapping>
46
47
48 </web-app>
1 aopalliance.jar
2 asm-4.2.jar
3 aspectjweaver.jar
4 cglib-3.1.jar
5 classmate-1.1.0.jar
6 commons-dbcp-1.4.jar
7 commons-fileupload-1.2.2.jar
8 commons-io-2.4.jar
9 commons-lang3-3.1.jar
10 commons-logging-1.2.jar
11 commons-pool-1.5.6.jar
12 commons-pool-1.6.jar
13 hibernate-validator-5.2.4.Final.jar
14 hibernate-validator-annotation-processor-5.2.4.Final.jar
15 hibernate-validator-cdi-5.2.4.Final.jar
16 jackson-annotations-2.5.0.jar
17 jackson-core-2.5.0.jar
18 jackson-databind-2.5.0.jar
19 javax.el-2.2.4.jar
20 javax.el-api-2.2.4.jar
21 jboss-logging-3.2.1.Final.jar
22 jstl.jar
23 junit-4.12.jar
24 log4j-1.2.17.jar
25 log4j-api-2.2.jar
26 log4j-core-2.2.jar
27 mybatis-3.3.0.jar
28 mybatis-spring-1.2.0.jar
29 mysql-connector-java-5.1.38-bin.jar
30 org.hamcrest.core_1.3.0.v201303031735.jar
31 slf4j-api-1.7.12.jar
32 slf4j-api-1.7.5.jar
33 slf4j-log4j12-1.7.12.jar
34 slf4j-log4j12-1.7.5.jar
35 spring-aop-4.3.0.RELEASE.jar
36 spring-aspects-4.3.0.RELEASE.jar
37 spring-beans-4.3.0.RELEASE.jar
38 spring-context-4.3.0.RELEASE.jar
39 spring-context-support-4.3.0.RELEASE.jar
40 spring-core-4.3.0.RELEASE.jar
41 spring-expression-4.3.0.RELEASE.jar
42 spring-jdbc-4.3.0.RELEASE.jar
43 spring-orm-4.3.0.RELEASE.jar
44 spring-test-4.3.0.RELEASE.jar
45 spring-tx-4.3.0.RELEASE.jar
46 spring-web-4.3.0.RELEASE.jar
47 spring-webmvc-4.3.0.RELEASE.jar
48 standard.jar
49 validation-api-1.1.0.Final.jar
package cn.jbit.ssm.biz;
import java.util.List;
import java.util.Map;
import cn.jbit.ssm.entity.Book;
public interface BookBiz {
/*添加图书*/
public int addBook(Book book) throws Exception;
/*查询当前页所有图书*/
public List<Book> getAllBooksByPage(Map<String,Object> map) throws Exception;
/*根据bid删除一本图书*/
public int deleteBookByBid(int bid) throws Exception;
/*更新图书*/
public int updateBook(Book book) throws Exception;
/*根据bid查询图书*/
public Book getBookByBid(int bid) throws Exception;
/*删除多本图书*/
public int deleteBookByBids(int [] bids) throws Exception;
/*根据条件查询图书总记录数*/
public int countAll(Book book) throws Exception;
/*根据条件分页查询图书*/
public List<Book> searchBookByPage(Map<String,Object> map) throws Exception;
/*根据图书名称和图书分类查询图书*/
public List<Book> searchBook(Book book) throws Exception;
}
package cn.jbit.ssm.biz.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import cn.jbit.ssm.biz.BookBiz;
import cn.jbit.ssm.dao.BookDao;
import cn.jbit.ssm.entity.Book;
@Service("bookBiz")
@Transactional(propagation=Propagation.REQUIRED)
public class BookBizImpl implements BookBiz {
@Autowired
private BookDao bookDao;
@Override
public int addBook(Book book) throws Exception {
// TODO Auto-generated method stub
return bookDao.addBook(book);
}
@Override
public List<Book> getAllBooksByPage(Map<String, Object> map) throws Exception {
// TODO Auto-generated method stub
return bookDao.getAllBooksByPage(map);
}
@Override
public int deleteBookByBid(int bid) throws Exception {
// TODO Auto-generated method stub
return bookDao.deleteBookByBid(bid);
}
@Override
public int updateBook(Book book) throws Exception {
// TODO Auto-generated method stub
return bookDao.updateBook(book);
}
@Override
public Book getBookByBid(int bid) throws Exception {
// TODO Auto-generated method stub
return bookDao.getBookByBid(bid);
}
@Override
public int deleteBookByBids(int[] bids) throws Exception {
// TODO Auto-generated method stub
return bookDao.deleteBookByBids(bids);
}
@Override
public int countAll(Book book) throws Exception {
// TODO Auto-generated method stub
return bookDao.countAll(book);
}
@Override
public List<Book> searchBookByPage(Map<String, Object> map) throws Exception {
// TODO Auto-generated method stub
return bookDao.searchBookByPage(map);
}
@Override
public List<Book> searchBook(Book book) throws Exception {
// TODO Auto-generated method stub
return bookDao.searchBook(book);
}
}
package cn.jbit.ssm.entity;
import java.io.Serializable;
import java.sql.Date;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import org.apache.ibatis.type.Alias;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
@Alias("Book")
public class Book implements Serializable{
private static final long serialVersionUID = 1L;
public Book(String bname, int btype) {
super();
this.btype = btype;
}
private int bid;//图书编号
@NotNull
private String bname;//图书名称
@NotNull
@Pattern(regexp="[\u4e00-\u9fe5a-zA-Z0-9_]{2,}")
private String bauthor;//图书作者
@Override
public String toString() {
return "Book [bid=" + bid + ", bname=" + bname + ", bauthor=" + bauthor
+ ", btime=" + btime + ", btype=" + btype + ", bstartTime="
+ bstartTime + ", bendTime=" + bendTime + "]";
}
//@DateTimeFormat(pattern="yyyy/MM/dd")
@NotNull
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date btime;//出版时间
@NotNull
private int btype=-1;//图书类别
public Date getBstartTime() {
return bstartTime;
}
public void setBstartTime(Date bstartTime) {
this.bstartTime = bstartTime;
}
public Date getBendTime() {
return bendTime;
}
public void setBendTime(Date bendTime) {
this.bendTime = bendTime;
}
private Date bstartTime;
private Date bendTime;
public Book() {
super();
}
public Book(String bname, String bauthor, Date btime, int btype) {
super();
this.bname = bname;
this.bauthor = bauthor;
this.btime = btime;
this.btype = btype;
}
public Book(int bid, String bname, String bauthor, Date btime, int btype) {
super();
this.bid = bid;
this.bname = bname;
this.bauthor = bauthor;
this.btime = btime;
this.btype = btype;
}
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public String getBauthor() {
return bauthor;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
public Date getBtime() {
return btime;
}
public void setBtime(Date btime) {
this.btime = btime;
}
public int getBtype() {
return btype;
}
public void setBtype(int btype) {
this.btype = btype;
}
}
package cn.jbit.ssm.tool;
import java.util.List;
public class Page<T> {
private int currPage=1;//当前页
private int prevPage;//上一页
private int nextPage;//下一页
private int totalCount;//总记录数
private int totalPage;//总页数
private int pageSize=5;//每页显示记录数
private List<T> list;//当前页查询结果
public int getCurrPage() {
return currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getPrevPage() {
int prevPage=currPage-1;
if(prevPage<1)
prevPage=1;
return prevPage;
}
public void setPrevPage(int prevPage) {
this.prevPage = prevPage;
}
public int getNextPage() {
int nextPage=currPage+1;
if(nextPage>totalPage)
nextPage=totalPage;
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
if(totalCount>0){
this.setTotalPage((totalCount-1)/pageSize+1);
}
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
1 package cn.jbit.ssm.web;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6
7 import javax.validation.Valid;
8
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.stereotype.Controller;
11 import org.springframework.ui.Model;
12 import org.springframework.validation.BindingResult;
13 import org.springframework.web.bind.annotation.ModelAttribute;
14 import org.springframework.web.bind.annotation.PathVariable;
15 import org.springframework.web.bind.annotation.RequestMapping;
16 import org.springframework.web.bind.annotation.RequestMethod;
17 import org.springframework.web.bind.annotation.RequestParam;
18
19 import cn.jbit.ssm.biz.BookBiz;
20 import cn.jbit.ssm.entity.Book;
21 import cn.jbit.ssm.tool.Page;
22 /**
23 *
24 * <p>Title:BookController</p>
25 * <p>Description: 控制器</p>
26 * @author 张健
27 * @blog www.cnblogs.com/zhangjianblog
28 * @date 2017年1月10日下午2:18:09
29 * @version Neon Release (4.6.0)
30 */
31 @Controller
32 public class BookController {
33
34 @Autowired
35 private BookBiz bookBiz;
36
37
38 //查询当前页所有图书
39 @RequestMapping("/book")
40 public String index(@RequestParam(name="pageIndex",required=false)Integer pageIndex,
41 Model model) throws Exception{
42 Map<String,Object> map=new HashMap<String,Object>();
43 Page<Book> p=new Page<Book>();
44 p.setTotalCount(bookBiz.countAll(new Book()));
45 if(null==pageIndex){
46 pageIndex=1;
47 }
48 p.setCurrPage(pageIndex);
49 map.put("startRow",(pageIndex-1)*p.getPageSize());
50 map.put("pageSize",p.getPageSize());
51 List<Book> list=bookBiz.getAllBooksByPage(map);
52 p.setList(list);
53 model.addAttribute("p",p);
54 return "list";
55 }
56
57
58 @RequestMapping("/book/new")
59 public String _new(){
60 return "addBook";
61 }
62
63 @RequestMapping("/book/{bid}")
64 public String show(@PathVariable("bid") int bid,Model model) throws Exception{
65 Book book=bookBiz.getBookByBid(bid);
66 model.addAttribute("book",book);
67 return "detailBook";
68 }
69
70
71 @RequestMapping(value = "/book", method = {RequestMethod.POST,RequestMethod.GET})
72 public String create(@ModelAttribute("book") @Valid Book book,
73 BindingResult bindingResult, Model model) throws Exception {
74 if (bindingResult.hasErrors()) {
75 return "addBook";
76 }
77 int count = bookBiz.addBook(book);
78 if (count > 0) {
79 model.addAttribute("msg", "添加成功!!!");
80 } else {
81 model.addAttribute("msg", "添加失败");
82 }
83 return "redirect:/book";
84 }
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103 /*
104
105 查询所有图书信息
106 @Autowired
107 private BookBiz bookBiz;
108 @RequestMapping("/list")
109 public String getAllBooks(Model model) throws Exception{
110 List<Book> list=bookBiz.getAllBooks();
111 model.addAttribute("list",list);
112 return "list";
113 }
114
115 新增图书信息
116 @RequestMapping("/toAdd")
117 public String toAdd(){
118 return "addBook";
119 }
120 @RequestMapping("/add")
121 public String addBook(Book book,Model model) throws Exception{
122 int count=0;
123 try {
124 count = bookBiz.addBook(book);
125 } catch (Exception e) {
126 // TODO Auto-generated catch block
127 e.printStackTrace();
128 }
129 if(count>0){
130 model.addAttribute("msg", "添加成功");
131 }else{
132 model.addAttribute("msg", "添加失败");
133
134 }
135 return "forward:list";
136 }
137
138 根据bid删除图书信息
139 @RequestMapping(value="/delete/{bid}",method=RequestMethod.DELETE)
140 public String deleteBookByBid(@PathVariable("bid") int bid,RedirectAttributes ra) throws Exception{
141
142 int count=0;
143 try {
144 count = bookBiz.deleteBookByBid(bid);
145 } catch (Exception e) {
146 // TODO Auto-generated catch block
147 e.printStackTrace();
148 }
149 if(count>0){
150 ra.addFlashAttribute("msg", "删出成功");
151 }else{
152 ra.addFlashAttribute("msg", "删除失败");
153 }
154 return "redirect:/list";
155 }
156 @RequestMapping("/delete")
157 public String deleteBookByBid(@RequestParam("bid") int bid,Model model) throws Exception{
158 int count=0;
159 try {
160 count = bookBiz.deleteBookByBid(bid);
161 } catch (Exception e) {
162 // TODO Auto-generated catch block
163 e.printStackTrace();
164 }
165 if(count>0){
166 model.addAttribute("msg", "删除成功");
167 }else{
168 model.addAttribute("msg", "删除失败");
169 }
170 return "forward:list";
171 }
172
173 更新图书信息
174 @RequestMapping(value="/update",method={RequestMethod.PUT})
175 public String updateBook(Book book,Model model,RedirectAttributes ra) throws Exception{
176 int count=0;
177 try {
178 count = bookBiz.updateBook(book);
179 } catch (Exception e) {
180 // TODO Auto-generated catch block
181 e.printStackTrace();
182 }
183 if(count>0){
184 ra.addFlashAttribute("msg", "更新成功");
185 }else{
186 ra.addFlashAttribute("msg", "更新失败");
187 }
188 return "redirect:/list";
189 }
190
191 @ExceptionHandler(value=Exception.class)
192 public String defaultHandlerException(Exception e,Model m){
193 m.addAttribute("e",e);
194 return "error";
195 }
196 @RequestMapping("/testException")
197 public String testException() throws Exception{
198 throw new Exception("测试全局异常");
199 }*/
200 }
package cn.jbit.ssm.dao;
import java.util.List;
import java.util.Map;
import cn.jbit.ssm.entity.Book;
/**
*
* <p>Title:BookDao</p>
* <p>Description: </p>
* @author 张健
* @blog www.cnblogs.com/zhangjianblog
* @date 2017年1月10日上午10:45:32
* @version Neon Release (4.6.0)
*/
public interface BookDao {
/*添加图书*/
public int addBook(Book book);
/*查询当前页所有图书*/
public List<Book> getAllBooksByPage(Map<String,Object> map);
/*根据bid删除一本图书*/
public int deleteBookByBid(int bid);
/*更新图书*/
public int updateBook(Book book);
/*根据bid查询图书*/
public Book getBookByBid(int bid);
/*删除多本图书*/
public int deleteBookByBids(int [] bids);
/*根据条件查询图书总记录数*/
public int countAll(Book book);
/*根据条件分页查询图书*/
public List<Book> searchBookByPage(Map<String,Object> map);
/*根据图书名称和图书分类查询图书*/
public List<Book> searchBook(Book book);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.jbit.ssm.dao.BookDao">
<resultMap type="Book" id="BookResultMap">
<id property="bid" column="b_id"></id>
<result property="bname" column="b_name"/>
<result property="bauthor" column="b_author"/>
<result property="btime" column="b_time"/>
<result property="btype" column="b_type"/>
</resultMap>
<select id="getAllBooksByPage" parameterType="hashmap" resultMap="BookResultMap">
select *from book limit #{startRow},#{pageSize}
</select>
<select id="searchBookByPage" parameterType="hashmap" resultMap="BookResultMap">
select * from book
<trim prefix="where" prefixOverrides="and">
<if test="bname!=null">
and b_name like concat('%',#{bname},'%')
</if>
<if test="bauthor!=null">
and b_author like concat('%',#{bauthor},'%')
</if>
<if test="bstartTime!=null">
and b_time >=#{bstartTime}
</if>
<if test="bendTime!=null">
and b_time <![CDATA[<]]>=#{bendTime}
</if>
<if test="btype!=-1">
and b_type=#{btype}
</if>
</trim>
limit #{startRow},#{pageSize}
</select>
<select id="countAll" resultType="int" parameterType="Book">
SELECT count(1) FROM book
<trim prefix="where" prefixOverrides="and">
<if test="bname!=null">
and b_name like concat('%',#{bname},'%')
</if>
<if test="bauthor!=null">
and b_author like concat('%',#{bauthor},'%')
</if>
<if test="bstartTime!=null">
and b_time >=#{bstartTime}
</if>
<if test="bendTime!=null">
and b_time <![CDATA[<]]>=#{bendTime}
</if>
<if test="btype!=-1">
and b_type=#{btype}
</if>
</trim>
</select>
<select id="getAllBooks" resultMap="BookResultMap">
select *from book
</select>
<delete id="deleteBookByBid" parameterType="int">
delete from book where b_id=#{bid}
</delete>
<insert id="addBook" parameterType="Book">
insert into book(b_name,b_author,b_time,b_type) values (#{bname},#{bauthor},#{btime},#{btype})
</insert>
<update id="updateBook" parameterType="Book">
<!-- update book set b_name=#{bname},b_author=#{bauthor},b_time=#{btime},b_type=#{btype} where b_id=#{bid} -->
update Book
<set>
<if test="bname!=null">b_name=#{bname}</if>
<if test="bauthor!=null">b_author=#{bauthor}</if>
<if test="btime!=null">b_time=#{btime}</if>
<if test="btype!=null">b_type=#{btype}</if>
</set>
</update>
<select id="getBookByBid" parameterType="int" resultMap="BookResultMap">
select *from book where b_id=#{bid}
</select>
<select id="searchBook" parameterType="Book" resultMap="BookResultMap">
select *from book where b_name like b_name=#{bname} and b_type=#{btype}
</select>
</mapper>