- pom.xml:用于配置项目依赖包,以及其他配置。
pom.xml 文件主要描述了项目包的依赖和项目构建时的配置,在默认的 pom.xml 包中分为四大块。完整的pom.xml文件在文章末尾。
第一部分为项目的描述信息:
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
groupId:项目的包路径;
artifactId:项目名称;
version:项目版本号;
packaging:一般有两个值:jar、war,表示使用 Maven 打包时构建成 Jar 包还是 War 包;
name:项目名称;
description:项目描述。
第二部分为项目的依赖配置信息:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- parent:标签内配置 Spring Boot 父级版本 spring-boot-starter-parent,Maven 支持项目的父子结构,引入父级后会默认继承父级的配置;
- dependencies:标签内配置项目所需要的依赖包,Spring Boot 体系内的依赖组件不需要填写具体版本号,spring-boot-starter-parent 维护了体系内所有依赖包的版本信息。
第三部分为构建时需要的公共变量:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<fastjson.version>1.2.47</fastjson.version>
<druid.version>1.1.9</druid.version>
<mybatis.version>1.3.2</mybatis.version>
</properties>
上面配置了项目构建时所使用的编码,输出所使用的编码,最后指定了项目使用的 JDK 版本和其他第三方jar包的版本。
第四部分为构建配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
使用 Maven 构建 Spring Boot 项目必须依赖于 spring-boot-maven-plugin 组件,spring-boot-maven-plugin 能够以 Maven 的方式为应用提供 Spring Boot 的支持,即为 Spring Boot 应用提供了执行 Maven 操作的可能。spring-boot-maven-plugin 能够将 Spring Boot 应用打包为可执行的 jar 或 war 文件,然后以简单的方式运行 Spring Boot 应用。
项目自动生成的配置文件是.properties文件,个人习惯使用更加简洁直观的.yml格式,文件中配置了项目的端口号和数据库连接信息:
server:
port: 8088
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=true
username: root
password:
serverTimezone=UTC要放在第一个位置,如果没有这个属性,可能出现以下异常:
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC
上面项目结构图中,我们自行创建了很多层级,它们各自发挥作用,共同构成一个项目,下面分别详解一下各层级的作用。
2.4.1 controller
这部分的作用是对外提供接口。一个标准的controller
类如下:
package mudemo.controller;
import com.alibaba.fastjson.JSONObject;
import mudemo.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/goods")
public class GoodsController {
@Autowired
private GoodsService goodsService;
@RequestMapping(value = "/goodsList", method = RequestMethod.GET)
public JSONObject getGoodsList(@RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize) {
return goodsService.getGoodsList(pageNum, pageSize);
}
@RequestMapping(value = "/updateGood", method = RequestMethod.POST)
public JSONObject updateGood(@RequestBody JSONObject request) {
return goodsService.updateGood(request);
}
}
首先我们看一下其中用到的几个注解:
-
@RestController
:MVC中应用非常频繁的一个注解,也是 SpringBoot 新增的一个注解,可以看作是 @Controller 和 @ResponseBody 的结合体,作用是返回JSON格式的数据 -
@RequestMapping
:一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;方法的级别上注解表示进一步指定到处理方法的映射关系。该注解有 6 个属性,一般在项目中比较常用的有 3 个属性:value、method 和 produces。-
value
属性:指定请求的实际地址,value 可以省略不写。 -
method
属性:指定请求的类型,主要有GET、PUT、POST、DELETE,默认为 GET。 -
produces
属性:指定返回内容类型。
-
-
@RequestParam("id")
:获取请求参数,例如从http://localhost:8080/student?id=1
中获取id的值 -
@RequestBody
:也是获取请求的参数,但不同的是,@RequestBody
是获取JSON格式的参数
2.4.2 service
service层是项目的逻辑实现层。一般包含service接口类和它的实现类。本项目中,接口类如下:
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Service;
@Service
public interface GoodsService {
// 查询
JSONObject getGoodsList(int pageNum, int pageSize);
// 更新
JSONObject updateGood(JSONObject request);
}
可以看到,接口类中只定义了一系列的方法,并没有具体实现,具体实现由其实现类完成:
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import mudemo.dao.GoodsMapper;
import mudemo.model.Good;
import mudemo.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service(value = "GoodsService")
public class GoodsServiceImpl implements GoodsService {
@Autowired
private GoodsMapper goodsMapper;
@Override
public JSONObject getGoodsList(int pageNum, int pageSize) {
JSONObject result = new JSONObject();
try {
PageHelper.startPage(pageNum, pageSize);
PageInfo<Good> pageInfo = new PageInfo(goodsMapper.getGoodsList());
result.put("code", "0");
result.put("msg", "操作成功!");
result.put("data", pageInfo.getList());
result.put("count", pageInfo.getTotal());
} catch (Exception e) {
result.put("code", "500");
result.put("msg", "查询异常!");
}
return result;
}
@Override
public JSONObject updateGood(JSONObject request) {
JSONObject result = new JSONObject();
try {
goodsMapper.updateGood(request);
result.put("code", "0");
result.put("msg", "操作成功!");
} catch (Exception e) {
result.put("code", "500");
result.put("msg", "修改商品异常!");
}
return result;
}
}
阅读代码可知,这个类实现了从数据库获取数据并封装的逻辑。其中关键所在是goodsMapper.getGoodsList()
,它是dao层中的一个方法,我们去看一下里面有何玄机。
2.4.3 dao
dao层中是与数据库交互的类,也可以理解为写SQL的地方,比如下面这个类中,一个方法对应着一个SQL,调用方法就会执行SQL并将SQL的结果封装到预定的数据结构中。
import com.alibaba.fastjson.JSONObject;
import mudemo.model.Good;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface GoodsMapper {
@Select("SELECT * FROM 58test.goods")
List<Good> getGoodsList();
@Update("UPDATE mutest.goods SET type=#{type},name=#{name},price=#{price},size=#{size},status=#{status},description=#{description} WHERE id=#{id}")
void updateGood(JSONObject request);
}
如果是复杂的SQL,需要到xml文件中写,具体请见:SpringBoot-2:多个案例带你玩转Mybatis
这里推荐安装一个插件,方便dao层和xml的相互跳转:
2.4.4 启动类
启动类中没有太多内容,只有@MapperScan(value = "com.mudemo.dao")
为自行添加,目的是表明数据库交互层的路径。
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(value = "com.mudemo.dao")
public class MudemoApplication {
public static void main(String[] args) {
SpringApplication.run(MudemoApplication.class, args);
}
}
项目创建完成,在启动类上右键点击Run MudemoApplication,即可启动项目。然后按controller中的信息,去请求一下接口:
==============================================================
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
2670496490)]
[外链图片转存中…(img-AmromLuF-1712670496490)]
[外链图片转存中…(img-LjQuTWit-1712670496491)]
[外链图片转存中…(img-wCAHD0Xg-1712670496491)]
[外链图片转存中…(img-COXu22B1-1712670496491)]
[外链图片转存中…(img-YI9Uof6e-1712670496492)]
[外链图片转存中…(img-194fSU0j-1712670496492)]
[外链图片转存中…(img-E3uOom23-1712670496492)]
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
[外链图片转存中…(img-9JX2z5NG-1712670496492)]
关注我,点赞本文给更多有需要的人
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-wsYaS1CV-1712670496493)]