創建基礎模塊
上一篇搭建了父工程和依賴座標的鎖定, 接下來就開始創建基礎模塊

簡述:
maven:3.6.2
數據庫:MySQL 5.1.6
持久層: SpingData Jpa (創建了表名後,啓動項目可以根據實體創建對應的表,某些時候這個還是比較方便的。但國內大部分企業偏愛Mybatis,根據自己的需要選擇即可),在網上看了一個例子感覺挺好,這裏也借鑑一下。

創建基礎模塊

1: 創建shop-common 公共模塊

在父工程上右擊鼠標 New -> Module

springcloud alibaba(二)基礎模塊與微服務搭建_spring


springcloud alibaba(二)基礎模塊與微服務搭建_#後端_02


springcloud alibaba(二)基礎模塊與微服務搭建_#spring_03


shop-common 的 pom依賴座標

<?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-alibaba</artifactId>
        <groupId>com.java</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>shop-common</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.56</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>
</project>
/**
 * 用户實體類
 */
@Entity(name = "shop_user") //實體與表映射
/*
* lombok 的使用
* 1> pom.xml引入lombok的依賴;
* 2> idea中安裝lombok插件;
* 説明: lombok是阿三哥他們家開發的
*/
@Data //源於lombok, 編譯時自動創建getter/setter方法
@NoArgsConstructor //補充一下, 源於lombok, 這個是無參構造方法
@AllArgsConstructor //補充一下,源於lombok,這個是全參構造方法
public class User {
    @Id //表示主鍵
    @GeneratedValue(strategy = GenerationType.IDENTITY) //逐漸增長策略
    private Long uid;//主鍵
    private String username;//用户名
    private String password;//密碼
    private String telephone;//手機號
}
/**
 * 商品實體類
 */
@Entity(name = "shop_product")
/*
 * lombok 的使用
 * 1> pom.xml引入lombok的依賴;
 * 2> idea中安裝lombok插件;
 * 説明: lombok是阿三哥他們家開發的
 */
@Data //源於lombok, 編譯時自動創建getter/setter方法
@NoArgsConstructor //補充一下, 源於lombok, 這個是無參構造方法
@AllArgsConstructor //補充一下,源於lombok,這個是全參構造方法
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer pid;//主鍵
    private String pname;//商品名稱
    private Double pprice;//商品價格
    private Integer stock;//庫存
}

/**
 * 訂單實體類
 */
@Entity(name = "shop_order")
/*
 * lombok 的使用
 * 1> pom.xml引入lombok的依賴;
 * 2> idea中安裝lombok插件;
 * 説明: lombok是阿三哥他們家開發的
 */
@Data //源於lombok, 編譯時自動創建getter/setter方法
@NoArgsConstructor //補充一下, 源於lombok, 這個是無參構造方法
@AllArgsConstructor //補充一下,源於lombok,這個是全參構造方法
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long oid;//訂單id
    private Long uid;//用户id
    private String username;//用户名
    private Long pid;//商品id
    private String pname;//商品名稱
    private Double pprice;//商品單價
    private Integer number;//購買數量
}

2: 創建shop-user 用户微服
1>創建用户微服務,步驟跟創建shop-common模塊一樣, 只是名字不一樣,用户微服務的名稱是shop-user
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">
    <parent>
        <artifactId>springcloud-alibaba</artifactId>
        <groupId>com.java</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>shop-user</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- 引入公共模塊 -->
        <dependency>
            <groupId>com.java</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 因為是用户微服務,這裏簡單提一下, 所以要引入web依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

2>按下面截圖創建包和類

springcloud alibaba(二)基礎模塊與微服務搭建_#spring_04


3>主類內容

package com.goblin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class UserApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
}

4>持久層UserDao接口

package com.goblin.dao;

import com.goblin.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

//JpaRepository是一個泛型接口, 前面的表示用户實體, 後面的是實體主鍵ID屬性
public interface UserDao extends JpaRepository<User, Long> {
}

5>業務接口

package com.goblin.service;

import com.goblin.entity.User;

/**
 * 用户業務接口
 */
public interface UserService {

    /**
     * 通過用户id查詢用户信息
     *
     * @param id
     * @return
     */
    User getByUid(Long id);
}

6>業務實現類

package com.goblin.service.impl;

import com.goblin.dao.UserDao;
import com.goblin.entity.User;
import com.goblin.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 用户業務實現類
 */
@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;

    /**
     * 通過用户id查詢用户信息
     *
     * @param id
     * @return
     */
    @Override
    public User getByUid(Long id) {
        return userDao.findById(id).get();
    }
}

7>前端控制器

package com.goblin.controller;

import com.goblin.entity.User;
import com.goblin.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 用户控制器
 */
@RestController //它= @Controller + @ResponseBody, 點開它也能看到這兩個註解在它裏面哦
//@RequestMapping("/user") //這裏可以加一層映射, 也可以不加, 具體看實戰需要情況
public class UserController {

    @Resource
    private UserService userService;

    /**
     * 通過用户id查詢用户信息
     *
     * @param uid
     * @return
     */
    @GetMapping("/user/{uid}")//這種是rest風格調用接口的方式哈,參數在路徑中,通過@PathVariable獲取
    public User getByUid(@PathVariable Long uid) {
        return userService.getByUid(uid);
    }
}

8>配置application.yml

server:
  port: 8071
spring:
  application:
    name: service-user
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    # 這裏提一句, 下面的 /// 等同於 localhost:3306 or 127.0.0.1:3306, 如果是其他IP和端口號的話,這裏需要寫全
    # jdbc:mysql://ip:port/dbName?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: root
  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
          dialect: org.hibernate.dialect.MySQL5InnoDBDialect

9>數據庫數據初始化用户信息的sql腳本如下:

INSERT INTO `shop_user` (`uid`, `password`, `telephone`, `username`) VALUES (1, '123456', '19276789875', '張三');
INSERT INTO `shop_user` (`uid`, `password`, `telephone`, `username`) VALUES (2, '123456', '19276789875', '李四');
INSERT INTO `shop_user` (`uid`, `password`, `telephone`, `username`) VALUES (3, '123456', '19276789875', '王五');

10> 運行主類UserApplication.java中的main方法,輸入路徑和參數: http://localhost:8071/user/1

springcloud alibaba(二)基礎模塊與微服務搭建_#spring_05

3: 創建shop-product產品微服務

按照shop-user的創建shop-product微服務, 注意的是有2個地方, 在application.yml中端口和應用名稱不一樣, 其他都一樣, 而在product產品微服務中, 端口是8081, 應用名稱service-product

數據庫數據初始化產品信息的sql腳本如下:

INSERT INTO shop_product VALUE(NULL,'小米','1000','5000');
INSERT INTO shop_product VALUE(NULL,'華為','2000','5000');
INSERT INTO shop_product VALUE(NULL,'蘋果','3000','5000');
INSERT INTO shop_product VALUE(NULL,'OPPO','4000','5000');

4: 創建shop-order訂單

按照shop-user的創建shop-product微服務, 注意的是有2個地方, 在application.yml中端口和應用名稱不一樣, 其他都一樣, 而在product產品微服務中, 端口是8091, 應用名稱service-order

總結

本文介紹瞭如何創建基礎模塊, 用户模塊, 產品模塊和訂單模塊, 這些基本上全是創建SpringBoot項目相關的東西。