JaveWeb项目开发注意事情
#JaveWeb项目开发注意事情
遵守REST开发规范
REST风格,表述性状态转换,它是一种软件架构风格。
传统风格
GET 查询id为1的用户
POST 新增用户
POST 修改用户
GET 删除id为1的用户
REST风格
GET 查询id为1的用户
POST 新增用户
PUT 修改用户
DELETE 删除id为1的用户
REST风格不是规定,可以打破,描述模块的功能通常使用复数加s表述,表示此类资源,不是单个资源。
先需求分析然后查看接口文档,理清思路,进行功能代码的实现。
开发过程
1,数据库准备好表
2,IDEA创建项目,填写type为Maven,Artifact为项目名,JDK和Java都选11。勾选Spring Boot为2.7.15
Dependencies选择,Developer Tools中的Lombok,web中的Spring Web和SQL中的MyBatis Framework 和MySQL Driver后,在新建项目的pom文档中会自动引用,写在dependence中,Maven的依赖中会显现。
3.application.properties中填写配置
4,创建项目文件,根据分层解藕,pojo文件夹中填写实体类文件,controller文件夹中填写控制类文件,mappe中填写针对数据库的接口文件,services文件夹中填写实现的方法和方法使用的接口。
controller类调用service类,service类中使用引入的service接口,同时调用mapper接口,mapper接口操作数据库,得到的数据,返回service接口类型的数据到service类中,然后返回控制层。
controller类
@Slf4j
@RestController
public class DeptController {
//定义log输出日志对象
// private static Logger log= LoggerFactory.getLogger(DeptController.class); //等价于@Slf4j
@Autowired
private DeptService deptService;
// @RequestMapping(value = “/depts”,method = RequestMethod.GET) //限制请求路径为get
@GetMapping(“/depts”) //限制请求路径为get
public Result list(){
log.info(“查询全部部门数据”);
//
//调用deptservice 查询全部部门数据
List deptList = deptService.list();
return Result.success(deptList);
}
}
service类
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
@Override
public List<Dept> list() {
return deptMapper.list();
}
}
service接口
public interface DeptService {
/查询全部数据/
List list();
}
mapper接口
@Mapper
public interface DeptMapper {
/**
* 查询全部数据信息
* */
@Select(“select * from emp”)
List list();
}
@RequestMapping(“/depts”)抽取公共路径
查询操作,@GetMapping
所以一个完整的请求路径,应该是类上的@RequestMapping的value属性+方法上的@RequestMapping的属性。
@RequestParam(defaultValue=“1”) // 设置请求参数默认值。
// 分页查询获取数据
//参数不能传递的两种解决方法,1
// @Select(“select * from emp limit #{org1},#{org2}”)
// List pageLimit(Integer start, Integer pageSize);
//参数不能传递的两种解决方法,2
@Select(“select * from emp limit #{start},#{pageSize}”)
List pageLimit(@Param(“start”) Integer start, @Param(“pageSize”)Integer pageSize);
分页插件PageHelper
1.pom文件引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
//员工信息查询,pageHelper插件
@Select("select * from emp ")
public List list();
service文件中
@Override
public PageBean page(Integer page, Integer pageSize) {
//
PageHelper.startPage(page,pageSize);
List<Emp> empList = empMapper.list();
Page<Emp> p = (Page<Emp>) empList;
// 3封装数据
PageBean pageBean = new PageBean(p.getTotal(),p.getResult());
return pageBean;
}
//@PathVariable 传递id时不能缺少路径参数
//传递实体类参数,需要@RequestBody注解
文件上传,指将本地图片,视频音频等文件上传到服务器,供其他用户浏览或下载的过程。
文件上传在项目中应用非常广泛,
2前端页面三要素
form表单中设置input type=“file”。method=“post”。enctype=“multipart/form-data”(文件分多部分提交)
3.服务器接收文件
//MultipartFile 上传文件
文件上传到本地,UUID唯一文件名
@PostMapping(“/upload”)
//MultipartFile 上传文件
public Result upload(String name, Integer age,@Param(“image”) MultipartFile image) throws Exception{
log.info(“文件上传,{},{},{}”,name,age,image);
//获取文件原始名称
String originalFilename = image.getOriginalFilename();
//获取文件唯一名称 UUID
int i = originalFilename.lastIndexOf(".");
String extname = originalFilename.substring(i);
String newName = UUID.randomUUID().toString()+extname;
//保存上传的文件到磁盘目录中
image.transferTo(new File("E:\\FOut\\"+newName));
return Result.success();
}
突破默认文件传输IMB的限制
#单个文件最大上传10MB
spring.servlet.multipart.max-file-size=10MB
##多个文件上传,总共合计最大的大小为100MB
spring.servlet.multipart.max-request-size= 100MB
String getOriginalFilename(); //获取原始文件名
void transferTo(File dest); //将接收的文件转存到磁盘文件中
long getSize(); //获取文件的大小,单位:字节
byte[] getBytes(); //获取文件内容的字节数组
inputStream getInputStream();//获取接收到文件内容的输入流。
4。文件存储方式
本地存储,无法直接访问,磁盘空间限制,磁盘损坏。
阿里云OSS(Object Storage Service),是一款海量,安全,低成本,高可靠的云存储服务。
SDK(software Development kit),软件开发工作包,辅助软件开发和做入门程序。
AccessKey
LTAI5tS3xJE1Z6D5x6aRFxEC ID
pcjo1N5LJLXArZVy32WyaS8OD4xrBL Secret
勾选文件扩展名,更改文件后缀名
参数配置化 springs配置文件 解决阿里云上传文件硬编码的问题
@Value注解用于外部配置的属性注入,具体用法 @Value(“${alyun.oss.bucketName}”)
@Value(“
a
l
y
u
n
.
o
s
s
.
e
n
d
p
o
i
n
t
"
)
p
r
i
v
a
t
e
S
t
r
i
n
g
e
n
d
p
o
i
n
t
;
/
/
p
r
i
v
a
t
e
S
t
r
i
n
g
a
c
c
e
s
s
K
e
y
I
d
=
"
L
T
A
I
5
t
S
3
x
J
E
1
Z
6
D
5
x
6
a
R
F
x
E
C
"
;
@
V
a
l
u
e
(
"
{alyun.oss.endpoint}") private String endpoint; // private String accessKeyId = "LTAI5tS3xJE1Z6D5x6aRFxEC"; @Value("
alyun.oss.endpoint")privateStringendpoint;//privateStringaccessKeyId="LTAI5tS3xJE1Z6D5x6aRFxEC";@Value("{alyun.oss.accessKeyId}”)
private String accessKeyId;
// private String accessKeySecret = “pcjo1N5LJLXArZVy32WyaS8OD4xrBL”;
@Value(“
a
l
y
u
n
.
o
s
s
.
a
c
c
e
s
s
K
e
y
S
e
c
r
e
t
"
)
p
r
i
v
a
t
e
S
t
r
i
n
g
a
c
c
e
s
s
K
e
y
S
e
c
r
e
t
;
/
/
p
r
i
v
a
t
e
S
t
r
i
n
g
b
u
c
k
e
t
N
a
m
e
=
"
h
m
l
e
a
d
n
e
w
s
s
−
w
e
b
−
f
r
a
m
e
w
o
r
k
01
"
;
@
V
a
l
u
e
(
"
{alyun.oss.accessKeySecret}") private String accessKeySecret ; // private String bucketName = "hmleadnewss-web-framework01"; @Value("
alyun.oss.accessKeySecret")privateStringaccessKeySecret;//privateStringbucketName="hmleadnewss−web−framework01";@Value("{alyun.oss.bucketName}”)
private String bucketName;
SpringBoot提供了多种配置方法
常见的配置文件格式对比
XML 文件格式臃肿
properties 层级结构不清晰
yml/yaml 简洁,以数据为中心 (推荐)
yml 基本语法
1大小写敏感
2数值前边必须有空格作为分隔符
3.使用缩进表示层级关系,缩进时不允许使用Tab键,只能用空格(idea中自动将Tab转为空格)
4.属性的空格数目不重要,只要相同层级的元素左侧对齐即可
5.#表示注释,从这个字符到行尾
server:
port: 9000 #修改端口
#定义对象/Map集合
user:
name:Tom
age:20
address:bejin
#定义数组/List/Set
hobby:
- java
- a
- tram
通过@ConfigurationProperties注解,注入参数
@Data
@Component
@ConfigurationProperties(prefix = “alyun.oss”)
public class AliOSSProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret ;
private String bucketName;
}
@ConfigurationProperties和@Value(“${alyun.oss.endpoint}”)都是注入外部属性
但@ConfigurationProperties批量注入,@Value单个注入
lowchart.js/