文章目录
2023.06.06 学习记录
图书商城项目初始构建(SpringBoot+MybatisPlus)
目标:熟悉手动创建SpringBoot项目,熟悉建包规范,熟悉MybatisPlus简单的增删改查功能
创建maven项目,建包
手动导入依赖创建SpringBoot项目
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wnhz.bm</groupId>
<artifactId>20230606_book_mall_v1.0</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.druid.version>1.2.18</project.druid.version>
<project.mybatisplus.version>3.5.3.1</project.mybatisplus.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.13</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${project.druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${project.mybatisplus.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件
创建不同环境的配置文件,配置相关数据,以下为开发环境 dev
server:
port: 9090
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/book_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 99120805
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #配置日志
global-config:
banner: off
此处serverTimezone=Asia/Shanghai
设置我们所在的时区,保证关于日期的存取操作正常
数据库设计
-
数据库 book_db
-
数据表:
-
书籍类型表 book_type
字段 类型 注释 id bigint 图书类型id name varchar(50) 图书类型名称 create_time datetime 类型创建时间 update_time datetime 类型修改时间 creator varchar(50) 创建者 -
书籍详情表 book_table
字段 类型 注释 id bigint 主键 title varchar(100) 书籍名称 author varchar(50) 作者 price decimal(10,2) 价格 version int 版次 pubdate date 出版日期 store int 库存 imgurl varchar(255) 封面图片路径 weight decimal(10,2) 重量 description text 书籍简介 sold int 卖出数量 pages int 页数 create_time datetime 创建时间 update_time datetime 修改时间 creator varchar(50) 创建者 type_id bigint 书籍类型id号 publisher_id bigint 出版社id号 -
出版社表 publisher_table
字段 类型 注释 id bigint 主键 name varchar(50) 出版社名称 create_time datetime 创建时间 update_time datetime 修改时间 creator varchar(50) 创建者
-
实体类创建
BookType
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("book_type")
public class BookType {
@TableId(type = IdType.AUTO)
private Long id;
//类型名称
private String name;
//创建时间
@TableField("create_time")
private Date createTime;
//修改时间
@TableField("update_time")
private Date updateTime;
//创建者
private String creator;
}
Book
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("book_table")
public class Book {
@TableId(type = IdType.AUTO)
private Long id;
//书名
private String title;
//作者
private String author;
//价格
private BigDecimal price;
//版次
private Integer version;
//出版时间
@TableField("pubdate")
private Date pubDate;
//库存
private Integer store;
//封面图片路径
@TableField("imgurl")
private String imgUrl;
//重量
private BigDecimal weight;
//简介描述
private String description;
//卖出数量
private Integer sold;
//页数
private Integer pages;
//创建时间
@TableField("create_time")
private Date createTime;
//修改时间
@TableField("update_time")
private Date updateTime;
//创建者
private String creator;
//书籍对应类型的id值
@TableField("type_id")
private Long bookTypeId;
//书籍对应出版社的id值
@TableField("publisher_id")
private Long publisherId;
}
Publisher
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("publisher_table")
public class Publisher {
@TableId(type = IdType.AUTO)
private Long id;
//出版社名称
private String name;
//创建时间
@TableField("create_time")
private Date createTime;
//修改时间
@TableField("update_time")
private Date updateTime;
//创建者
private String creator;
}
Dao接口创建
IBookTypeDao
@Mapper
public interface IBookTypeDao extends BaseMapper<BookType> {
}
其余接口一样的继承BaseMapper即可
Service接口创建
根据需求创建方法
例:
@Service
@Transactional
public class BookTypeServiceImpl implements IBookTypeService {
@Autowired
private IBookTypeDao bookTypeDao;
@Override
public List<BookType> findAll() {
return bookTypeDao.selectList(null);
}
@Override
public List<BookType> findByConditions() {
QueryWrapper<BookType> wrapper = new QueryWrapper<>();
wrapper.eq("name","志怪小说");
return bookTypeDao.selectList(wrapper);
}
@Override
public List<BookType> orderByCreateTimeDesc() {
QueryWrapper<BookType> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("create_time");
return bookTypeDao.selectList(wrapper);
}
}
每一个service方法写完后,都要用junit测试方法
创建DTO
DTO:Data Transfer Object
统一的前端与后端传输对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RespData {
//状态码和信息
private ResultCode resultCode;
//返回的数据
private Object data;
//时间
private Date time;
}
//枚举类型
public enum ResultCode {
QUERY_SUCCESS(2011,"查询成功"),
UPDATE_SUCCESS(2021,"修改成功"),
DELETE_SUCCESS(2031,"删除成功"),
SAVE_SUCCESS(2041,"添加成功"),
QUERY_ERROR(2010,"查询失败"),
UPDATE_ERROR(2020,"修改失败"),
DELETE_ERROR(2030,"删除失败"),
SAVE_ERROR(2040,"添加失败"),
;
private int code;
private String msg;
ResultCode(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
controller层接口方法的返回结果都使用RespData
POJO/PO/VO/DTO的区别
(简单记录,不一定正确,今后有新的理解再更新)
- POJO(
Plain Ordinary Java Object
无规则简单Java对象):通指普通的java对象,只要是具有一些属性,具有一部分getter/setter方法的那种类就可以称作POJO;没有继承类、没有实现任何接口,没有被其它框架侵入的java对象,内部没有任何逻辑,单纯的数据载体 - PO(
Persistent Object
持久化对象):持久化对象,与数据库的字段一一对应 - VO(
View Object
表示层对象):单纯用来封装页面展示所需的数据, - DTO(
Data Transfer Object
数据传输对象):后端返回前端的传输对象,除了封装了前端页面所需数据外还可以封装一些其他的例如状态码,信息等数据。