1、创建父工程
1)创建普通Meven工程
创建普通Meven工程,删除 src 目录,保留 pom.xml
2)pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tuwer</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>xxx</module>
<module>xxx</module>
<module>xxx</module>
</modules>
<!--打包方式:pom 表示是父类工程-->
<packaging>pom</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<mysql.version>8.0.28</mysql.version>
<druid.version>1.2.8</druid.version>
<lombok.version>1.18.22</lombok.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<!--管理jar包的版本,让子项目中引用一个依赖而不用显式的列出版本号-->
<dependencyManagement>
<dependencies>
<!--spring-cloud-dependencies-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.0</version>
<!--
解决Maven项目单继承问题:
Maven的继承和Java的继承一样,只能单继承,无法实现多继承
pom 说明导入的是一个父模块,
后面的scope标签中的值 import 代表把父模块中的jar包导入进来
<type>pom</type><scope>import</scope>,
只能用在<dependencyManagement></dependencyManagement>中
-->
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-boot-dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.3</version>
<type>pom</type>
<!--<scope>provided</scope>-->
<scope>import</scope>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--SpringBoot mybatis启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<!-- 打包插件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
-
<packaging>pom</packaging>
打包方式:pom 表示是父类工程
-
dependencyManagement
统一管理jar包的版本,让子项目中引用一个依赖而不用显式的列出版本号
-
<type>pom</type> <scope>import</scope>
解决Maven项目单继承问题:
- Maven的继承和Java的继承一样,只能单继承,无法实现多继承
pom
说明导入的是一个父模块- 后面的scope标签中的值
import
代表把父模块中的jar包导入进来 <type>pom</type><scope>import</scope>
,只能用在<dependencyManagement>
中
-
<properties>
可以把相关依赖的版本信息提取出来,放在
<properties>
中
2、创建 API 实体类子模块
只存放 pojo 层
1)创建普通Meven工程
在父工程下创建;创建后父工程pom.xml中会增加 modules 模块
<modules>
<module>springcloud-api</module>
</modules>
-
pom.xml
导入
lombak
因为父工程中有了
dependencyManagement
管理依赖,子工程中不需要写版本号
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.tuwer</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-api</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
2)建立数据库
- 数据库:springcloud_db01
- 数据表:department
- 插入数据
# 先使用数据库,再用 DATABASE() 可得到当前数据库名
use springcloud_db01;
insert into department(dept_name, db_source) VALUES ('开发部',DATABASE());
insert into department(dept_name, db_source) VALUES ('人事部',DATABASE());
insert into department(dept_name, db_source) VALUES ('市场部',DATABASE());
insert into department(dept_name, db_source) VALUES ('运维部',DATABASE());
insert into department(dept_name, db_source) VALUES ('财务部',DATABASE());
insert into department(dept_name, db_source) VALUES ('策划部',DATABASE());
3)创建实体类
- Department.java
package com.tuwer.springcloud.pojo;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @author 土味儿
* Date 2022/2/9
* @version 1.0
*/
@Data
@NoArgsConstructor
// 支持链式写法;默认为false
@Accessors(chain = true)
public class Department implements Serializable {
private Long deptId;
private String deptName;
/**
* 在微服务中,同一信息可以存在于不同的数据库中
*/
private String dbSource;
public Department(String deptName) {
this.deptName = deptName;
}
}
3、创建服务提供者模块
springcloud-provider-dept-8001
1)创建普通Meven工程
其实是一个SpringBoot工程
在Spring基础上,添加 application.yml 和主启动类,以及相关的jar包,就变成了SpringBoot工程
2)导jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.tuwer</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-provider-dept-8001</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--自定义API依赖-->
<dependency>
<groupId>com.tuwer</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<!--spring-boot-starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring-boot-starter-jetty:类似tomcat的容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
spring-boot-starter-web
spring-boot-starter-jetty
spring-boot-devtools
以上三个jar包都在
spring-boot-dependencies
中,已经在父工程中管理,可以省略版本号,直接导入
3)配置 application.yml
# 端口
server:
port: 8001
# mybatis
mybatis:
# 别名
type-aliases-package: com.tuwer.springcloud.pojo
# 配置文件
#config-location: classpath:/mybatis/mybatis-config.xml
# mapper.xml
mapper-locations: classpath:/mybatis/mapper/*.xml
configuration:
# 驼峰命名
map-underscore-to-camel-case: true
# 显式的开启全局缓存
cache-enabled: true
# spring
spring:
application:
# 服务名称
name: springcloud-provider-dept
# 数据源
datasource:
# 德鲁伊
type: com.alibaba.druid.pool.DruidDataSource
# 驱动
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/springcloud_db01?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8
注意:
不要单独配置
mybatis-config.xml
;mybatis的配置都放在 application.yml 中;否则容易出现冲突
4)Mapper接口
-
DepartmentMapper.java
@Mapper
、@Repository
package com.tuwer.springcloud.mapper;
import com.tuwer.springcloud.pojo.Department;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author 土味儿
* Date 2022/2/9
* @version 1.0
*/
@Mapper
@Repository
public interface DepartmentMapper {
/**
* 添加部门
* @param department
* @return
*/
boolean addDepartment(Department department);
/**
* 根据Id查询部门
* @param id
* @return
*/
Department queryById(Long id);
/**
* 查询全部部门
* @return
*/
List<Department> queryAll();
}
5)Mapper配置
位于
resources/mybatis/mapper
下面
-
DepartmentMapper.xml
命名空间
namespace
指向接口类
<?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="com.tuwer.springcloud.mapper.DepartmentMapper">
<insert id="addDepartment" parameterType="department">
insert into springcloud_db01.department(dept_name, db_source)
VALUES (#{deptName},DATABASE())
</insert>
<select id="queryById" parameterType="long" resultType="department">
select * from springcloud_db01.department
where dept_id = #{deptId}
</select>
<select id="queryAll" resultType="department">
select * from springcloud_db01.department
</select>
</mapper>
6)Service层
(1)Service接口
- DepartmentService.java
public interface DepartmentService {
/**
* 添加部门
* @param department
* @return
*/
boolean addDepartment(Department department);
/**
* 根据Id查询部门
* @param id
* @return
*/
Department queryById(Long id);
/**
* 查询全部部门
* @return
*/
List<Department> queryAll();
}
(2)Service实现类
-
DepartmentServiceImpl.java
@Service
@Service
public class DepartmentServiceImpl implements DepartmentService {
@Autowired
DepartmentMapper departmentMapper;
@Override
public boolean addDepartment(Department department) {
return departmentMapper.addDepartment(department);
}
@Override
public Department queryById(Long id) {
return departmentMapper.queryById(id);
}
@Override
public List<Department> queryAll() {
return departmentMapper.queryAll();
}
}
7)Controller层
Controller 是对外提供服务的接口;用注解
@RestController
@RestController
public class DepartmentController {
@Autowired
DepartmentService departmentService;
@PostMapping("/department/add")
public boolean addDepartment(@RequestBody Department department){
return departmentService.addDepartment(department);
}
@GetMapping("/department/get/{id}")
public Department getDepartment(@PathVariable("id") Long id){
return departmentService.queryById(id);
}
@GetMapping("/department/getAll")
public List<Department> getAllDepartment(){
return departmentService.queryAll();
}
}
@PostMapping
的添加方法中,在参数前面需要加上@RequestBody
,否则接收不到消费端传递的数据@RequestBody
接收的是json字符串,代表postForObject发送过来的对象其实是一个被格式化成json字符串的对象
8)添加主动启类
- DepartmentProvider_8001.java
@SpringBootApplication
public class DepartmentProvider_8001 {
public static void main(String[] args) {
SpringApplication.run(DepartmentProvider_8001.class,args);
}
}