创建基础模块
上一篇搭建了父工程和依赖坐标的锁定, 接下来就开始创建基础模块

简述:
maven:3.6.2
数据库:MySQL 5.1.6
持久层: SpingData Jpa (创建了表名后,启动项目可以根据实体创建对应的表,某些时候这个还是比较方便的。但国内大部分企业偏爱Mybatis,根据自己的需要选择即可),在网上看了一个例子感觉挺好,这里也借鉴一下。

创建基础模块

1: 创建shop-common 公共模块
在父工程上右击鼠标 New -> Module
创建基础模块
创建基础模块--继续选择maven项目
创建公共模块
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>按下面截图创建包和类
用户微服务目录结构截图
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
按主键查询用户信息

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-order微服务, 注意的是有2个地方, 在application.yml中端口和应用名称不一样, 其他都一样, 而在order产品微服务中, 端口是8091, 应用名称service-order

总结

本文介绍了如何创建基础模块, 用户模块, 产品模块和订单模块, 这些基本上全是创建SpringBoot项目相关的东西。

更多推荐