谷粒商城知识点3

1、时间格式的大小写?

字母 日期或时间元素 表示 示例 
G Era 标志符 Text AD 
y 年 Year 1996; 96 
M 年中的月份 Month July; Jul; 07 
w 年中的周数 Number 27 
W 月份中的周数 Number 2 
D 年中的天数 Number 189 
d 月份中的天数 Number 10 
F 月份中的星期 Number 2 
E 星期中的天数 Text Tuesday; Tue 
a Am/pm 标记 Text PM 
H 一天中的小时数(0-23) Number 0 
k 一天中的小时数(1-24) Number 24 
K am/pm 中的小时数(0-11) Number 0 
h am/pm 中的小时数(1-12) Number 12 
m 小时中的分钟数 Number 30 
s 分钟中的秒数 Number 55 
S 毫秒数 Number 978 
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00 
Z 时区 RFC 822 time zone -0800

2、@RequestBody 和@ReponseBody使用的区别是什么?

1、ResponseBody

@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用;

通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。

作用: 
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。 
使用时机: 
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

2、RequestBody

  @RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

例子:

@RequestMapping("/login.do")
@ResponseBody
public Object login(@RequestBody User loginUuser, HttpSession session) {
    user = userService.checkLogin(loginUser);
    session.setAttribute("user", user);
    return new JsonResult(user);
}

3、ArrayList与List的区别?列表与数组的关系?

List<Long> paths = new ArrayList<Long>();    //ArrayList是List的实现类。

 

4、null的流会返回null吗?

不会,如果没有元素,会返回一个空的list(待验证)

5、分页查询具流程是什么,用到了什么类,什么方法,仔细了解一下,分页插件是怎么起作用的,配置类是怎么起作用的?

1. 通过QueryWrapper动态查询到数据封装到I相应List集合中;

2.通过Mybatis-plus提供的Ipage类进一步封装;

3.利用自己写的PageUtils类封装返回给前端。

    public PageUtils queryPage(Map<String, Object> params) {
        IPage<AttrEntity> page = this.page(
                new Query<AttrEntity>().getPage(params),
                new QueryWrapper<AttrEntity>()
        );

        return new PageUtils(page);
    }

6、@Param作用领域是啥,还有#{}与${}的区别?

补充:当查询的字段是整数时,输入的整数参数加上了单引号也是没有任何问题的;对于字段是不需要加单引号的,加上了也能够查出来,但是进行排序等操作时就没有相应效果了。

7、引入了mybati-plus依赖之后,要在对应的服务里面配置sql相关信息,不然会报错。不想要此依赖,可以用<exclusions>剔除掉。

8、@RestController是 @Controller 与@ResponseBod的结合。

9、后端校验中需要在实体类的属性上加上@NotNull(javax.validation.constraints包下,也就是导入依赖validation-api,之前一直没作用是导入了2.0的版本,换成了1.0的就可以了)等注解,并且在Controller类中的想要CRUD方法中加入@Valid注解,注意要引入spring-boot-starter-validation注解,因为Validation Starter no longer included in web starters。

10、@Validated 与 @Valid的区别,@Validated可以用于分组校验。@Validated是有spring框架提供的, @Valid是有javax包提供的。
@RequestMapping("/save")
    //@RequiresPermissions("product:brand:save")
    public R save(@Valid @RequestBody BrandEntity brand){
		brandService.save(brand);

        return R.ok();
    }

自定义校验器(自定义注解):有点复杂

11、default关键字:一个借口中的方法在使用关键字default后可以有方法体了。

12、@RestControllerAdvice 是@ResponseBody和@ControllerAdvice的结合体, 用于统一处理异常。

13、@PathVariable 映射 URL 绑定的占位符通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx”) 绑定到操作方法的入参中。一般与@RequestMapping(method = RequestMethod.GET)一起使用

@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String name){
        return userService.selectUser(name);
    }
14、QueryWrapper<所要查询的实体类> wrapper = new QueryWrapper<所要查询的实体类>()用于sql查询查询。没有动态条件或者动态条件全都不满足是返回表中所有数据。
15、@JsonInclude(JsonInclude.Include.NON_EMPTY)(加在实体类的属性上)用于在后端判断返回给前端的json数据中的某一个属性是否为空。

16、VO(value object)值对象:

1、接收页面传递来的数据,封装对象

2、将业务处理完成的对象,封装成页面要用的数据

后端向前端传值的时候,每一次都是返回实体类对象(Json化),但是当传输的值不仅仅是实体类时,就需要VO。

17、规范:

controller类主要做:

1、接收前端信息并进行校验

2、调用想要service处理数据

3、对数据进行封装返回给前端

service主要做具体的业务逻辑,自己的service可以调用别的service,但不要调用别的dao;本类的service调用本类的dao。

18、琐碎的东西

    //好好理解这个递归

    
    private List<Long> findParentPath(Long catelogId,List<Long> paths){
        paths.add(catelogId);
        CategoryEntity byId = this.getById(catelogId);
        if (byId.getParentCid() != 0){
            findParentPath(byId.getParentCid(),paths);
        }
        return paths;

    }

在数据库中,多对多一般就有一张中间表,比如品牌表与分类表是多对多的。如果分类表中的数据发生变化时,也不能只改分类表,相关联的表也要修改,尤其是一些表中存储了关于分类表的冗余字段。

避坑:

    @Override
    public void saveAttr(AttrVo attr) {
        AttrEntity attrEntity = new AttrEntity();
        BeanUtils.copyProperties(attr, attrEntity);
        this.save(attrEntity);


        AttrAttrgroupRelationEntity attrAttrgroupRelationEntity = new AttrAttrgroupRelationEntity();
        Long a = attr.getAttrId(); //a确实为null
        attrAttrgroupRelationEntity.setAttrId(attrEntity.getAttrId());   //为什么用attr.getAttrId()得不到数据
        attrAttrgroupRelationEntity.setAttrGroupId(attr.getAttrGroupId());
        attrAttrgroupRelationDao.insert(attrAttrgroupRelationEntity);


    }

给CategoryServiceImpl.java和BrandServiceImpl.java中的方法加上@Transactional类之后修改不了对应的表了,不知道是什么问题。(P75最后几秒)

事务提交不了的情况

    @Transactional
    @Override
    public void updateCascade(CategoryEntity category) {
        this.updateById(category);
        categoryBrandRelationService.updateCategory(category.getCatId(),category.getName());

    } 


    //使用自定义sql语句方式,再加上事务就有问题,事务提交不了
    @Override
    public void updateCategory(Long catId, String name) {
         this.baseMapper.updateCategory(catId,name); //方法2自定义sql语句
    }

equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。

销售属性不和属性分组绑定,只有规格参数(基本属性)才和属性分组绑定,他们之间有一个关联的中间表。一个属性分组只对应一个分类。

81P,85P,87P的业务逻辑好好理解!

用Vo是规范,前后端交互用Vo,操作数据库用entity。

String.join()做字符串列表的拼接。

可以在服务的配置文件中设置时间的格式

spring: 
    jackson:
        date-format: yyyy-MM-dd HH:mm:ss

Third-Party服务因为无法使用引入nacos的外部配置,所以直接OSS的相关信息也在了application.yml里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值