一.项目搭建
可以使用xshell连接虚拟机,只要保证虚拟机开机即可。
xshell中复制粘贴,选中复制(复制到外边),ctrl+inset复制(复制到里边),shift+insert粘贴。
1.工程搭建
1.创建一个普通的java项目用于包含这些内容cloudmaket。
2.创建顶级父工程cloud-market-parent(使用spring初始化创建),里边只保留配置一些公共的依赖比如lombok,test;打包方式设置为pom,主要负责共有依赖的版本控制;将src目录删除(因为不需要写代码只负责版本控制)。
3.在顶级父工程cloud-market-parent中创建各个微服务父工程包括:
- cloud-market-api
- cloud-market-gateway
- cloud-market-service
- cloud-market-util
- cloud-market-web
以上均为微服务的父工程,负责各个微服务的依赖版本控制,打包方式同样为pom;同样删除src目录。
最终形成的项目结构:
4.在cloud-market-util下搭建公共工程,公共工程market-service-dependency包含了所有微服务工程公共依赖包,所有微服务工程公共配置类(同时还继承了顶级父工程中配置的2个依赖),以后其他微服务工程需要使用的常用依赖都可以直接从该公共工程中取得。包括web包,mybatis-plus包,mysql包,redis包,nacos包。其中nacos包需要顶级父工程中引入spring-cloud-alibaba-dependencies依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
否则market-service-dependency中的nacos相关依赖会爆红(因为nacos相关依赖是属于alibaba的)
<!--nacos包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
5.采用Restful风格进行编码,因此对于code,msg,data需要封装统一返回结果类。这部分也属于共有的工具类部分,同样放到cloud-market-util模块下。新建market-common模块。在src/main/java目录下创建com.cloud.common包,在common包下再创建util.RespCode枚举类。
6.在cloud-market-service工程中引入Jar包依赖和工具包依赖
<dependencies>
<!--jar包依赖-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>market-service-dependency</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--工具包依赖-->
<dependency>
<groupId>com.cloud</groupId>
<artifactId>market-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2.集成Mybatis-plus
在此前的market-service-dependency中已经引入了mp的依赖.
2.1 创建商品微服务
在cloud-market-api下新建market-goods-api用于存储相关shop_goods表的bean和远程调用。
在cloud-market-service下新建market-goods-service用于存储shop_goods相关的微服务;在resource中添加mybatis-plus相关配置文件bootstrap.yml.
server:
port: 8081
spring:
application:
name: market-goods
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.100.130:3306/shop_goods?userUnicode=true&characterEncoding=UTF-8
username: root
password: 123
cloud:
nacos:
config:
file-extension: yaml
server-addr: 192.168.100.130:8848
discovery:
server-addr: 192.168.100.130:8848
mybatis-plus:
mapper-locations: mapper/*.xml # mybatis的xml配置文件的位置
type-aliases-package: com.cloud.vip.market.*.model # 对应的javabean取别名的包的位置
configuration:
map-underscore-to-camel-case: true # 驼峰转换,将数据库中的带有下划线的转换为驼峰命名规则
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 日志打印,增删改查方便查看日志
2.2 创建商品微服务
在docker中创建并运行nacos容器.
docker run \
-e MODE=standalone \
-e MYSQL_SERVICE_HOST=192.168.163.136 \
-p 8848:8848 \
--name nacos \
-d nacos/nacos-server:1.4.1
容器启动成功之后,可以通过192.168.163.136:8848/nacos访问nacos,然后启动商品引导类,可以看到商品服务已经被注册到了nacos注册中心中:
2.3 使用mp插件编写基础代码
1.mapper层
使用mp插件,直接继承BaseMapper即可
@Mapper
public interface BrandMapper extends BaseMapper<Brand> {}
2.service层
使用mp插件,继承IService即可
//service
public interface BrandService extends IService<Brand> {}
//serviceImpl
@Service
public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements BrandService {}
3.controller层
无区分,正常
@RestController
@RequestMapping(value = "/brand")
public class BrandController {
@Autowired
private BrandService brandService;
}
2.4 分页查询代码
要想使用分页查询,首先需要在引导类中配置分页拦截器bean
/**
* 分页拦截器
* @return
*/
@Bean
public PaginationInnerInterceptor paginationInnerInterceptor(){
PaginationInnerInterceptor paginationInnerInterceptor=new PaginationInnerInterceptor();
//设置数据类型
paginationInnerInterceptor.setDbType(DbType.MYSQL);
return paginationInnerInterceptor;
}
然后编写查询条件,进行分页查询
//serviceImpl
@Override
public Page<Brand> queryPageList(Brand brand, Long currentPage, Long size) {
QueryWrapper<Brand> queryWrapper=new QueryWrapper<>();
//根据name查询品牌;
queryWrapper.like("name",brand.getName());
return brandMapper.selectPage(new Page<Brand>(currentPage,size),queryWrapper);
}