3.配置一個簡單的springcloud專案
阿新 • • 發佈:2022-05-29
1.先建立一個父專案
1.父專案的作品是指定子專案相同依賴的版本,和springboot的版本仲裁功能類似 建立一個maven工程,刪除掉裡面的src等目錄,只留下一個pom檔案 pom檔案解析: <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>cn.com.springcloud</groupId> <artifactId>springcloud</artifactId> <!--說明當前專案是父型別專案:因為專案的打包型別有:pom、jar、war--> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <!--同一管理jar包的版本--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombok.version>1.16.18</lombok.version> <mysql.version>5.1.47</mysql.version> <druid.version>1.1.16</druid.version> <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version> </properties> <!--子模組繼承之後,提供作用:所並本本+子modlue,不用寫groupID和version--> <!--重點1:dependencyManagement裡面的依賴只是設定了子類專案依賴的版本,並不會在父類專案中下載--> <dependencyManagement> <dependencies> <!--springboot2.2.2--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--springcloud Hoxton.Sr1--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <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> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.spring.boot.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <optional>true</optional> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build> </project> 結論: 重點1:<packaging>pom</packaging>表明當前專案是父專案 重點2:父專案中的只是表明依賴版本,並不會下載!當子類專案引入時才會下載! <dependencyManagement> <dependencies> 。。。 <dependencies> <dependencyManagement>
公共程式碼
公共程式碼裡包含了各個子類模組使用的工共程式碼:如共同的實體類,工共的工具類等等!
服務提供端程式碼:
提供了對資料庫表的各項操作: 專案結構如下: 注意體會到什麼是面向介面程式設計! 1.控制層(controller) @RestController @Slf4j public class UserController { 重點1:此處引入的依賴是service的介面,並不是介面的實現類,並且servcie的介面並沒有加上註解!其實現類加上了@service註解!後面會說.. @Autowired private UserService userService; @GetMapping("/producer/queryUserById/{id}") public CommResult queryUserById(@PathVariable("id") int id){ User user=userService.queryUserByid(id); if (user!=null){ log.info("id:"+id+" 查詢使用者成功!"); 重點2:此處返回的是CommResult,並傳入user,因為CommResult有個屬性是泛型,可以傳入任何型別的引數!高!實在是高! return new CommResult(200,"成功",user); }else { log.info("id:"+id+" 查詢使用者失敗!"); return new CommResult(444,"查詢失敗!id:"+id); } } } 2.service層 2.1介面:重點1:介面上沒有加任何的註解 public interface UserService { User queryUserByid(int id); int saveUser(User user); } 2.2介面實現類: 重點1:在介面實現類上加上了@service註解 @Service public class UserServiceImp implements UserService { 重點2:dao層介面的依賴注入 @Autowired private UserMapper userMapper; @Override public User queryUserByid(int id) { User user = userMapper.queryUserByid(id); return user; } } 4.dao層: 重點:此處有兩種方式,因為採用的是mybatis訪問資料庫 1.在介面上使用@mapper註解去標註當前介面為mybatis的繫結介面(和mapper.xml) 2.在springboot的啟動類上加上@mapperscan(dao層介面包名)去批量加入 加上這兩個註解後,可以在介面方法上使用標籤@select/@insert/@update/@delete public interface UserMapper { User queryUserByid(@Param("id") int id); int saveUser(User user); } 6.繫結的mapper.xml:綁定了dao層介面,並綁定了其中的方法 <mapper namespace="cn.com.springcloud.producer.dao.UserMapper"> 重點1:資料庫查詢出的欄位和實體類欄位不對應,使用該標籤一一對應,具體參考mybatis筆記! <resultMap id="queryUserById_toUser" type="com.cn.entities.User"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="pwd" column="pwd"/> </resultMap> <select id="queryUserByid" resultMap="queryUserById_toUser"> select * from public."user" where id=#{id} </select> <insert id="saveUser" parameterType="com.cn.entities.User" useGeneratedKeys="true" keyProperty="id"> insert into public."user"(name, pwd) values (#{name},#{pwd}) </insert> </mapper> 7.springboot啟動類程式碼 @SpringBootApplication 重點1:使用@mappersacn批量匯入mybatis的dao層介面 @MapperScan(value = "cn.com.springcloud.producer.dao") public class ProducerUserApiApplication { public static void main(String[] args) { SpringApplication.run(ProducerUserApiApplication.class, args); } } 8.springboot的配置檔案程式碼: server: port: 8081 spring: application: name: springcloud練習:服務提供端 datasource: #資料來源基本配置 username: root password: Ustcinfo@2020 driver-class-name: org.postgresql.Driver url: jdbc:postgresql://133.64.181.208:18921/wmd_test?currentSchema=public type: com.alibaba.druid.pool.DruidDataSource 重點1: mybatis-plus: 指定mybatis的mapper.xml檔案位置 mapper-locations: classpath*:/mapper/**/*.xml 使用別名,掃描別名類的包,不太好用,配置了這個,在mapper.xml中使用別名會爆紅,雖然不影響執行,但是沒有提醒等功能,也不好看。暫時不推薦使用! type-aliases-package: com.cn.entities
服務呼叫方法程式碼
服務呼叫方呼叫提供放程式碼,返回結果! 重點1:匯入共同依賴common,這樣就可以使用公共類CommResult和User類 重點2:採用的是RestTemplate進行遠端呼叫並返回,所以需要配置RestTemplate並載入到容器中! 1.自己的配置類 @Configuration public class MyConfig { 重點1:在自己的配置類中加入RestTemplate @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } } 2.控制層程式碼: @RestController @Slf4j public class UserController { private final static String PRODUCER_PATH="http://localhost:8081/producer/"; @Autowired private RestTemplate restTemplate; @PostMapping("/customer/saveUser") public CommResult saveUser(User user){ log.info("客戶端:插入的使用者資訊->"+user); 重點1:使用restTemplate的各種方法(支援rest形式)去進行呼叫和返回 CommResult result = restTemplate.postForObject(PRODUCER_PATH + "saveUser", user, CommResult.class); return result; } }