0

spring后端开发笔记

 1 year ago
source link: https://sn1per-ssd.github.io/2022/08/05/spring%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E7%AC%94%E8%AE%B0/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

spring后端开发笔记

阅读数:2823次

2022-08-05

字数统计: 1.7k字

  |   阅读时长≈ 7分

公司要求开发个小站,遂写此文

写的框架是lin-cms,该CMS前后端分离,而且于是分为三个人写,一个人改前端,剩下的人写后端

框架的介绍和相关文档在这:https://doc.cms.talelin.com/

后端决定使用spring-boot进行开发,开发工具用的是idea,还是很方便的,识别到porm.xml就可以在右边直接开始构建什么的。

值得注意的是,如果需要使用自己的maven,需要在preferences->构建、执行、部署->maven中进行配置。idea默认使用的是自己的maven。如果需要下载依赖等可以在右边直接下载

images-202208061556.png

  1. DO:如果某个类用来表示数据模型,那么该类就是比较单纯的数据容器(Data Object),我们简称DO,对应文件夹为model,使用@TableName("book")指定表名。

  2. Mapper:按照 mybatis 的惯例,有了数据模型以后,我们还需要为它提供相应的mapper。对应mapper文件夹。

  3. Service:有了基础 Mapper 以后,我们再为 book 定义相关的业务接口和业务实现。对应service文件夹,其中service/impl为业务实现

  4. Controller:接下来,我们需要给 book 创建对应的控制器,并以此对外提供访问接口。对应文件夹controller

  5. DTO:关于数据传输的数据容器类称之 为DTO(Data Transfrom Object)对应dto

  6. vo:对响应体创建成功的响应对象,对应文件夹vo

具体的目录结构文档如下:https://doc.cms.talelin.com/server/spring-boot/standard.html

由于是springboot,所以相对好配置,src/main/resources/application.yml中进行配置,值得注意的是,下面这个选项,决定了你的部分配置在哪个文件中文件,例如

spring:
# 激活环境配置
profiles:
active: dev

则配置文件为src/main/resources/application-dev.yml。在application.yml中,我基本没有进行改变,但在application-dev.yml中,我对数据库配置和服务端口进行了改变

根据需求进行开发,这里主要讲讲mybatis plus和spring boot里的一些注解。

mybatis plus是mybatis的一个增强工具,总的来说还是比较好用的,我也不是很懂开发,所以这玩意的详细介绍就自行百度吧,我只管知道简单用法就行了。

首先是提供接口,创建CompanyController.java,代码如下:

@RestController
@RequestMapping("/v1/company")
@Validated
public class CompanyController {
@Autowired
private CompanyService companyService;

@GetMapping("/{id}")
public CompanyDO getCompany(@PathVariable(value = "id") @Positive(message = "{id.positive}") Integer id) {
CompanyDO company = companyService.getById(id);
if (company == null) {
throw new NotFoundException(10022);
}
return company;
}
}

首先是上面的几个springboot的注解。

@RequestMapping("/v1/company")请求路径

@Validated校验注解,添加之后可以使用其中的校验注解,如下文的@Positive(message = "{id.positive}") Integer id)表示对参数id进行校验,若不大于0,则弹出message中的信息,此处的id.positive是一个占位符,本框架中具体信息在src/main/resources/ValidationMessages.properties中,可以在其中进行自定义,除了Positive,还有@Negative@Email等校验注释,具体可以自行百度

@GetMapping("/{id}")GET请求传入路径参数id,除了GET方法,也能有POST方法

创建src/main/java/io/github/talelin/latticy/model/CompanyDO.java,代码如下:

@Data
@TableName("company")
@EqualsAndHashCode(callSuper = true)
public class CompanyDO extends BaseModel implements Serializable {

private static final long serialVersionUID = 3968784595972358534L;

private String companyName;

private String companyTin;

private String companyScc;
}

@Data减少不必要的代码,如setcompanyName等类似方法

@TableName指定数据库表名

@EqualsAndHashCode(callSuper = true),使用@Data时就需要加上该注解,提供equal和hashcoden方法。

值得注意的是,由于该类继承了BaseModel,所以创建表和映射时,需要有BaseModel中的字段,该框架中为createTimeupdataTimedeleteTime。与此同时,BaseModel中存在下面的语句

@TableId(value = "id", type = IdType.AUTO)
private Integer id;

TableId意思是将某参数指定为表的主键,这里的参数为id,且数据表中id自增。

提供mapper

创建src/main/resources/mapper/CompanyMapper.xml用来提供映射和实现SQL语句。代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.github.talelin.latticy.mapper.CompanyMapper">

<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="io.github.talelin.latticy.model.CompanyDO">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="company_name" jdbcType="VARCHAR" property="companyName"/>
<result column="company_tin" jdbcType="VARCHAR" property="companyTin"/>
<result column="company_scc" jdbcType="VARCHAR" property="companyScc"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="delete_time" jdbcType="TIMESTAMP" property="deleteTime"/>
</resultMap>
</mapper>

xml中column字段表示表中的字段,property表示DO中对应的变量。注意,变量最好用驼峰写法,否则会出现查询数据为空的情况,只能说十分的诡异,查了一个多小时才查出来是写法的问题,原因未知,所以还是建议大家用驼峰写法

也可以在其中定义一些查询语句,如BookMapper.xml中的

<select id="selectByTitle" resultMap="BaseResultMap">
SELECT *
FROM book b
WHERE b.title=#{title}
AND
b.delete_time IS NULL
</select>

id,所对应的是src/main/java/io/github/talelin/latticy/mapper中声明的接口,上面的id对应的是BookMapper.java中的List<BookDO> selectByTitle(@Param("title") String title);可以注意到,传入的形式参数为title<select>之间是所要执行的SQL语句

resultMap,返回的映射所对应的就是上面自己写的BaseResultMap

一般来说想要使用自定义的方法,都需要在Mapper中进行声明。

提供service及实现接口

创建src/main/java/io/github/talelin/latticy/service/CompanyService.javasrc/main/java/io/github/talelin/latticy/service/Impl/CompanyService Impl.java

和常用的接口一样,在service中进行声明,在impl中进行实现。

CompanyServiceImpl.java代码如下:

@Service
public class CompanyServiceImpl implements CompanyService {

@Autowired
private CompanyMapper companyMapper;

@Override
public CompanyDO getById(Integer id) {
CompanyDO company = companyMapper.selectById(id);
return company;
}
}

@Autowired对类成员变量、方法和构造方法进行标注,完成自动装配工作,我个人的理解就是会自动填充<property name="属性名" value="属性值"/>,大概相当于set()和get()

由于mybatis plus已经封装了某些简单的查询、插入等功能,所以seslectById不需要在mapper中进行声明和实现。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK