首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >友佳书屋实训项目(二)

友佳书屋实训项目(二)

作者头像
杨校
发布于 2021-10-13 16:10:54
发布于 2021-10-13 16:10:54
5240
举报
文章被收录于专栏:Java技术分享圈Java技术分享圈

二、 图书

分析实体

图书,单词为 Book 实体的名称就定义下来了 |— 属性: 图书编号 bookId(用于确定的唯一性); 图书名称 bookName; 图书作者 author ; 图书单价 price ; 类型是 double 出版社 publish ; 图书封面 bookPic ; 库存 count 类型是 int 类目 category{ 类型: Category}

1.1 实体类:
代码语言:javascript
复制
   1, 定义属性变量
   2,使用快捷键Alt+Insert 生成getter和setter方法
   3, 使用快捷键Alt+Insert 生成toString方法,便于打印查看具体数据
   4,使用快捷键Alt+Insert  生成构造方法
    4.1, 有参数的构造方法
    4.2, 无参数的构造方法
代码语言:javascript
复制
 package cn.javabs.entity;

public class Book {

    private int bookId;
    private String bookName;
    private String publish;// 出版社
    private double price; //  为什么不用float类型,因为默认就是double 、其次  使用float类型定义,  小数后需要添加f
                                                                        // 如float  f1 = 6.5f
    private String author;
    private int count ;
    private String bookPic ;
    private Category category;

    public Book(int bookId, String bookName, String publish, double price, String author, int count, String bookPic, Category category) {
        this.bookId = bookId;
        this.bookName = bookName;
        this.publish = publish;
        this.price = price;
        this.author = author;
        this.count = count;
        this.bookPic = bookPic;
        this.category = category;
    }

    public Book(String bookName, String publish, double price, String author, int count, String bookPic, Category category) {
        this.bookName = bookName;
        this.publish = publish;
        this.price = price;
        this.author = author;
        this.count = count;
        this.bookPic = bookPic;
        this.category = category;
    }

    public Book() {
        super();
    }

    @Override
    public String toString() {
        return "Book{" +
                "bookId=" + bookId +
                ", bookName='" + bookName + '\'' +
                ", publish='" + publish + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                ", count=" + count +
                ", bookPic='" + bookPic + '\'' +
                ", category=" + category +
                '}';
    }

    public int getBookId() {
        return bookId;
    }

    public void setBookId(int bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getPublish() {
        return publish;
    }

    public void setPublish(String publish) {
        this.publish = publish;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getBookPic() {
        return bookPic;
    }

    public void setBookPic(String bookPic) {
        this.bookPic = bookPic;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }
}

1.2 编写Service层

Service层有 接口和实现类 (1)先去编写接口,接口的命名规范为 [实体类的名称+ Service],本接口为BookService,实现类为BookServiceImpl (2)考虑该接口内哪些功能,功能对应的是方法。 功能如下: ①增加图书 ②删除图书 ③修改图书 ④查询所有图书 ⑤根据类目查询图书 ⑥根据图书名称查询图书详细信息 ⑦根据图书编号查询图书 对应的是七个方法: 增加图书方法, 参数列表是:Book book; 返回值类型为int 删除图书方法, 参数列表是:int bookId; 返回值类型为int 修改图书方法, 参数列表是Book book; 返回值类型为int 查询所有图书方法, 无参数 返回值类型为List<Book>; 【因为查询的所有类目,不再是单一的一个类目,需要有容器存储所有类目对象,该容器合适的是集合,便于查询的是ArrayList集合。{ArrayList特性是 查询快、增删慢 | LinkedList特性是 查询慢、增删快}】 根据类目查询图书, 参数列表是Category category; 返回值类型为List<Book>; 根据图书名称查询图书, 参数列表是String bookName; 返回值类型为List<Book>; 根据图书编号查询图书,参数列表是:int bookId; 返回值类型为Book; 【因为查询的是一个类目,所有就是对象存储。】

代码如下:

代码语言:javascript
复制
package cn.javabs.service;

import cn.javabs.entity.Book;
import cn.javabs.entity.Category;

import java.util.List;

public interface BookService {
    int addBook(Book book);
    int delBook(int bookId);
    int editBook(Book book);


    List<Book> findAllBooks();

    List<Book> findBookByCategory(Category category);

    List<Book> findBookByBookName(String bookName);

    Book findBookById();

}

BookServiceImpl实现类具体操作与上篇雷同,不再截图展示具体过程。

代码语言:javascript
复制
package cn.javabs.service.impl;

import cn.javabs.dao.BookDao;
import cn.javabs.dao.impl.BookDaoImpl;
import cn.javabs.entity.Book;
import cn.javabs.entity.Category;
import cn.javabs.service.BookService;

import java.util.List;

public class BookServiceImpl implements BookService {

    BookDao bookDao =  new BookDaoImpl();
    
    @Override
    public int addBook(Book book) {
        return bookDao.add(book);
    }

    @Override
    public int delBook(int bookId) {
        return bookDao.del(bookId);
    }

    @Override
    public int editBook(Book book) {
        return bookDao.edit(book);
    }

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

    @Override
    public List<Book> findBookByCategory(Category category) {
        return bookDao.getBookByCategory(category);
    }

    @Override
    public List<Book> findBookByBookName(String bookName) {
        return bookDao.getBookByBookName(bookName);
    }

    @Override
    public Book findBookById(int bookId) {
        return bookDao.getBookById(bookId);
    }
}
1.2 编写Dao层

Dao层有 接口和实现类


代码语言:javascript
复制
package cn.javabs.dao;

import cn.javabs.entity.Book;
import cn.javabs.entity.Category;

import java.util.List;

public interface BookDao {
    /**
     * 添加图书
     * @param book
     * @return
     */
    int add(Book book);

    /**
     * 删除图书
     * @param bookId
     * @return
     */
    int del(int bookId);

    /**
     * 修改图书
     * @param book
     * @return
     */
    int edit(Book book);

    /**
     * 查询所有图书
     * @return
     */
    List<Book> getAllBooks();

    /**
     * 根据分类查询图书
     * @param category
     * @return
     */
    List<Book> getBookByCategory(Category category);

    /**
     * 根据图书名称查询图书
     * @param bookName
     * @return
     */
    List<Book> getBookByBookName(String bookName);

    /**
     * 根据图书编号查询图书
     * @param bookId
     * @return
     */
    Book getBookById(int bookId);
}

代码语言:javascript
复制
package cn.javabs.dao.impl;

import cn.javabs.dao.BookDao;
import cn.javabs.entity.Book;
import cn.javabs.entity.Category;
import cn.javabs.util.DruidUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

public class BookDaoImpl implements BookDao {

    QueryRunner qr = new QueryRunner(DruidUtil.getDataSource());

    /**
     * 添加图书
     *
     * @param book
     * @return
     */
    @Override
    public int add(Book book) {
        try {
            return qr.update("insert into book(bookName,publish,price,author,count,bookPic,categoryId)",
            book.getBookName(),book.getPublish(),book.getPrice(),book.getAuthor(),book.getCount(),book.getBookPic(),book.getCategory().getCategoryId());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 删除图书
     *
     * @param bookId
     * @return
     */
    @Override
    public int del(int bookId) {
        try {
            return qr.update("delete from book where bookId = ?",bookId);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 修改图书
     *
     * @param book
     * @return
     */
    @Override
    public int edit(Book book) {
        try {
            return qr.update("update book set bookName = ?,publish =?,price =? ,author =?,count = ?,bookPic = ?,categoryId =? where  bookId = ? ",
                    book.getBookName(),
                    book.getPublish(),
                    book.getPrice(),
                    book.getAuthor(),
                    book.getCount(),
                    book.getBookPic(),
                    book.getCategory().getCategoryId(),
                    book.getBookId()
            );
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 查询所有图书
     *
     * @return
     */
    @Override
    public List<Book> getAllBooks() {
        try {
            return qr.query("select * from book",new BeanListHandler<Book>(Book.class));
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 根据分类查询图书
     *
     * @param category
     * @return
     */
    @Override
    public List<Book> getBookByCategory(Category category) {
        try {
            return qr.query("select * from book,category where book.categoryId = category.categoryId and categoryName = ? ",
                    new BeanListHandler<Book>(Book.class),category.getCategoryName());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 根据图书名称查询图书
     *
     * @param bookName
     * @return
     */
    @Override
    public List<Book> getBookByBookName(String bookName) {
        try {
            return qr.query("select * from book where  bookName = ?",new BeanListHandler<Book>(Book.class),bookName);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 根据图书编号查询图书
     *
     * @param bookId
     * @return
     */
    @Override
    public Book getBookById(int bookId) {
        try {
            return qr.query("select * from book where  bookId = ?",new BeanHandler<Book>(Book.class),bookId);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 二、 图书
    • 1.1 实体类:
    • 1.2 编写Service层
    • 1.2 编写Dao层
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档