20230606学习记录

2023.06.06 学习记录

图书商城项目初始构建(SpringBoot+MybatisPlus)

目标:熟悉手动创建SpringBoot项目,熟悉建包规范,熟悉MybatisPlus简单的增删改查功能

创建maven项目,建包

image-20230606221130884

手动导入依赖创建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设置我们所在的时区,保证关于日期的存取操作正常

数据库设计

  1. 数据库 book_db

  2. 数据表:

    • 书籍类型表 book_type

      字段类型注释
      idbigint图书类型id
      namevarchar(50)图书类型名称
      create_timedatetime类型创建时间
      update_timedatetime类型修改时间
      creatorvarchar(50)创建者
    • 书籍详情表 book_table

      字段类型注释
      idbigint主键
      titlevarchar(100)书籍名称
      authorvarchar(50)作者
      pricedecimal(10,2)价格
      versionint版次
      pubdatedate出版日期
      storeint库存
      imgurlvarchar(255)封面图片路径
      weightdecimal(10,2)重量
      descriptiontext书籍简介
      soldint卖出数量
      pagesint页数
      create_timedatetime创建时间
      update_timedatetime修改时间
      creatorvarchar(50)创建者
      type_idbigint书籍类型id号
      publisher_idbigint出版社id号
    • 出版社表 publisher_table

      字段类型注释
      idbigint主键
      namevarchar(50)出版社名称
      create_timedatetime创建时间
      update_timedatetime修改时间
      creatorvarchar(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的区别

(简单记录,不一定正确,今后有新的理解再更新)

  1. POJO(Plain Ordinary Java Object无规则简单Java对象):通指普通的java对象,只要是具有一些属性,具有一部分getter/setter方法的那种类就可以称作POJO;没有继承类、没有实现任何接口,没有被其它框架侵入的java对象,内部没有任何逻辑,单纯的数据载体
  2. PO(Persistent Object持久化对象):持久化对象,与数据库的字段一一对应
  3. VO(View Object表示层对象):单纯用来封装页面展示所需的数据,
  4. DTO(Data Transfer Object数据传输对象):后端返回前端的传输对象,除了封装了前端页面所需数据外还可以封装一些其他的例如状态码,信息等数据。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值