SSMP图书管理系统
1. 项目结构
2. 页面展示
3. 使用技术
SpringBoot + MybatisPlus + SqlServer
4. 数据准备
create table tbl_book(
id int primary key identity(1,1),
type varchar(20) COLLATE Latin1_General_100_BIN2_UTF8 NULL,
name varchar(50) COLLATE Latin1_General_100_BIN2_UTF8 NULL,
description varchar(255) COLLATE Latin1_General_100_BIN2_UTF8 NULL
)
insert into tbl_book(type,name,description) values('计算机理论','spring实战第五版','Spring入门经典教程')
insert into tbl_book(type,name,description) values('计算机理论','Java编程思想','Java学习必读经典')
insert into tbl_book(type,name,description) values('计算机理论','深入理解java虚拟机','5个维度全面剖析JVM')
insert into tbl_book(type,name,description) values('计算机理论','Spring 5设计模式','深入spring源码剖析Spring源码中蕴含的10大设计模式')
insert into tbl_book(type,name,description) values('计算机理论','spring实战第五版','Spring入门经典教程')
5. pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_08_ssmp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_08_ssmp</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<!--导入druid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!--导入sqlserver数据驱动-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.1.0.jre8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.0</version>
</plugin>
<!--添加配置跳过测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
6. yml配置
server:
port: 80
#推荐使用
spring:
datasource:
url: jdbc:sqlserver://服务器名:1433;database=db_vas;useUnicode=true;characterEncoding=utf8;characterSetResults=utf8
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: 用户名
password: 密码
type: com.alibaba.druid.pool.DruidDataSource
#把sql语句打印在控制台
logging:
level:
com:
example:
mapper : debug
#设置mybatis-plus相关的配置
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
7. Dao层
package com.itheima.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itheima.domain.Book;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BookDao extends BaseMapper<Book> {
}
8. Book实体类
//lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
private Integer id;
private String type;
private String name;
private String description;
}
9. Service层
BookServiceImpl
package com.itheima.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.dao.BookDao;
import com.itheima.domain.Book;
import com.itheima.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookServiceImpl implements BookService {
@Autowired
BookDao bookDao;
@Override
public Boolean save(Book book) {
return bookDao.insert(book)>0;
}
@Override
public Boolean update(Book book) {
return bookDao.updateById(book)>0;
}
@Override
public Boolean delete(Integer id) {
return bookDao.deleteById(id)>0;
}
@Override
public Book getById(Integer id) {
return bookDao.selectById(id);
}
@Override
public List<Book> getAll() {
return bookDao.selectList(null);
}
@Override
public IPage<Book> getPage(int currentPage, int pageSize) {
IPage<Book> page=new Page<>(currentPage,pageSize);
return bookDao.selectPage(page,null);
}
}
IBookServiceImpl
package com.itheima.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.dao.BookDao;
import com.itheima.domain.Book;
import com.itheima.service.IBookService;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class IBookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {
@Autowired
private BookDao bookDao;
@Override
public IPage<Book> getPage(int currentPage, int pageSize) {
IPage page=new Page(currentPage,pageSize);
return bookDao.selectPage(page,null);
}
@Override
public IPage<Book> getPage(int currentPage, int pageSize,Book book) {
LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<Book>();
lqw.like(Strings.isNotEmpty(book.getType()),Book::getType,book.getType());
lqw.like(Strings.isNotEmpty(book.getDescription()),Book::getDescription,book.getDescription());
lqw.like(Strings.isNotEmpty(book.getName()),Book::getName,book.getName());
IPage<Book> page=new Page(currentPage,pageSize);
bookDao.selectPage(page,lqw);
return page;
}
}
BookService接口
package com.itheima.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.domain.Book;
import java.util.List;
public interface BookService {
Boolean save(Book book);
Boolean update(Book book);
Boolean delete(Integer id);
Book getById(Integer id);
List<Book> getAll();
IPage<Book> getPage(int currentPage, int pageSize);
}
IBookService接口
package com.itheima.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.domain.Book;
public interface IBookService extends IService<Book> {
IPage<Book> getPage(int currentPage, int pageSize, Book book);
IPage<Book> getPage(int currentPage, int pageSize);
}
10. Controller层
ProjectExceptionAdvice
package com.itheima.controller.utils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//作为springmvc的异常处理器
//@ControllerAdvice
@RestControllerAdvice
public class ProjectExceptionAdvice {
//拦截所有的异常信息
@ExceptionHandler(Exception.class)
public Result doException(Exception e){
//记录日志
//通知运维
//通知开发
e.printStackTrace();
return new Result(false,"服务器故障,请稍后再试");
}
}
Result
package com.itheima.controller.utils;
import lombok.Data;
@Data
public class Result {
private Boolean flag;
private Object data;
private String msg;
public Result(Boolean flag){
this.flag=flag;
}
public Result() {
}
public Result(Boolean flag, Object data) {
this.flag = flag;
this.data = data;
}
public Result(Boolean flag,String msg) {
this.flag = flag;
this.msg = msg;
}
}
BookController
package com.itheima.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.controller.utils.Result;
import com.itheima.domain.Book;
import com.itheima.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private IBookService bookService;
@GetMapping
public Result getAll(){
return new Result(true,bookService.list());
}
@GetMapping("{id}")
public Result getById(@PathVariable Integer id){
return new Result(true,bookService.getById(id));
}
@PostMapping
public Result save(@RequestBody Book book){
Boolean flag=bookService.save(book);
return new Result(flag,flag?"添加成功^_^":"添加失败-_-!");
}
@PutMapping
public Result update(@RequestBody Book book){
return new Result(bookService.updateById(book));
}
@DeleteMapping("{id}")
public Result delete(@PathVariable Integer id){
return new Result(bookService.removeById(id));
}
@GetMapping("{currentPage}/{pageSize}")
public Result getPage(@PathVariable int currentPage,@PathVariable int pageSize,Book book){
System.out.println("参数===>"+book);
IPage<Book> page=bookService.getPage(currentPage, pageSize,book);
//如果当前页码值大于总页码值,那么重新执行查询操作,使得最大页码值作为当前页码值
if(currentPage>page.getPages()){
page= bookService.getPage((int) page.getPages(), pageSize,book);
}
return new Result(true,page);
}
}
11. 分页配置类
MPConfig
package com.itheima.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MPConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
12. SpringBoot启动类
SSMPApplication
package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SSMPApplication {
public static void main(String[] args) {
SpringApplication.run(SSMPApplication.class, args);
}
}
13. 前端页面
下载地址: https://download.csdn.net/download/qq_22075913/85094958