携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情
上一个小节,我们学习了spring-cloud-good-prictice的学习,我们学会了如何创建主模块(good-service)和两个子模块(good-list和good-price),今天我们来完成一下good-list业务逻辑的开发。老铁,跟着我,快上车~
1.首先,我们先看一下上一节课创建好的模块
2.我们在goods-list模块下的pom.xml文件引入对应的三大件(web依赖,mysql,mybatis)和一个插件
<dependencies>
<!-- 1.引入web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 2.引入mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 3.引入mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
引入插件
<!-- 4.引入plugin插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
引入之后,记得导入对应的依赖
编辑spring-cloud-good-practice的pom.xml文件,修改一下Spring Boot的版本号,为了更好的匹配Sping Cloud
3.配置一下good-list相关的数据库配置信息,端口号,日志
我们在good-list的Resource新增application.properties文件
#配置项目端口
server.port=8082
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/course_practice?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
#配置日志
logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}
#配置项目名称
spring.application.name=good-list
4.我们到good-list模块下配置熟悉的几个包,分别为controller,dao,entity,service和对应的java文件
- 定义一下启动类,新建GoodsListApplication,并且编辑以下代码
@SpringBootApplication
public class GoodListApplication {
public static void main(String[] args) {
SpringApplication.run(GoodListApplication.class,args);
}
}
- 我们看一下good对应的表结构
具体数据如下
- 在entity下创建Good文件,分别定义一下字段
package com.imooc.good.entity;
public class Good {
Integer id;
Integer goodId;
String goodName;
Integer valid;
}
- 在service创建GoodService接口,并且定义getGoodList方法
public interface GoodListService {
List<Good> getGoodList();
}
- 在dao包下创建GoodMapper接口文件,并且提供findValidGood方法
@Mapper
@Repository
public interface GoodMapper {
@Select("select * from good where valid=1")
List<Good> findValidGood();
}
说明一下代码:
@Mapper表示是和查询相关注解
@Repository表示的是资源
@Select用于查询数据列表
- 我们在service包下新建一个impl包,并且创建GoodListServiceImpl类,用于实现GoodsServie的方法
@Service
public class GoodListServiceImpl implements GoodListService {
@Autowired
GoodMapper goodMapper;
@Override
public List<Good> getGoodList() {
return goodMapper.findValidGood();
}
}
解释一下代码:
@Service表示该类是服务类
@Autowired表示注入指定的类,我们现在要注入GoodMapper,返回对应的资源
- controller控制器新建GoodListController类文件,用来定义api接口
@RestController
public class GoodListController {
@Autowired
GoodListService goodListService;
@GetMapping("/goods")
public List<Good> goodList(){
return goodListService.getGoodList();
}
}
我们来整理一下思路:
首先通过controller去调用service提供的方法,这时候需要通过注解的@Autowired引入对应的GoodListService,然后调用getGoodList;
这时候来到了GoodListService,看一下未实现的的方法getGoodList;
接着我们来到GoodListServiceImpl,实现一下具体的方法getGoodList,首先引入GoodMapper,并且调用mapper定义的查询数据方法
5.我们启动一下项目
启动成功之后
6.我们尝试调用一下接口
http://localhost:8082/goods
这时候提示 No serializer found for class com.imooc.good.entity.Good
我们就到entity类序列化一下并且重新启动一下项目
再次访问,还是报错,这时候我们我们在创建geter和setter方法
再次访问api接口地址:
我们发现goodId和GoodName变量值没有返回回来,这时候我们再去配置一下application.properties,开启驼峰配置
mybatis.configuration.map-underscore-to-camel-case=true
再次访问: