springcloud笔记01重要_支付模块、lombok使用、IDEA打开文件显示多行

manven工程要发布一些包给别的工程共用时,可以先clean,后install发布到仓库
在这里插入图片描述
注意Maven中dependencyManagement和dependencies的区别:dependencyManagement并没有引入jar
在这里插入图片描述

支付模块

订单模块调用支付模块(微服务提供者)
在这里插入图片描述

记住:约定 》 配置 》 编码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改POM和写Yml一般都不自己写,
但是application.yml中建议有微服务端口号和服务名称

建表

CREATE TABLE payment (
 id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
 SERIAL VARCHAR(200) DEFAULT '',
 PRIMARY KEY(id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

lombok使用

引入包

<dependency>

          <groupId>org.projectlombok</groupId>

          <artifactId>lombok</artifactId>

          <version>x.x.x</version>

          <scope>provided</scope>

    </dependency>

安装lombok插件
在这里插入图片描述
开启注解支持
在这里插入图片描述
Lombok的scope=provided,说明它只在编译阶段生效,不需要打入包中。事实正是如此,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。

常用注解:
@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter :使用方法同上,区别在于生成的是getter方法。
@ToString :注解在类,添加toString方法。
@EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
@NoArgsConstructor: 注解在类,生成无参的构造方法。
@RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
@Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Slf4j: 注解在类,生成log变量,严格意义来说是常量。

IDEA打开文件显示多行

在这里插入图片描述
在这里插入图片描述

启动微服务,查询时报错

Invalid bound statement (not found): com.atguigu.springcloud.dao.PaymentDao.getPaymentById
是dao映射出现问题,修改yml
在这里插入图片描述
完整yml

server:
  port: 8001

#凡是微服务,建议一定要有端口号和微服务名称
spring:
  application:
    name:cloud-payment-service
  datasource:
      type: com.alibaba.druid.pool.DruidDataSource   # 当前数据源操作类型
      driver-class-name: org.gjt.mm.mysql.Driver
      url: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=utf-8&useSSL=false  # mysql5.7后进行了安全加固
      username: root
      password: root


mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.atguigu.springcloud.entities # 所有Entity别名类所在包

插入报错

在这里插入图片描述
在这里插入图片描述
但是我明明是post请求,
在这里插入图片描述
这是因为浏览器大多对post请求支持度不好,

1、对于插入数据库的操作,一般用postman模拟

在这里插入图片描述

2、既然是要把数据传给前端妹子,那么你自己要先测试通过

总结一下:

微服务cloud父工程注意:提前把字符编码改好
在这里插入图片描述
pom文件依赖导入

接着是子模块:
1、建module
2、改pom,导入需要的依赖
3、写yml,注意最好把端口,服务名都写好,
4、主启动类
5、业务类:业务类从建表开始,创建实体可以使用lombok减少重复代码,还要有一个json封装体,用于给前端妹子传json串

/**
 * Json封装体,方便前后端分离,不跟前端讲业务逻辑,只传给他CommonResult
 * 按照约定去判断编码是否成功,成功则进行后续显示。
 *
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {

    private Integer code; //消息的数字编码,类似404
    private String message; //给前端的消息,成功或者失败
    private T      data;  //使用泛型,保证类的通用性,任何消息都可以发送

    public CommonResult(Integer code, String message){
        this(code, message, null);
    }
}

dao层,接口注解使用@Mapper,因为用的是mybatis,所以尽量用这个mapper注解,使用Repository可能插入数据有问题
映射文件注意事项

<?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.atguigu.springcloud.dao.PaymentDao">
    <!--mybatis数据插入成功,必然会返回来一个数字,如果大于0则插入成功,所以新增方法我们都会返回int,使用useGeneratedKeys="true"返回这个key,
    keyProperty="id"表示返回实体类中的id属性-->
    <insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
        insert into payment(serial) values(#{serial});
    </insert>

    <resultMap id="BaseResultMap" type="com.atguigu.springcloud.entities.Payment">
        <!--jdbcType="BIGINT"指定数据表中类型-->
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="serial" property="serial" jdbcType="VARCHAR"/>
    </resultMap>
    <!--返回类型最好用resultMap,避免其他人编写不规范而导致映射的麻烦-->
    <select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap">
        select * from payment where id=#{id};
    </select>

</mapper>

控制层注意事项:

@RestController
@Slf4j   //打印日志信息
public class PaymentController {

    @Resource
    private PaymentService paymentService;

    //因为要做前后端分离,所以我们给前端传的是json串,所以返回CommonResult对象
    //使用restFul风格,写操作用post
    // 现在做的是微服务的提供者,真正操作数据库的,所以写明确,做到望文生义,
    //实体payment,操作create
    @PostMapping(value = "/payment/create")
    public CommonResult create(Payment payment) {
        //返回的result大于0表示插入成功
        int result = paymentService.create(payment);
        //在企业里,使用日志来打印信息
        log.info("*****插入结果:" + result);

        if (result > 0) {
            //插入成功给前端妹子发信息
            return new CommonResult(200, "插入数据库成功", result);
        } else {
            return new CommonResult(444, "插入数据库失败", null);
        }
    }

    //读操作,使用getMapping
    @GetMapping(value = "/payment/get/{id}")
    public CommonResult create(@PathVariable("id") Long id) {
        //返回的result大于0表示插入成功
        Payment payment = paymentService.getPaymentById(id);
        //在企业里,使用日志来打印信息
        log.info("*****查询结果:" + payment);

        if (payment != null) {
            //插入成功给前端妹子发信息
            return new CommonResult(200, "查询成功", payment);
        } else {
            return new CommonResult(444, "没有对应记录,查询ID:"+id, null);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值