临桂县住房和城乡建设局网站,培训网站开发流程,盐城工程造价信息网,网站如何关闭这里修改的还是比较简单#xff0c;我们知道#xff0c;五大注解通常情况下是可以混用的#xff0c;而这里的BookController和UserController的注解不变 #xff0c;也不能改变#xff0c;因为Controller除了交给Spring管理外#xff0c;还具备一定的路由功能#xff0c… 这里修改的还是比较简单我们知道五大注解通常情况下是可以混用的而这里的BookController和UserController的注解不变 也不能改变因为Controller除了交给Spring管理外还具备一定的路由功能如果修改了就可能导致URL没办法访问到了。 修改的BookService类和BookDao类因为BookService类是处理业务逻辑的所以加Service注解好一点这个也表示是业务逻辑层的代码程序员可以直接看出来而BookDao类是数据层也叫持久化层因为还没学MyBatis所以使用的是mock的方式创建数据因为是和数据相关的所以加上Repository注解好一点这个注解也代表是数据相关的代码。
一、改变的
1、BookService类 加上注解Service
Service
public class BookService {public ListBookInfo getBookList() {BookDao bookDao new BookDao();ListBookInfo bookInfos bookDao.mockData();for(BookInfo bookInfo : bookInfos) {if(bookInfo.getStatus() 2) {bookInfo.setStatusCN(不可借阅);} else {bookInfo.setStatusCN(可借阅);}}return bookInfos;}
}
2、BookDao类 加上注解Repository
Repository
public class BookDao {public ListBookInfo mockData() {//理论上应该从数据库中获取数据当前采用mock方式ListBookInfo bookInfos new ArrayList();for (int i 1; i 15; i) {BookInfo bookInfo new BookInfo();bookInfo.setId(i);bookInfo.setBookName(图书 i);bookInfo.setAuthor(作者 i);bookInfo.setNum(i * 2 1);bookInfo.setPrice(new BigDecimal(i * 3));bookInfo.setPublishName(出版社 i);if(i % 5 0) {bookInfo.setStatus(2);
// bookInfo.setStatusCN(不可借阅);} else {bookInfo.setStatus(1);
// bookInfo.setStatusCN(可借阅);}bookInfos.add(bookInfo);}return bookInfos;}
}二、不改变的
1、UserController类
RestController
RequestMapping(/user)
public class UserController {RequestMapping(/login)public String login(String userName, String password, HttpSession session) {//1、校验参数//2、校验密码是否正确//3、返回响应结果System.out.println(userName password);if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {return 用户名或者密码为空;}if(!admin.equals(userName) || !admin.equals(password)) {return 账号或密码错误;}session.setAttribute(userName, userName);return ;}
}2、BookController类
RestController
RequestMapping(/book)
public class BookController {RequestMapping(/getBookList)public ListBookInfo getBookList() {BookService bookService new BookService();return bookService.getBookList();}
}
3、BookInfo类
Data
public class BookInfo {private Integer id;private String bookName;private String author;private Integer num;private BigDecimal price;private String publishName;private Integer status;//1-可借阅 2-不可借阅private String statusCN;//状态的中文含义
}
4、前端代码
1登录页面
!DOCTYPE html
html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/titlelink relstylesheet hrefcss/bootstrap.min.csslink relstylesheet hrefcss/login.cssscript typetext/javascript srcjs/jquery.min.js/script
/headbodydiv classcontainer-logindiv classcontainer-picimg srcpic/computer.png width350px/divdiv classlogin-dialogh3登陆/h3div classrowspan用户名/spaninput typetext nameuserName iduserName classform-control/divdiv classrowspan密码/spaninput typepassword namepassword idpassword classform-control/divdiv classrowbutton typebutton classbtn btn-info btn-lg onclicklogin()登录/button/div/div/divscript srcjs/jquery.min.js/scriptscriptfunction login() {var userName $(#userName).val();var password $(#password).val();$.ajax({url: /user/login,type: post,data: {userName: $(#userName).val(),password: $(#password).val()},success: function(result) {if(result ) {location.href book_list.html;} else{alert(result);}}});}/script
/body/html
2图书列表
!DOCTYPE html
html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0title图书列表展示/titlelink relstylesheet hrefcss/bootstrap.min.csslink relstylesheet hrefcss/list.cssscript typetext/javascript srcjs/jquery.min.js/scriptscript typetext/javascript srcjs/bootstrap.min.js/scriptscript srcjs/jq-paginator.js/script/headbodydiv classbookContainerh2图书列表展示/h2div classnavbar-justify-betweendivbutton classbtn btn-outline-info typebutton onclicklocation.hrefbook_add.html添加图书/buttonbutton classbtn btn-outline-info typebutton onclickbatchDelete()批量删除/button/div/divtabletheadtrtd选择/tdtd classwidth100图书ID/tdtd书名/tdtd作者/tdtd数量/tdtd定价/tdtd出版社/tdtd状态/tdtd classwidth200操作/td/tr/theadtbody/tbody/tablediv classdemoul idpageContainer classpagination justify-content-center/ul/divscriptgetBookList();function getBookList() {$.ajax({url: /book/getBookList,type: post,success: function(books) {console.log(拿到参数)var finalHtml ;for(book of books) {finalHtml tr;finalHtml tdinput typecheckbox nameselectBook value1 id book.id classbook-select/tdfinalHtml td book.id /td;finalHtml tdbook.bookName/td;finalHtml td book.author /td;finalHtml td book.num /td;finalHtml td book.price /td;finalHtml td book.publishName /td;finalHtml td book.statusCN /td;finalHtml td;finalHtml div classop;finalHtml a hrefbook_update.html?bookId book.id 修改/a;finalHtml a hrefjavascript:void(0) onclickdeleteBook( book.id )删除/a;finalHtml /div;finalHtml /td;finalHtml /tr;}$(tbody).html(finalHtml);}});}//翻页信息$(#pageContainer).jqPaginator({totalCounts: 100, //总记录数pageSize: 10, //每页的个数visiblePages: 5, //可视页数currentPage: 1, //当前页码first: li classpage-itema classpage-link首页/a/li,prev: li classpage-itema classpage-link hrefjavascript:void(0);上一页\/a\/li,next: li classpage-itema classpage-link hrefjavascript:void(0);下一页\/a\/li,last: li classpage-itema classpage-link hrefjavascript:void(0);最后一页\/a\/li,page: li classpage-itema classpage-link hrefjavascript:void(0);{{page}}\/a\/li,//页面初始化和页码点击时都会执行onPageChange: function (page, type) {console.log(第page页, 类型:type);}});function deleteBook(id) {var isDelete confirm(确认删除?);if (isDelete) {//删除图书alert(删除成功);}}function batchDelete() {var isDelete confirm(确认批量删除?);if (isDelete) {//获取复选框的idvar ids [];$(input:checkbox[nameselectBook]:checked).each(function () {ids.push($(this).val());});console.log(ids);alert(批量删除成功);}}/script/div
/body/html
三、测试 在Spring学习阶段不管代码修改程度有多小都要进行测试看是否能运行成功在企业上也一样同样要改一点测一点。 启动项目访问 http://127.0.0.1:8080/login.html 如图 登录界面可以正常访问登录再看看能不能访问图书列表界面如图 点击登录如图 可以成功访问说明代码修改的没问题。