This is my own learning experience after learning the Spring framework and according to the reference and improvement of other people's projects, I have realized a relatively basic library management system. Well, I won't say much nonsense. Let's get to the point.
1, Project overview
Functional requirements description
Library management system is a typical information management system. Its development mainly includes the following parts: the establishment and maintenance of background database and the development of front-end application.
For the former, a database with strong data consistency and integrity and good data security should be established. For the latter, what is needed is that the application is fully functional and easy to use.
Design Overview
1. The interface design is simple and friendly (easy for human-computer interaction)
2. The information classification is clear and accurate (all books, book borrowing and user information)
3. Improve better query ability (support fuzzy query)
4. Support library staff to borrow and return books
Realize function
1. The librarian manages the books
2. Administrator's management of borrower (Reader) information
3. The administrator manages the return of books borrowed by borrowers
4. Administrator login management
5. User borrowing query, personal information query, borrowing information query, etc
6. Password change for administrator / user
Function display
Sign in
login interface
Operation as Administrator
The home page after logging in as an administrator, where you can carry out book related operations
The administrator manages readers
The administrator can view the borrowing and returning records of all users
User (Reader) identity operation
The home page after logging in as a user (Reader), where you can carry out book related operations
Users (Readers) modify personal account information
Users (Readers) view personal loan and return records
User \ administrator password modification
2, Detailed system design
1. Construction of large framework
To write a project well, the first and most important thing is to build the framework of the project. With a framework, writing a project will not be in a hurry, it will become planned and regular, and the efficiency can be improved.
According to the three-tier architecture of spring MVC, we can divide the project into these three parts:
- Model is the part of an application that processes the application data logic. Usually, model objects are responsible for accessing data in the database.
- A View is the part of an application that processes the display of data. Usually, a View is created based on model data.
- The Controller is the part of the application that handles user interaction. Usually, the Controller is responsible for reading data from the view, controlling user input, and sending data to the model.
On top of these three models, it can be subdivided:
- dao layer: this layer is the data persistence layer. The so-called data persistence requires dealing with the database. Therefore, this layer needs to do operations on the database, such as adding, deleting, changing and searching books.
- controller layer: this layer is the control layer, which controls the data interaction and logical operations between the front-end interface and the background, such as reading data from the page and sending data. (specific business)
- Entity layer: this layer is the entity layer, which places entities and their corresponding set and get methods. If you want to perform some operations (such as reading) on the database, you must first write the entity layer.
- Service layer: this layer is the service layer, which is responsible for data interaction and logical operation (business between modules)
After the construction of the large framework is completed, the preparation for the project can be carried out below!
2. Preliminary preparations for the project
The preliminary preparations for the project include:
Related technology | name |
---|---|
front end | jsp,css,html,JQuery,BootStrap |
back-end | SpringMVC,Mybatis |
database | Mysql |
development environment | IDEA |
The expected functions are:
role | function |
---|---|
Ordinary user (borrower) | Book inquiry (view all books), personal information (view or modify personal information), borrowing and returning, password modification |
administrators | Library management (view all books, add books), reader management (view all readers, add Readers), borrowing and returning management, and change password |
Person not logged in | Log in to the system and enter the administrator or ordinary user interface |
The project document framework is as follows:
- book: there are controller, Dao, entity and service in it
- resources: put xml and other configuration files inside
- webapp: put things related to web pages, static (put statically loaded files, css,images,js), WEB-INF (jsp,web.xml files, etc.)
- pom.xml file: import related dependency packages through maven remote warehouse
- Mybatis mapping file: find the corresponding sql statement through mybatis mapping
The project structure is shown in the figure:
The preparatory work in the early stage of the project is basically completed. The following is the implementation of various logical methods in the project
3, Detailed implementation of each function
There are many chapters in this chapter. You can read it slowly or choose your favorite part. Don't say much and start the project!
1. Create spring configuration file
Because the project is based on the spring framework, the spring configuration file is needed to inject bean classes
<!-- Scan class package and label Spring Annotated classes are automatically converted to Bean,Simultaneous completion Bean Injection of --> <context:component-scan base-package="com.book.dao"/> <context:component-scan base-package="com.book.service"/> <!-- Define the data source of a database connection pool --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="com.mysql.cj.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/spring_book?useUnicode=true&characterEncoding=UTF8" p:username="root" p:password="123456"/> <!-- JDBC Template Bean --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"/>
2. Configure mybatis
db.properties:
#mysql jdbc spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=123456
pom.xml
<!--mybatis-spring Adapter --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- mybatis ORM frame --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <!--jdbc Connection pool--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.18</version> </dependency> <!--paging--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency>
3. Realize login service
First create the administrator entity class Admin and the common borrowing user entity class ReadCard
Implement getter and setter methods
private long admin_id; private String password; private String username; public long getAdminId() { return admin_id; } public void setAdminId(long admin_id) { this.admin_id = admin_id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }
Setters and getter s of ReadCard are omitted here, and the following are the same. Only the corresponding entity attributes are written
private long reader_id; private String username; private String password;
Start writing Dao data access layer interface and implementation class:
Interface:
public interface AdminDao { int getMatchCount(final long admin_id, final String password); int resetPassword(final long admin_id, final String password); String getPassword(final long admin_id); String getUsername(final long admin_id); }
public interface ReaderCardDao { int getIdMatchCount(final long reader_id, final String password); ReaderCard findReaderByReaderId(final long reader_id); int resetPassword(final long reader_id, final String newPassword); int addReaderCard(final ReaderInfo readerInfo, final String password); String getPassword(final long reader_id); int deleteReaderCard(final long reader_id); }
Implementation class: take AdminDao interface AdminDaoImpl as an example
@Repository public class AdminDaoImpl implements AdminDao { private final static String NAMESPACE = "com.book.dao.impl.AdminDaoImpl."; @Resource private SqlSessionTemplate sqlSessionTemplate; @Override public int getMatchCount(final long admin_id, final String password) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("admin_id", admin_id); paramMap.put("password", password); return sqlSessionTemplate.selectOne(NAMESPACE + "getMatchCount", paramMap); } @Override public int resetPassword(final long admin_id, final String password) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("admin_id", admin_id); paramMap.put("password", password); return sqlSessionTemplate.update(NAMESPACE + "resetPassword", paramMap); } @Override public String getPassword(final long admin_id) { return sqlSessionTemplate.selectOne(NAMESPACE + "getPassword", admin_id); } @Override public String getUsername(final long admin_id) { return sqlSessionTemplate.selectOne(NAMESPACE + "getUsername", admin_id); } }
Start writing Service layer interface and implementation class:
LoginService definition method:
boolean hasMatchReader(long readerId,String password); String getAdminUsername(long adminId); ReaderCard findReaderCardByReaderId(long readerId); boolean hasMatchAdmin(long adminId,String password); boolean adminRePassword(long adminId, String newPassword); String getAdminPassword(long adminId); boolean readerRePassword(long readerId, String newPassword); String getReaderPassword(long readerId);
Corresponding implementation class write logic method
Inject data interaction to access the database through the data interaction layer and realize the login function
@Service public class LoginServiceImpl implements LoginService{ @Autowired private ReaderCardDaoImpl readerCardDaoImpl; @Autowired private AdminDaoImpl adminDaoImpl; @Override public boolean hasMatchReader(long readerId, String password){ return readerCardDaoImpl.getIdMatchCount(readerId, password)>0; } @Override public String getAdminUsername(long adminId) { return adminDaoImpl.getUsername(adminId); } @Override public ReaderCard findReaderCardByReaderId(long readerId){ return readerCardDaoImpl.findReaderByReaderId(readerId); } @Override public boolean hasMatchAdmin(long adminId, String password){ return adminDaoImpl.getMatchCount(adminId, password) == 1; } @Override public boolean adminRePassword(long adminId, String newPassword){ return adminDaoImpl.resetPassword(adminId,newPassword)>0; } @Override public String getAdminPassword(long adminId){ return adminDaoImpl.getPassword(adminId); } @Override public boolean readerRePassword(long readerId, String newPassword) { return readerCardDaoImpl.resetPassword(readerId, newPassword) > 0; } @Override public String getReaderPassword(long readerId) { return readerCardDaoImpl.getPassword(readerId); } }
4. Administrator business implementation
(1) Implementation of related services
Business related to login
@Autowired private ReaderCardDaoImpl readerCardDaoImpl; @Autowired private AdminDaoImpl adminDaoImpl; @Override public boolean hasMatchReader(long readerId, String password){ return readerCardDaoImpl.getIdMatchCount(readerId, password)>0; } @Override public String getAdminUsername(long adminId) { return adminDaoImpl.getUsername(adminId); } @Override public ReaderCard findReaderCardByReaderId(long readerId){ return readerCardDaoImpl.findReaderByReaderId(readerId); } @Override public boolean hasMatchAdmin(long adminId, String password){ return adminDaoImpl.getMatchCount(adminId, password) == 1; } @Override public boolean adminRePassword(long adminId, String newPassword){ return adminDaoImpl.resetPassword(adminId,newPassword)>0; } @Override public String getAdminPassword(long adminId){ return adminDaoImpl.getPassword(adminId); } @Override public boolean readerRePassword(long readerId, String newPassword) { return readerCardDaoImpl.resetPassword(readerId, newPassword) > 0; } @Override public String getReaderPassword(long readerId) { return readerCardDaoImpl.getPassword(readerId); }
Book related business
@Autowired private BookDaoImpl bookDaoImpl; @Override public PageInfo<Book> queryBook(String searchWord,int pageNum,int pageSize) { //paging PageHelper.startPage(pageNum,pageSize); ArrayList<Book> list = bookDaoImpl.queryBook(searchWord); PageInfo pageInfo = new PageInfo(list); return pageInfo; } @Override public PageInfo<Book> getAllBooks(int pageNum,int pageSize) { //paging PageHelper.startPage(pageNum,pageSize); ArrayList<Book> list = bookDaoImpl.getAllBooks(); PageInfo pageInfo = new PageInfo(list); return pageInfo; } @Override public boolean matchBook(String searchWord) { return bookDaoImpl.matchBook(searchWord) > 0; } @Override public boolean addBook(Book book) { return bookDaoImpl.addBook(book) > 0; } @Override public Book getBook(Long bookId) { return bookDaoImpl.getBook(bookId); } @Override public boolean editBook(Book book) { return bookDaoImpl.editBook(book) > 0; } @Override public boolean deleteBook(Long bookId) { return bookDaoImpl.deleteBook(bookId) > 0; } @Override public ArrayList<Type> getAllTypes() { return bookDaoImpl.getAllTypes(); } //Through book_id find the corresponding type, and then find the book_ Class number and category name corresponding to ID @Override public Type getTypesById(Long bookId) { return bookDaoImpl.getTypesById(bookId); }
(2) Data operation of related business
Administrator login
private final static String NAMESPACE = "com.book.dao.impl.AdminDaoImpl."; @Resource private SqlSessionTemplate sqlSessionTemplate; @Override public int getMatchCount(final long admin_id, final String password) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("admin_id", admin_id); paramMap.put("password", password); return sqlSessionTemplate.selectOne(NAMESPACE + "getMatchCount", paramMap); } @Override public int resetPassword(final long admin_id, final String password) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("admin_id", admin_id); paramMap.put("password", password); return sqlSessionTemplate.update(NAMESPACE + "resetPassword", paramMap); } @Override public String getPassword(final long admin_id) { return sqlSessionTemplate.selectOne(NAMESPACE + "getPassword", admin_id); } @Override public String getUsername(final long admin_id) { return sqlSessionTemplate.selectOne(NAMESPACE + "getUsername", admin_id); }
Library management
private final static String NAMESPACE = "com.book.dao.impl.BookDaoImpl."; @Resource private SqlSessionTemplate sqlSessionTemplate; @Override public int matchBook(final String searchWord) { String search = "%" + searchWord + "%"; return sqlSessionTemplate.selectOne(NAMESPACE + "matchBook", search); } @Override public ArrayList<Book> queryBook(final String searchWord) { String search = "%" + searchWord + "%"; List<Book> result = sqlSessionTemplate.selectList(NAMESPACE + "queryBook", search); return (ArrayList<Book>) result; } @Override public ArrayList<Book> getAllBooks() { List<Book> result = sqlSessionTemplate.selectList(NAMESPACE + "getAllBooks"); return (ArrayList<Book>) result; } @Override public int addBook(final Book book) { return sqlSessionTemplate.insert(NAMESPACE + "addBook", book); } @Override public Book getBook(final long bookId) { return sqlSessionTemplate.selectOne(NAMESPACE + "getBook", bookId); } @Override public int editBook(final Book book) { return sqlSessionTemplate.update(NAMESPACE + "editBook", book); } @Override public int deleteBook(final long bookId) { return sqlSessionTemplate.delete(NAMESPACE + "deleteBook", bookId); } @Override public ArrayList<Type> getAllTypes() { List<Type> result = sqlSessionTemplate.selectList(NAMESPACE + "getAllTypes"); return (ArrayList<Type>) result; } @Override public Type getTypesById(final long TypeId){ return sqlSessionTemplate.selectOne(NAMESPACE + "getTypesById", TypeId); }
(3) mybatis database operation
admin.xml
<select id="getMatchCount" resultType="int"> select count(*) from admin where admin_id = #{admin_id} and password = #{password} </select> <update id="resetPassword"> update admin set password = #{password} where admin_id = #{admin_id} </update> <select id="getPassword" resultType="String" parameterType="long"> select password from admin where admin_id = #{admin_id} </select> <select id="getUsername" resultType="String" parameterType="long"> select username from admin where admin_id = #{admin_id} </select>
book.xml
<select id="getAllTypes" resultType="com.book.entity.Type"> select * from class_info </select> <select id="getTypesById" resultType="com.book.entity.Type" parameterType="long"> select c.class_id,c.class_name from book_info b inner join class_info c on b.class_id = c.class_id and b.book_id = #{book_id} </select> <insert id="addBook" parameterType="com.book.entity.Book"> insert into book_info values (null, #{name}, #{author}, #{publish}, #{ISBN}, #{introduction}, #{language}, #{price}, #{pub_date}, #{picture}, #{class_id}, #{number}) </insert> <update id="editBook" parameterType="com.book.entity.Book"> update book_info set name=#{name}, author=#{author}, publish=#{publish}, ISBN=#{ISBN}, introduction=#{introduction}, language=#{language}, price=#{price}, pub_date=#{pub_date},picture=#{picture}, class_id=#{class_id}, number=#{number} where book_id=#{book_id} </update> <select id="getAllBooks" resultType="com.book.entity.Book"> select * from book_info </select> <select id="queryBook" resultType="com.book.entity.Book" parameterType="String"> select * from book_info where name like #{search} or author like #{search} or introduction like #{search} </select> <select id="matchBook" resultType="int" parameterType="String"> select count(*) from book_info where name like #{search} or author like #{search} or introduction like #{search} </select> <select id="getBook" resultType="com.book.entity.Book" parameterType="long"> select * from book_info where book_id = #{book_id} </select> <delete id="deleteBook" parameterType="long"> delete from book_info where book_id = #{book_id} </delete>
(4) Interaction of related businesses
Interactive operation of login service
//Responsible for processing loginCheck.html requests //The request parameter will be automatically bound to the input parameter of the corresponding method according to the default contract of the parameter name @RequestMapping(value = "/api/loginCheck", method = RequestMethod.POST) public @ResponseBody Object loginCheck(HttpServletRequest request) { long id = Long.parseLong(request.getParameter("id")); String passwd = request.getParameter("passwd"); boolean isReader = loginServiceImpl.hasMatchReader(id, passwd); boolean isAdmin = loginServiceImpl.hasMatchAdmin(id, passwd); HashMap<String, String> res = new HashMap<>(); if (isAdmin) { Admin admin = new Admin(); admin.setAdminId(id); admin.setPassword(passwd); String username = loginServiceImpl.getAdminUsername(id); admin.setUsername(username); request.getSession().setAttribute("admin", admin); res.put("stateCode", "1"); res.put("msg", "Administrator login succeeded!"); } else if (isReader) { ReaderCard readerCard = loginServiceImpl.findReaderCardByReaderId(id); request.getSession().setAttribute("readercard", readerCard); res.put("stateCode", "2"); res.put("msg", "Readers log in successfully!"); } else { res.put("stateCode", "0"); res.put("msg", "Wrong account or password!"); } return res; } @RequestMapping("/admin_main.html") public ModelAndView toAdminMain(HttpServletResponse response) { return new ModelAndView("admin_main"); } @RequestMapping("/reader_main.html") public ModelAndView toReaderMain(HttpServletResponse response) { return new ModelAndView("reader_main"); } @RequestMapping("/admin_repasswd.html") public ModelAndView reAdminPasswd() { return new ModelAndView("admin_repasswd"); }
Interactive operation of book business
@RequestMapping("/querybook.html") public ModelAndView queryBookDo(String searchWord,@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) { if (bookServiceImpl.matchBook(searchWord)) { PageInfo<Book> pageInfo = bookServiceImpl.queryBook(searchWord,pageNum,pageSize); ModelAndView modelAndView = new ModelAndView("admin_books"); modelAndView.addObject("pageInfo", pageInfo); return modelAndView; } else { return new ModelAndView("admin_books", "error", "No matching books"); } } @RequestMapping("/reader_querybook_do.html") public ModelAndView readerQueryBookDo(String searchWord,@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) { if (bookServiceImpl.matchBook(searchWord)) { PageInfo<Book> pageInfo = bookServiceImpl.queryBook(searchWord,pageNum,pageSize); ModelAndView modelAndView = new ModelAndView("reader_books"); modelAndView.addObject("pageInfo", pageInfo); return modelAndView; } else { return new ModelAndView("reader_books", "error", "No matching books"); } } @RequestMapping("/admin_books.html") public ModelAndView adminBooks(@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) { PageInfo<Book> pageInfo = bookServiceImpl.getAllBooks(pageNum,pageSize); ModelAndView modelAndView = new ModelAndView("admin_books"); modelAndView.addObject("pageInfo", pageInfo); return modelAndView; } @RequestMapping("/book_add.html") public ModelAndView addBook() { ArrayList<Type> types = bookServiceImpl.getAllTypes(); ModelAndView modelAndView = new ModelAndView("admin_book_add"); modelAndView.addObject("types",types); return modelAndView; }
5. User (Reader) service implementation
(1) Implementation of related services
Borrowing related business
@Autowired private LendDaoImpl lendDaoImpl; @Override public boolean returnBook(long bookId, long readerId){ return lendDaoImpl.returnBookOne(bookId, readerId)>0 && lendDaoImpl.returnBookTwo(bookId)>0; } @Override public boolean lendBook(long bookId, long readerId, String name){ return lendDaoImpl.lendBookOne(bookId,readerId,name)>0 && lendDaoImpl.lendBookTwo(bookId)>0; } @Override public PageInfo<Lend> lendList(int pageNum,int pageSize){ //paging PageHelper.startPage(pageNum,pageSize); ArrayList<Lend> list = lendDaoImpl.lendList(); PageInfo pageInfo = new PageInfo(list); return pageInfo; } @Override public PageInfo<Lend> myLendList(long readerId,int pageNum,int pageSize){ //paging PageHelper.startPage(pageNum,pageSize); ArrayList<Lend> list = lendDaoImpl.myLendList(readerId); PageInfo pageInfo = new PageInfo(list); return pageInfo; } @Override public int deleteLend(long serNum) { return lendDaoImpl.deleteLend(serNum); }
Reader related business
@Autowired private ReaderInfoDaoImpl readerInfoDaoImpl; @Override public PageInfo<ReaderInfo> readerInfos(int pageNum,int pageSize) { //paging PageHelper.startPage(pageNum,pageSize); ArrayList<ReaderInfo> list = readerInfoDaoImpl.getAllReaderInfo(); PageInfo pageInfo = new PageInfo(list); return pageInfo; } @Override public boolean deleteReaderInfo(long readerId) { return readerInfoDaoImpl.deleteReaderInfo(readerId) > 0; } @Override public ReaderInfo getReaderInfo(long readerId) { return readerInfoDaoImpl.findReaderInfoByReaderId(readerId); } @Override public boolean editReaderInfo(ReaderInfo readerInfo) { return readerInfoDaoImpl.editReaderInfo(readerInfo) > 0; } @Override public boolean editReaderCard(ReaderInfo readerInfo) { return readerInfoDaoImpl.editReaderCard(readerInfo) > 0; } @Override public long addReaderInfo(ReaderInfo readerInfo) { return readerInfoDaoImpl.addReaderInfo(readerInfo); }
(2) Data operation of related business
Borrow books
@Resource private SqlSessionTemplate sqlSessionTemplate; private final static String NAMESPACE = "com.book.dao.impl.LendDaoImpl."; @Override public int returnBookOne(final long book_id, long reader_id) { Map<String, Object> map = new HashMap<>(); map.put("book_id", book_id); map.put("reader_id", reader_id); return sqlSessionTemplate.update(NAMESPACE + "returnBookOne", map); } @Override public int returnBookTwo(final long book_id) { return sqlSessionTemplate.update(NAMESPACE + "returnBookTwo", book_id); } @Override public int lendBookOne(final long book_id, final long reader_id,final String name) { Map<String, Object> map = new HashMap<>(); map.put("book_id", book_id); map.put("reader_id", reader_id); map.put("name",name); return sqlSessionTemplate.insert(NAMESPACE + "lendBookOne", map); } @Override public int lendBookTwo(final long book_id) { return sqlSessionTemplate.update(NAMESPACE + "lendBookTwo", book_id); } @Override public ArrayList<Lend> lendList() { List<Lend> result = sqlSessionTemplate.selectList(NAMESPACE + "lendList"); return (ArrayList<Lend>) result; } @Override public ArrayList<Lend> myLendList(final long reader_id) { List<Lend> result = sqlSessionTemplate.selectList(NAMESPACE + "myLendList", reader_id); return (ArrayList<Lend>) result; } @Override public int deleteLend(final long ser_num) { return sqlSessionTemplate.delete(NAMESPACE + "deleteLend", ser_num); }
Reader information management
private final static String NAMESPACE = "com.book.dao.impl.ReaderInfoDaoImpl."; @Resource private SqlSessionTemplate sqlSessionTemplate; @Override public ArrayList<ReaderInfo> getAllReaderInfo() { List<ReaderInfo> result = sqlSessionTemplate.selectList(NAMESPACE + "getAllReaderInfo"); return (ArrayList<ReaderInfo>) result; } @Override public ReaderInfo findReaderInfoByReaderId(final long reader_id) { return sqlSessionTemplate.selectOne(NAMESPACE + "findReaderInfoByReaderId", reader_id); } @Override public int deleteReaderInfo(final long reader_id) { return sqlSessionTemplate.delete(NAMESPACE + "deleteReaderInfo", reader_id); } @Override public int editReaderInfo(final ReaderInfo readerInfo) { return sqlSessionTemplate.update(NAMESPACE + "editReaderInfo", readerInfo); } @Override public int editReaderCard(final ReaderInfo readerInfo) { return sqlSessionTemplate.update(NAMESPACE + "editReaderCard", readerInfo); } @Override public final long addReaderInfo(final ReaderInfo readerInfo) { if (sqlSessionTemplate.insert(NAMESPACE + "addReaderInfo", readerInfo) > 0) { return sqlSessionTemplate.selectOne(NAMESPACE + "getReaderId", readerInfo); } else { return -1; } }
(3) mybatis database operation
lend.xml
<update id="returnBookOne"> update lend_list set back_date = sysdate() where book_id = #{book_id} and reader_id = #{reader_id} and back_date is null </update> <update id="returnBookTwo" parameterType="long"> update book_info set number = number + 1 where book_id = #{book_id} </update> <insert id="lendBookOne"> insert into lend_list values (null , #{book_id} , #{reader_id} , sysdate() , null, #{name}) </insert> <update id="lendBookTwo" parameterType="long"> update book_info set number = number - 1 where book_id = #{book_id} </update> <select id="lendList" resultType="com.book.entity.Lend"> select * from lend_list </select> <select id="myLendList" resultType="com.book.entity.Lend" parameterType="long"> select * from lend_list where reader_id = #{reader_id} </select> <delete id="deleteLend" parameterType="long"> delete from lend_list where ser_num = #{ser_num} </delete>
readerInfo.xml
<select id="getAllReaderInfo" resultType="com.book.entity.ReaderInfo"> select * from reader_info </select> <select id="findReaderInfoByReaderId" resultType="com.book.entity.ReaderInfo" parameterType="long"> select * from reader_info where reader_id = #{reader_id} </select> <delete id="deleteReaderInfo" parameterType="long"> delete from reader_info where reader_id = #{reader_id} </delete> <update id="editReaderInfo" parameterType="com.book.entity.ReaderInfo"> update reader_info set name = #{name} , sex = #{sex}, birth = #{birth} ,address = #{address} ,phone = #{phone} where reader_id = #{reader_id} </update> <update id="editReaderCard" parameterType="com.book.entity.ReaderInfo"> update reader_card set username = #{name} where reader_id = #{reader_id} </update> <insert id="addReaderInfo" parameterType="com.book.entity.ReaderInfo"> insert into reader_info values (null, #{name},#{sex},#{birth},#{address},#{phone}) </insert> <select id="getReaderId" resultType="long" parameterType="com.book.entity.ReaderInfo"> select reader_id from reader_info where name = #{name} and sex = #{sex} and birth = #{birth} and address = #{address} and phone = #{phone} </select>
(4) Interaction of related businesses
Interactive operation of borrowing business
@Autowired private BookServiceImpl bookServiceImpl; @RequestMapping("/deletebook.html") public String deleteBook(HttpServletRequest request, RedirectAttributes redirectAttributes) { long bookId = Long.parseLong(request.getParameter("bookId")); if (bookServiceImpl.deleteBook(bookId)) { redirectAttributes.addFlashAttribute("succ", "Books deleted successfully!"); } else { redirectAttributes.addFlashAttribute("error", "Book deletion failed!"); } return "redirect:/admin_books.html"; } @RequestMapping("/lendlist.html") public ModelAndView lendList(HttpServletRequest request,@RequestParam(required = false,defaultValue = "1")int pageNum, @RequestParam(required = false,defaultValue = "10")int pageSize) { ModelAndView modelAndView = new ModelAndView("admin_lend_list"); modelAndView.addObject("pageInfo", lendServiceImpl.lendList(pageNum,pageSize)); return modelAndView; } @RequestMapping("/mylend.html") public ModelAndView myLend(HttpServletRequest request, @RequestParam(required = false,defaultValue = "1")int pageNum, @RequestParam(required = false,defaultValue = "10")int pageSize) { ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard"); ModelAndView modelAndView = new ModelAndView("reader_lend_list"); modelAndView.addObject("pageInfo", lendServiceImpl.myLendList(readerCard.getReaderId(),pageNum,pageSize)); return modelAndView; } @RequestMapping("/deletelend.html") public String deleteLend(HttpServletRequest request, RedirectAttributes redirectAttributes) { long serNum = Long.parseLong(request.getParameter("serNum")); if (lendServiceImpl.deleteLend(serNum) > 0) { redirectAttributes.addFlashAttribute("succ", "Record deleted successfully!"); } else { redirectAttributes.addFlashAttribute("error", "Record deletion failed!"); } return "redirect:/lendlist.html"; } @RequestMapping("/lendbook.html") public String bookLend(HttpServletRequest request, RedirectAttributes redirectAttributes) { long bookId = Long.parseLong(request.getParameter("bookId")); long readerId = ((ReaderCard) request.getSession().getAttribute("readercard")).getReaderId(); String name = request.getParameter("name"); if (lendServiceImpl.lendBook(bookId, readerId, name)) { redirectAttributes.addFlashAttribute("succ", "Book borrowing succeeded!"); } else { redirectAttributes.addFlashAttribute("succ", "Book borrowing succeeded!"); } return "redirect:/reader_books.html"; }
Reader business interaction
@Autowired private ReaderInfoServiceImpl readerInfoServiceImpl; @Autowired private LoginServiceImpl loginServiceImpl; @Autowired private ReaderCardServiceImpl readerCardServiceImpl; private ReaderInfo getReaderInfo(long readerId, String name, String sex, String birth, String address, String phone) { ReaderInfo readerInfo = new ReaderInfo(); Date date = new Date(); try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); date = df.parse(birth); } catch (ParseException e) { e.printStackTrace(); } readerInfo.setAddress(address); readerInfo.setName(name); readerInfo.setReaderId(readerId); readerInfo.setPhone(phone); readerInfo.setSex(sex); readerInfo.setBirth(date); return readerInfo; } @RequestMapping("allreaders.html") public ModelAndView allBooks(@RequestParam(required = false,defaultValue = "1")int pageNum,@RequestParam(required = false,defaultValue = "10")int pageSize) { PageInfo<ReaderInfo> pageInfo = readerInfoServiceImpl.readerInfos(pageNum,pageSize); ModelAndView modelAndView = new ModelAndView("admin_readers"); modelAndView.addObject("pageInfo", pageInfo); return modelAndView; } @RequestMapping("reader_delete.html") public String readerDelete(HttpServletRequest request, RedirectAttributes redirectAttributes) { long readerId = Long.parseLong(request.getParameter("readerId")); if (readerInfoServiceImpl.deleteReaderInfo(readerId) && readerCardServiceImpl.deleteReaderCard(readerId)) { redirectAttributes.addFlashAttribute("succ", "Delete succeeded!"); } else { redirectAttributes.addFlashAttribute("error", "Deletion failed!"); } return "redirect:/allreaders.html"; } @RequestMapping("/reader_info.html") public ModelAndView toReaderInfo(HttpServletRequest request) { ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard"); ReaderInfo readerInfo = readerInfoServiceImpl.getReaderInfo(readerCard.getReaderId()); ModelAndView modelAndView = new ModelAndView("reader_info"); modelAndView.addObject("readerinfo", readerInfo); return modelAndView; } @RequestMapping("reader_edit.html") public ModelAndView readerInfoEdit(HttpServletRequest request) { long readerId = Long.parseLong(request.getParameter("readerId")); ReaderInfo readerInfo = readerInfoServiceImpl.getReaderInfo(readerId); ModelAndView modelAndView = new ModelAndView("admin_reader_edit"); modelAndView.addObject("readerInfo", readerInfo); return modelAndView; } @RequestMapping("reader_edit_do.html") public String readerInfoEditDo(HttpServletRequest request, String name, String sex, String birth, String address, String phone, RedirectAttributes redirectAttributes) { long readerId = Long.parseLong(request.getParameter("readerId")); ReaderInfo readerInfo = getReaderInfo(readerId, name, sex, birth, address, phone); if (readerInfoServiceImpl.editReaderInfo(readerInfo) && readerInfoServiceImpl.editReaderCard(readerInfo)) { redirectAttributes.addFlashAttribute("succ", "Reader information modified successfully!"); } else { redirectAttributes.addFlashAttribute("error", "Reader information modification failed!"); } return "redirect:/allreaders.html"; } @RequestMapping("reader_add.html") public ModelAndView readerInfoAdd() { return new ModelAndView("admin_reader_add"); } @RequestMapping("reader_add_do.html") public String readerInfoAddDo(String name, String sex, String birth, String address, String phone, String password, RedirectAttributes redirectAttributes) { ReaderInfo readerInfo = getReaderInfo(0, name, sex, birth, address, phone); long readerId = readerInfoServiceImpl.addReaderInfo(readerInfo); readerInfo.setReaderId(readerId); if (readerId > 0 && readerCardServiceImpl.addReaderCard(readerInfo, password)) { redirectAttributes.addFlashAttribute("succ", "Reader information added successfully!"); } else { redirectAttributes.addFlashAttribute("succ", "Failed to add reader information!"); } return "redirect:/allreaders.html"; } @RequestMapping("reader_info_edit.html") public ModelAndView readerInfoEditReader(HttpServletRequest request) { ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard"); ReaderInfo readerInfo = readerInfoServiceImpl.getReaderInfo(readerCard.getReaderId()); ModelAndView modelAndView = new ModelAndView("reader_info_edit"); modelAndView.addObject("readerinfo", readerInfo); return modelAndView; } @RequestMapping("reader_edit_do_r.html") public String readerInfoEditDoReader(HttpServletRequest request, String name, String sex, String birth, String address, String phone, RedirectAttributes redirectAttributes) { ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard"); ReaderInfo readerInfo = getReaderInfo(readerCard.getReaderId(), name, sex, birth, address, phone); if (readerInfoServiceImpl.editReaderInfo(readerInfo) && readerInfoServiceImpl.editReaderCard(readerInfo)) { ReaderCard readerCardNew = loginServiceImpl.findReaderCardByReaderId(readerCard.getReaderId()); request.getSession().setAttribute("readercard", readerCardNew); redirectAttributes.addFlashAttribute("succ", "Information modified successfully!"); } else { redirectAttributes.addFlashAttribute("error", "Information modification failed!"); } return "redirect:/reader_info.html"; }