分析实体
图书,单词为
Book实体的名称就定义下来了 |— 属性: 图书编号 bookId(用于确定的唯一性); 图书名称 bookName; 图书作者 author ; 图书单价 price ; 类型是 double 出版社 publish ; 图书封面 bookPic ; 库存 count 类型是 int 类目 category{ 类型: Category}
1, 定义属性变量
2,使用快捷键Alt+Insert 生成getter和setter方法
3, 使用快捷键Alt+Insert 生成toString方法,便于打印查看具体数据
4,使用快捷键Alt+Insert 生成构造方法
4.1, 有参数的构造方法
4.2, 无参数的构造方法 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;
}
}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; 【因为查询的是一个类目,所有就是对象存储。】
代码如下:
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实现类具体操作与上篇雷同,不再截图展示具体过程。
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);
}
}Dao层有 接口和实现类
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);
}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);
}
}
}