书城项目:第4阶段

JAVA学习网 2020-11-07 07:54:04

书城项目第五阶段-图书模块

图书管理模块要做的事情如下:

 

 

========================================================================================================================

一、MVC 概念

  MVC 全称:Model 模型、 View 视图、 Controller 控制器。
  MVC 最早出现在 JavaEE 三层中的 Web 层,它可以有效的指导 Web 层的代码如何有效分离,单独工作。

  View 视图:只负责数据和界面的显示,不接受任何与显示数据无关的代码,便于程序员和美工的分工合作——JSP/HTML。

  Controller 控制器:只负责接收请求,调用业务层的代码处理请求,然后派发页面,是一个“调度者”的角色——Servlet。转到某个页面。或者是重定向到某个页面。

  Model 模型:将与业务逻辑相关的数据封装为具体的 JavaBean 类,其中不掺杂任何与数据处理相关的代码——JavaBean/domain/entity/pojo

  

MVC 是一种思想
  MVC 的理念是将软件代码拆分成为组件,单独开发,组合使用(目的还是为了降低耦合度)。

 

 MVC 的作用还是为了降低耦合。让代码合理分层。方便后期升级和维护。

 

==========================================================================================================

 

二、图书模块

2.1 编写图书模块的数据库表

  根据图书的信息决定创建数据库表所需要的字段:

 

   创建数据库表t_book以及添加数据:

CREATE TABLE t_book (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR (100),
  `price` DECIMAL (11, 2),
  `author` VARCHAR (100),
  `sales` INT,
  `stock` INT,
  `img_path` VARCHAR (200)
) ;

## 插入初始化测试数据 
INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'java 从入门到放弃',
    '国哥',
    80,
    9999,
    9,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '数据结构与算法',
    '严敏君',
    78.5,
    6,
    13,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '怎样拐跑别人的媳妇',
    '龙伍',
    68,
    99999,
    52,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '木虚肉盖饭',
    '小胖',
    16,
    1000,
    50,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'C++编程思想',
    '刚哥',
    45.5,
    14,
    95,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '蛋炒饭',
    '周星星',
    9.9,
    12,
    53,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '赌神',
    '龙伍',
    66.5,
    125,
    535,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'Java 编程思想',
    '阳哥',
    99.5,
    47,
    36,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'JavaScript 从入门到精通',
    '婷姐',
    9.9,
    85,
    95,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'cocos2d-x 游戏编程入门',
    '国哥',
    49,
    52,
    62,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'C 语言程序设计',
    '谭浩强',
    28,
    52,
    74,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'Lua 语言程序设计',
    '雷丰阳',
    51.5,
    48,
    82,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '西游记',
    '罗贯中',
    12,
    19,
    9999,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '水浒传',
    '华仔',
    33.05,
    22,
    88,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '操作系统原理',
    '刘优',
    133.05,
    122,
    188,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '数据结构 java 版',
    '封大神',
    173.15,
    21,
    81,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'UNIX 高级环境编程',
    '乐天',
    99.15,
    210,
    810,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    'javaScript 高级编程',
    '国哥',
    69.15,
    210,
    810,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '大话设计模式',
    '国哥',
    89.15,
    20,
    10,
    'static/img/default.jpg'
  ) ;

INSERT INTO t_book (
  `id`,
  `name`,
  `author`,
  `price`,
  `sales`,
  `stock`,
  `img_path`
) 
VALUES
  (
    NULL,
    '人月神话',
    '刚哥',
    88.15,
    20,
    80,
    'static/img/default.jpg'
  ) ;

## 查看表内容 
SELECT 
  id,
  NAME,
  author,
  price,
  sales,
  stock,
  img_path 
FROM
  t_book ;

  效果如下:

 

 

2.2 编写图书模块的JavaBean

  Book.java类:

 

   注意:对于图片的路径,我们要求不能为空。

 

 

 

 

2.3 编写图书模块的Dao和测试Dao

BookDao接口:

public interface BookDao {

    /**
     * 添加一本书
     * @param book
     * @return
     */
    public int addBook(Book book);

    /**
     * 通过id删除一本书
     * @param id
     * @return
     */
    public int deleteBookById(Integer id);

    /**
     * 更新某一本书
     * @param book
     * @return
     */
    public int updateBook(Book book);

    /**
     * 通过id查询某一本书
     * @param id
     * @return
     */
    public Book queryBookById(Integer id);

    /**
     * 查询说有的图书
     * @return
     */
    public List<Book> queryBooks();
}

接口实现类:BookDaoImpl.java:

public class BookDaoImpl extends BaseDao implements BookDao {

    @Override
    public int addBook(Book book) {
        String sql = "insert into t_book(`name`,`author`,`price`,`sales`,`stock`,`img_path`) values(?,?,?,?,?,?)";
        return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath());
    }

    @Override
    public int deleteBookById(Integer id) {
        String sql = "delete from t_book where id = ?";
        return update(sql,id);
    }

    @Override
    public int updateBook(Book book) {
        String sql = "update t_book set `name`=?,`author`=?,`price`=?,`sales`=?,`stock`=?,`img_path`=? where id = ?";
        return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath(),book.getId());
    }

    @Override
    public Book queryBookById(Integer id) {
        String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` imgPath from t_book where id = ?";
        return queryForOne(Book.class,sql,id);
    }

    @Override
    public List<Book> queryBooks() {
        String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` imgPath from t_book";
        return queryForList(Book.class,sql);
    }
}

测试BookDaoTest:

public class BookDaoTest {

    private BookDao bookDao = new BookDaoImpl();

    @Test
    public void addBook() {
        bookDao.addBook(new Book(null,"三国杀","老郭",new BigDecimal(43434),1188888,0,null));
    }

    @Test
    public void deleteBookById() {
        bookDao.deleteBookById(21);
    }

    @Test
    public void updateBook() {
        bookDao.updateBook(new Book(21,"老郭说事","老郭",new BigDecimal(9999),1188888,0,null));
    }

    @Test
    public void queryBookById() {
        System.out.println(bookDao.queryBookById(21));
    }

    @Test
    public void queryBooks() {
        for (Book queryBook : bookDao.queryBooks()) {
            System.out.println(queryBook);
        }
    }
}

 

2.4 编写图书模块的Service和测试Service

BookService接口:

public interface BookService {

    public void addBook(Book book);

    public void deleteBookById(Integer id);

    public void updateBook(Book book);

    public Book queryBookById(Integer id);

    public List<Book> queryBooks();
}

BookServiceImpl实现类:

public class BookServiceImpl implements BookService {
    private BookDao bookDao = new BookDaoImpl();


    @Override
    public void addBook(Book book) {
        bookDao.addBook(book);
    }

    @Override
    public void deleteBookById(Integer id) {
        bookDao.deleteBookById(id);
    }

    @Override
    public void updateBook(Book book) {
        bookDao.updateBook(book);
    }

    @Override
    public Book queryBookById(Integer id) {
        return bookDao.queryBookById(id);
    }

    @Override
    public List<Book> queryBooks() {
        return bookDao.queryBooks();
    }
}

BookServiceTest测试:

public class BookServiceTest {

    private BookService bookService = new BookServiceImpl();

    @Test
    public void addBook() {
        bookService.addBook(new Book(null,"西游记","4343",new BigDecimal(4444),4343433,7,null));
    }

    @Test
    public void deleteBookById() {
        bookService.deleteBookById(22);
    }

    @Test
    public void updateBook() {
        bookService.updateBook(new Book(22,"水浒传","444",new BigDecimal(4444),22,74545,null));
    }

    @Test
    public void queryBookById() {
        System.out.println(bookService.queryBookById(22));
    }

    @Test
    public void queryBooks() {
        for (Book queryBook : bookService.queryBooks()) {
            System.out.println(queryBook);
        }
    }
}

 

2.5 编写图书模块的Web 层,和页面联调测试

 

阅读(2560) 评论(0)