Gradle

定义: 一个开源的项目自动化构建工具,建立在Apache Ant和Apache Maven概念的基础上,并引入了基于Groovy的特定领域语言DSL,而不再使用XML形式管理构建脚本。

一、准备Gradle

  1. 安装
  • 确保安装JDK,java -version
  • 从Gradle官网下载Gradle,https://gradle.org/install/#manually

下载完毕后,解压到自己的本地文件夹中E:\develop\gradle-5.6.1

  • 配置环境变量,GRADLE_HOME
  • 添加到path,%GRADLE_HOME%\bin;
  • 验证安装是否成功,gradle -v
  1. 了解Groovy
  • 定义:Groovy是用于java虚拟机的一种敏捷的动态语言,是一种成熟的面向对象编程语言,即可用于面向对象编程,又可以用作纯粹的脚本语言。使用该语言不必编写过多的代码,同事又具有闭包和动态语言中的其他特性。
  • 与java比较
  • Groovy完全兼容java语法
  • 分号可选
  • 类、方法默认是public
  • 编译器给属性自动添加getter、setter方法
  • 属性可以直接用点号获取
  • 最后一个表达式的值会被作为返回值
  • ==等同于equals(),不会有空指针异常
  • assert语句
def version = 1
assert version == 2
  • 可选类型定义,弱类型语言
def version = 1  //version是一个int类型
  • 可选的括号
println version
  • 字符串 单引号、双引号、三个单引号
def version = 1
def s1 = 'imooc' //仅指字符串
def s2 = "gradle is ${version}" //可以插入变量
def s3 = '''my
name
is
imooc
''' // 可以换行
  • 集合api
// Map
def buildYesrs = ['ant': 2000, 'maven': 2004]
buildYesrs.gradle = 2009

// List
def buildTools = ['ant','maven']
buildTools << 'gradle'
  • 闭包
def c1 = {
    v ->
        print v
}

def c2 = {
    print 'hello'
}

def method1(Closure closure){
    closure('param')
}

def method2(Closure closure){
    closure()
}
method1(c1)
method2(c2)
  1. 构建脚本
// 构建脚本中默认都是有个Project实例的
apply plugin:'java'
version = '0.1'
repositories{
    mavenCetral()
}
dependencies{
    compile 'commons-codec:commons-codec:1.6'
}

二、搭建项目

  1. 首先用idea创建基础的gradle项目工程。
  2. 公用配置创建dependencies.gradle
ext {
    // 基础版本
    versions = [
            springBootVersion: '1.5.4.RELEASE'
    ]
    // 基础依赖
    libs = [
            common: [
                    "org.springframework.boot:spring-boot-starter-web:${versions.springBootVersion}",
                    "org.springframework.boot:spring-boot-starter-data-jpa:${versions.springBootVersion}",
                    "org.apache.commons:commons-lang3:3.5"
            ],
            mysql:  [
                    "mysql:mysql-connector-java:5.1.29"
            ],
            test:   [
                    "org.springframework.boot:spring-boot-starter-test:${versions.springBootVersion}",
            ]
    ]
}
  1. 修改build.gradle
plugins {
    id 'java'
}
group 'com.imooc'
version '1.0-SNAPSHOT'

apply from: "$rootDir/dependencies.gradle"

subprojects {
    apply plugin: 'java'
    apply plugin: 'war'

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories {
        mavenCentral()
    }

    dependencies {
        compile libs.common
        testCompile libs.test
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

}
  1. 创建模块,删除模块下的build.gradle文件内容,因为都在公用里面的subprojects里配置好了,目录结构如下:

三、数据库设计

1 . 创建产品端订单表

[外链图片转存失败(img-P52UvTcB-1567671631550)(E:\文章\Gradle\images\1567576819121.png)]

# 创建manger管理端数据库
CREATE DATABASE manager; 
# 使用manager
USE manager;
CREATE TABLE product(
	id VARCHAR(50) NOT NULL COMMENT '产品编号',
	NAME VARCHAR(50) NOT NULL COMMENT '产品名称',
	threshold_amount DECIMAL(15,3) NOT NULL COMMENT '起投金额',
	set_amount DECIMAL(15,3) NOT NULL COMMENT '投资步长',
	lock_term SMALLINT NOT NULL COMMENT '锁定期',
	reward_rate DECIMAL(5,3) NOT NULL COMMENT '收益期。0-100 百分比值',
	STATUS VARCHAR(20) NOT NULL COMMENT '状态,AUDINTING:审核中,IN_SELL:销售中,LOCAKED:暂停销售,FINISHED:已结束',
	memo VARCHAR(200) COMMENT '备注',
	create_at DATETIME COMMENT '创建时间',
	create_user VARCHAR(20) COMMENT '创建者',
	update_at DATETIME COMMENT '更新时间',
	update_user VARCHAR(20) COMMENT '更新者',
	PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

2. 创建销售端订单表

[外链图片转存失败(img-4UOovFxl-1567671631663)(E:\文章\Gradle\images\1567577056206.png)]

# 创建seller销售端数据库
CREATE DATABASE seller; 
# 使用seller
USE seller;
CREATE TABLE order_t(
	order_id varchar(50) not null comment '订单编号',
	chan_id VARCHAR(50) NOT NULL COMMENT '渠道编号',
	product_id VARCHAR(50) NOT NULL COMMENT '产品编号',
	chan_user_id VARCHAR(50) NOT NULL COMMENT '渠道用户编号',
	order_type VARCHAR(50) NOT NULL COMMENT '类型:APPLY:申购,REDEEM:赎回',
	order_status VARCHAR(50) NOT NULL COMMENT '类型:INIT:初始化,PROCESS:处理中,SUCCESS:成功,FAIL:失败',
	outer_order_id VARCHAR(50) NOT NULL COMMENT '外部订单编号',
	amount DECIMAL(15,3) NOT NULL COMMENT '金额',
	memo VARCHAR(200) COMMENT '备注',
	create_at DATETIME COMMENT '创建时间',
	update_at DATETIME COMMENT '更新时间',
	PRIMARY KEY (order_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

3. 创建实体类

在entity模块下创建Order类 和enums枚举类型

package com.imooc.entity;

/**
 * 产品
 * @Entity 实体类 因为Order对应的表示order_t
 * @Id 主键
 */
@Entity(name="order_t")
public class Order {
    // 产品编号
    @Id
    private String id;
    // 产品名称
    private String name;
    /**
     * 状态
     * @see com.imooc.entity.enums.ProductStatus
     */
    private String status;
    // 起投金额
    private BigDecimal thresholdAmount;
    // 投资步长
    private BigDecimal stepAmount;
    // 锁定期
    private Integer lockTerm;
    // 收益期。0-100 百分比值
    private BigDecimal rewardRate;
    // 备注
    private String memo;
    // 创建时间
    private Date createAt;
    // 更新时间
    private Date updateAt;
    // 创建者
    private String createUser;
    // 更新者
    private String updateUser;
package com.imooc.entity.enums;
/**
 * 产品状态
 */
public enum  ProductStatus {

    AUDITING("审核中"),

    IN_SELL("销售中"),

    LOCAKED("暂停销售"),

    FINISHED("已结束");

    private String desc;

    ProductStatus(String desc){
        this.desc = desc;
    }
    public String getDesc() {
        return desc;
    }
}

在entity模块下创建Product类和枚举类型OrderType、OrderStatus

package com.imooc.entity;
/**
 * 订单
 * @Entity 实体类
 * @Id 主键
 */
@Entity
public class Product {
    //订单编号
    @Id
    private String orderId;
    //渠道编号
    private String chanId;
    //渠道用户编号
    private String chanUserId;
    /**
     * @see com.imooc.entity.enums.OrderType
     */
    private String orderType;
    //产品编号
    private String productId;
    //金额
    private BigDecimal amount;
    //外部订单编号
    private String outerOrderId;
    /**
     * @see com.imooc.entity.enums.OrderStatus
     */
    private String orderStatus;
    //备注
    private String memo;
    //创建时间
    private Date createAt;
    //更新时间
    private Date updateAt;
package com.imooc.entity.enums;

/**
 * 订单类型
 */
public enum OrderType {
    APPLY("申购"),

    REDEEM("赎回");

    private String desc;

    OrderType(String desc){
        this.desc = desc;
    }

    public String getDesc() {
        return desc;
    }
}
package com.imooc.entity.enums;

public enum OrderStatus {
    INIT("初始化"),

    PROCESS("处理中"),

    SUCCESS("成功"),

    FAIL("失败");

    private String desc;

    OrderStatus(String desc){
        this.desc = desc;
    }

    public String getDesc() {
        return desc;
    }
}