书城项目
页面样式
后台管理
图书管理
添加图书
修改图书
第五阶段
1、MVC概念
MVC全称:Model模型、View视图、Controller 控制器。
MVC最早出现在JavaEE三层中的Web层,它可以有效的指导Web层的代码如何有效分离,单独工作。
View视图:只负责数据和界面的显示,不接受任何与显示数据无关的代码,便于程序员和美工的分工合作一一JSP/HTML。
Controller控制器:只负责接收请求,调用业务层的代码处理请求,然后派发页面,是一个“调度者”的角色-一Servlet。
转到某个页面。或者是重定向到某个页面。
Model模型:将与业务逻辑相关的数据封装为具体的JavaBean类,其中不掺杂任何与数据处理相关的代码一一JavaBean/domain/entity/pojo。
MVC是一种思想
MVC的理念是将软件代码拆分成为组件,单独开发,组合使用(目的还是为了降低耦合度) 。
MVC的作用还是为了降低耦合。让代码合理分层。方便后期升级和维护。
书城第五阶段
1、图书模块
1.1、编写图书模块的数据库表
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,'怎样拐跑别人的媳妇','龙伍', 68,99999,52 ,'static/img/default.jpg'); insert into t_book(id ,name,author,price,sales,stock,img_path)values(null,'C++编程思想','刚哥' , 68,99989,52,'static/img/default.jpg');
1.2、编写图书模块的JavaBean
Book pojo包下
package com.atguigu.pojo; import java.math.BigDecimal; public class Book { private Integer id; private String name; private String author; private BigDecimal price; private Integer sales; private Integer stock; private String imgPath="static/img/default.jpg"; public Book() { } public Book(Integer id, String name, String author, BigDecimal price, Integer sales, Integer stock, String imgPath) { this.id = id; this.name = name; this.author = author; this.price = price; this.sales = sales; this.stock = stock; //要求给定的图书封面图片路径不能为空 if (imgPath!=null&& !"".equals(imgPath)){ this.imgPath = imgPath; } } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public BigDecimal getPrice() { return price; } public void setPrice(BigDecimal price) { this.price = price; } public Integer getSales() { return sales; } public void setSales(Integer sales) { this.sales = sales; } public Integer getStock() { return stock; } public void setStock(Integer stock) { this.stock = stock; } public String getImgPath() { return imgPath; } public void setImgPath(String imgPath) { //要求给定的图书封面图片路径不能为空 if (imgPath!=null&& !"".equals(imgPath)){ this.imgPath = imgPath; } } @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", sales=" + sales + ", stock=" + stock + ", imgPath='" + imgPath + '\'' + '}'; } }
1.3、编写图书模块的Dao和测试Dao
BookDao dao包下
package com.atguigu.dao; import com.atguigu.pojo.Book; import java.util.List; public interface BookDao { //Ctrl+Shift+T public int addBook(Book book); public int deleteBook(Integer id ); public int updateBook(Book book); public Book queryBookById(Integer id); public List<Book> queryBooks(); }
BookDaoImpl dao/impl包下
package com.atguigu.dao.impl; import com.atguigu.dao.BookDao; import com.atguigu.pojo.Book; import java.util.List; 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 deleteBook(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 test包下
package com.atguigu.test; import com.atguigu.dao.BookDao; import com.atguigu.dao.impl.BookDaoImpl; import com.atguigu.pojo.Book; import org.junit.Test; import java.math.BigDecimal; public class BookDaoTest { private BookDao bookDao=new BookDaoImpl(); @Test public void addBook() { bookDao.addBook(new Book(null,"我为什么这么帅!","191125",new BigDecimal(9999),1100000,0,null)); } //最后测试 @Test public void deleteBook() { bookDao.deleteBook(4); } @Test public void updateBook() { bookDao.updateBook(new Book(4,"我们都很帅!","191125",new BigDecimal(9999),1100000,0,null)); } @Test public void queryBookById() { System.out.println(bookDao.queryBookById(4)); } @Test public void queryBooks() { for (Book queryBook: bookDao.queryBooks()) { System.out.println(queryBook); } } }
1.4、编写图书模块的Service和测试Service
BookService service包下
package com.atguigu.service; import com.atguigu.pojo.Book; import java.util.List; public interface BookService { //Ctrl+Shift+T 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 service/impl下
package com.atguigu.service.impl; import com.atguigu.dao.BookDao; import com.atguigu.dao.impl.BookDaoImpl; import com.atguigu.pojo.Book; import com.atguigu.service.BookService; import java.util.List; 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.deleteBook(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 test包下
package com.atguigu.test; import com.atguigu.pojo.Book; import com.atguigu.service.BookService; import com.atguigu.service.impl.BookServiceImpl; import org.junit.Test; import java.math.BigDecimal; import static org.junit.Assert.*; public class BookServiceTest { private BookService bookService=new BookServiceImpl(); @Test public void addBook() { bookService.addBook(new Book(null,"天下我有!","1125",new BigDecimal(999),10000,0,null)); } //最后测试 @Test public void deleteBookById() { bookService.deleteBookById(5); } @Test public void updateBook() { bookService.updateBook(new Book(5,"天下都有!","1125",new BigDecimal(999),10,9999,null)); } @Test public void queryBookById() { System.out.println(bookService.queryBookById(5)); } @Test public void queryBooks() { for (Book queryBook:bookService.queryBooks()) { System.out.println(queryBook); } } }