基于SpringMVC的图书管理系统

       这是本人经过Spring框架的学习,根据其他人项目的参考与改进,由此实现了一个较为基本的图书管理系统,也算是自己的一个学习经历吧,好了废话不多说,下面进入正题。



一、项目概述

功能性需求描述

图书(馆)管理系统是典型的信息管理系统,其开发主要包括以下部分:后台数据库的建立、维护,前端应用程序的开发。
对于前者,要建立起数据一致性和完整性强、数据安全性较好的数据库。而对于后者来说,需要的是应用程序功能完备,易使用等特点。

设计概述

1、界面设计简洁,友好(易于人机交互)
2、信息分类清晰,准确(全部图书,图书借阅情况,用户信息情况)
3、提高较好的查询能力(支持模糊查询)
4、支持图书馆工作人员对图书借阅、归还等基本的功能

实现功能

1、管理员对图书进行管理
2、管理员对借阅者(读者)信息的管理
3、管理员对借阅者借阅书本的归还管理
4、管理员登入管理
5、用户借阅查询,个人信息查询,借阅信息查询等
6、管理员/用户的密码更改

功能展示

登录

登陆界面
在这里插入图片描述

管理员身份操作

以管理员身份登录后的首页,在这里可以进行图书的相关操作
在这里插入图片描述
管理员对读者进行管理
在这里插入图片描述
管理员查看所有用户书目借还记录
在这里插入图片描述

用户(读者)身份操作

以用户(读者)身份登陆后的首页,在这里可以进行图书的相关操作
在这里插入图片描述
用户(读者)修改个人账号信息
在这里插入图片描述
用户(读者)查看个人的借还记录
在这里插入图片描述

用户\管理员密码修改

在这里插入图片描述


二、系统详细设计

1、大框架的构建

要写好一个项目,首先最重要的就是构建项目的框架。有了框架,写一个项目就不会手忙脚乱,就会变得有计划,有规律,效率才能提高。
根据SpringMVC的三层架构,我们可以将项目分为这三大部分:

  • Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。
  • View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
  • Controller(控制器)是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

在此三大模型之上,可以再细分:

  • dao层:这一层是数据持久层,正所谓数据持久化,就要和数据库打交道,所以这一层,需要做的便是有关于数据库的操作,例如图书的增删改查之类的。
  • controller层:这一层是控制层,控制前端界面-后台的数据交互与逻辑操作,例如从页面读取数据,发送数据之类的操作。(具体的业务)
  • entity层:这一层便是实体层,放置一个个实体,及其相应的set、get方法。如果想要对数据库进行一些操作(比如说读取)的话,就要先写entity层。
  • service层:这一层是服务层,负责模块间的数据交互与逻辑操作(模块间的业务)

做好大框架的构造后,下面就可以进行项目的准备工作了!


2、项目前期的准备工作

项目的前期准备工作有:

相关技术名称
前端jsp、css、html、JQuery、BootStrap
后端SpringMVC、Mybatis
数据库Mysql
开发环境IDEA

预期实现的功能有:

角色功能
普通用户(借阅者)图书查询(查看全部图书),个人信息(查看或修改个人信息),借还情况,密码修改
管理员图书管理(查看全部图书,增加图书),读者管理(查看全部读者,增加读者),借还管理,修改密码
未登录人员登录系统,进入管理员或者普通用户界面

项目文件框架如下:

  1. book:里面有controller,dao,entity,service
  2. resources:里面放xml等配置文件
  3. webapp:里面放网页有关的东西,static(里面放静态加载的文件,css,images,js),WEB-INF(jsp,web.xml文件等)
  4. pom.xml文件:通过maven远程仓库,引入相关依赖包
  5. mybatis映射文件:通过mybatis映射找到相应的sql语句

项目结构如图所示:
项目结构
项目前期的准备工作基本上就做完了,下面进行项目中各逻辑方法的实现


三、各个功能的详细实现

此篇章较多,各位客官可以慢慢看,也可以选择最喜欢的部分看,话不多说,开始项目!

1、创建spring配置文件

由于项目基于Spring框架,需要用到spring配置文件来进行bean类的注入

<!-- 扫描类包,将标注Spring注解的类自动转化为Bean,同时完成Bean的注入  -->
        <context:component-scan base-package="com.book.dao"/>
        <context:component-scan base-package="com.book.service"/>

    <!--  定义一个数据库连接池的数据源 -->
    <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&amp;characterEncoding=UTF8"
            p:username="root"
          p:password="123456"/>
    <!-- JDBC模板Bean -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
          p:dataSource-ref="dataSource"/>

2、配置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适配器 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!-- mybatis ORM框架 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!--jdbc连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.18</version>
        </dependency>
        <!--分页-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>

3、实现登录业务

先创建管理员实体类Admin和普通借阅用户实体类ReadCard
实现getter和setter方法

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;
    }

ReadCard的setter与getter此处省略,之后的也一样,只写对应的实体属性

	private long reader_id;
    private String username;
    private String password;

开始写Dao数据访问层接口和实现类:
接口:

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);
}

实现类:以AdminDao接口AdminDaoImpl为例

@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);
    }

}

开始写Service服务层接口和实现类:
LoginService定义方法:

	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);

对应的实现类写逻辑方法
注入数据交互,使得通过数据交互层对数据库进行访问,实现登录功能

@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、管理员业务实现

(1)相关业务的实现

与登陆有关的业务

@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);
    }

与图书相关的业务

@Autowired
    private BookDaoImpl bookDaoImpl;

    @Override
    public PageInfo<Book> queryBook(String searchWord,int pageNum,int pageSize) {
        //分页
        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) {
        //分页
        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();
    }

    //通过book_id找对应类型  进而找出book_id 对应的 类号和分类名
    @Override
    public Type getTypesById(Long bookId) {
        return bookDaoImpl.getTypesById(bookId);
    }

(2)相关业务的数据操作

管理员登陆

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);
    }

图书管理

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数据库操作

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)相关业务的交互操作

登录业务的交互操作

//负责处理loginCheck.html请求
    //请求参数会根据参数名称默认契约自动绑定到相应方法的入参中
    @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", "管理员登陆成功!");
        } else if (isReader) {
            ReaderCard readerCard = loginServiceImpl.findReaderCardByReaderId(id);
            request.getSession().setAttribute("readercard", readerCard);
            res.put("stateCode", "2");
            res.put("msg", "读者登陆成功!");
        } else {
            res.put("stateCode", "0");
            res.put("msg", "账号或密码错误!");
        }
        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");
    }

图书业务的交互操作

@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", "没有匹配的图书");
        }
    }

    @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", "没有匹配的图书");
        }
    }

    @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、用户(读者)业务实现

(1)相关业务的实现

与借阅有关的业务

@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){
        //分页
        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){
        //分页
        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);
    }

与读者有关的业务

@Autowired
    private ReaderInfoDaoImpl readerInfoDaoImpl;

    @Override
    public PageInfo<ReaderInfo> readerInfos(int pageNum,int pageSize) {
        //分页
        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)相关业务的数据操作

借阅图书

@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);
    }

读者信息管理

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数据库操作

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)相关业务的交互操作

借阅业务的交互操作

@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", "图书删除成功!");
        } else {
            redirectAttributes.addFlashAttribute("error", "图书删除失败!");
        }
        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", "记录删除成功!");
        } else {
            redirectAttributes.addFlashAttribute("error", "记录删除失败!");
        }
        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", "图书借阅成功!");
        } else {
            redirectAttributes.addFlashAttribute("succ", "图书借阅成功!");
        }
        return "redirect:/reader_books.html";
    }

读者业务的交互操作

@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", "删除成功!");
        } else {
            redirectAttributes.addFlashAttribute("error", "删除失败!");
        }
        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", "读者信息修改成功!");
        } else {
            redirectAttributes.addFlashAttribute("error", "读者信息修改失败!");
        }
        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", "添加读者信息成功!");
        } else {
            redirectAttributes.addFlashAttribute("succ", "添加读者信息失败!");
        }
        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", "信息修改成功!");
        } else {
            redirectAttributes.addFlashAttribute("error", "信息修改失败!");
        }
        return "redirect:/reader_info.html";
    }
  • 15
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值