里面整合了比较全的内容,可以说是麻雀虽小五脏俱全,如果看懂了所有的内容可以说是已经非常精通SpringBoot了
一:引言
由于近期看了SpringBoot,一站式开发特别方便,情不自禁用SpringBoot整合了一下Web框架,Mybatis框架和thymeleaf框架写了一个图书管理系统。
其实可以直接用前后端分离来写的,但是我想练练手,用一个小demo把这些内容都整合到一起。
(其实前后端分离我还没学到)
二:项目目录
1.文件目录
2.导入依赖
org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.0 mysql mysql-connector-java org.springframework.boot spring-boot-starter-test org.springframework.boot spring-boot-starter-thymeleaf
3.proterties文件存储数据库连接信息
注意,我这里的url是我的数据库url,数据库名称是db10,不过不用担心,为了避免调试带来的麻烦,我创建数据库的时候直接创建了db10.
spring.datasource.url=jdbc:mysql://localhost:3306/db10?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4.control控制器
import com.example.entry.Books;
import com.example.service.BookService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Controller
public class MainController {
@Resource
BookService bookService;
// 首页
@RequestMapping("/index")
public String index() {
return "/index";
}
// 这里是回显所有书本的逻辑
@RequestMapping("/allBook")
private String getBooksList(Model model) {
List booksList = bookService.bookList("%");
System.out.println(booksList);
model.addAttribute("books",booksList);
return "/allBook";
}
// 这里是添加过后的逻辑
@RequestMapping(value = "addED",method = RequestMethod.POST)
public String addBook(@RequestParam("bookName")String bookName,
@RequestParam("bookCounts")int bookCounts,
@RequestParam("detail")String detail){
bookService.addBook(bookName,bookCounts,detail);
return "redirect:/allBook";
}
// 这里是添加之前的逻辑
@RequestMapping("/adding")
public String index4() {
return "/addBook";
}
// 这里是删除逻辑,删除完了直接重定向
@RequestMapping(value = "delBook",method = RequestMethod.GET)
public String addBook(@RequestParam("bookID") int bookID){
bookService.Del(bookID);
return "redirect:allBook";
}
// 修改前
@RequestMapping("/update")
public String update(@RequestParam("bookID") int bookID,Model model){
Books book =bookService.findByID(bookID);
model.addAttribute("book",book);
return "updateBook";
}
// 修改后重定向
@RequestMapping("/updateBook2")
public String updateBook2(@ModelAttribute(value = "demo") Books demo, Model model){
// 这里是一个测试,测试提交完信息的内容是否会改变
System.out.println(demo.toString()+"这里是接收到的信息");
bookService.update(demo.getBookID(),demo.getBookName(),demo.getBookCounts(),demo.getDetail());
return "redirect:allBook";
}
}
5.Books实体类
import lombok.Data;
@Data
public class Books {
public int bookID;
public String bookName;
public int bookCounts;
public String detail;
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 int getBookCounts() {
return bookCounts;
}
public void setBookCounts(int bookCounts) {
this.bookCounts = bookCounts;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
@Override
public String toString() {
return "Books{" +
"bookID=" + bookID +
", bookName='" + bookName + ''' +
", bookCounts=" + bookCounts +
", detail='" + detail + ''' +
'}';
}
public Books(int bookID, String bookName, int bookCounts, String detail) {
this.bookID = bookID;
this.bookName = bookName;
this.bookCounts = bookCounts;
this.detail = detail;
}
}
6.mapper接口
import com.example.entry.Books;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface MainMapper {
// 查看所有数据,这里用到了模糊查询
@Select("select *from books where bookName like#{name}")
List bookList(String name);
// 查找书籍,用于修改书籍时候的数据回显
@Select("select * from books where bookID=#{bookID}")
Books findByID(@Param("bookID") int bookID);
// 删除书籍
@Delete("delete from books where bookID=#{bookID}")
void Del(@Param("bookID") int bookID);
// 增加书籍
@Insert("insert into books (bookName,bookCounts,detail) values ( #{bookName} , #{bookCounts} , #{detail} )")
void addBook(@Param("bookName") String bookName, @Param("bookCounts") int bookCounts, @Param("detail") String Detail);
// 修改书籍
@Update("update books set bookName=#{bookName} , bookCounts=#{bookCounts} , detail=#{detail} where bookID=#{bookID}")
void update(@Param("bookID")int bookID,@Param("bookName") String bookName, @Param("bookCounts") int bookCounts, @Param("detail") String Detail);
}
7.service操作
import com.example.entry.Books;
import com.example.mapper.MainMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class BookService {
// 数据源
@Resource
MainMapper mapper;
// 会先数据,显示所有书籍的列表
public List bookList(String name) {
return mapper.bookList("%");
}
// 删除书籍操作
public void Del(int bookID) {
mapper.Del(bookID);
}
// 添加书籍操作
public void addBook(String name, int count, String detail) {
mapper.addBook(name, count, detail);
}
// 修改书籍操作,这里由于是涉及到了修改,所以自然要回显数据
public Books findByID(int bookID) {
return mapper.findByID(bookID);
}
// 更新操作
public void update(int id, String name, int counts, String detail) {
mapper.update(id, name, counts, detail);
}
}
8.数据库
CREATE DATAbase `db10`; USE `db10`; DROP TABLE IF EXISTS `books`; CREATE TABLE `books` ( `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id', `bookName` VARCHAR(100) NOT NULL COMMENT '书名', `bookCounts` INT(11) NOT NULL COMMENT '数量', `detail` VARCHAR(200) NOT NULL COMMENT '描述', KEY `bookID` (`bookID`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES (1,'Java',1,'从入门到放弃'), (2,'MySQL',10,'从删库到跑路'), (3,'Linux',5,'从进门到进牢');
9.前端页面
index首页
首页
点击进入列表页
addBook添加图书页面
新增书籍
新增书籍
allBook显示所有图书
书籍列表
updateBook更新图书信息页面
修改信息
修改信息



