【10/29-11/11(第五次)学习总结】

spring boot开启声明式事务

  1. 在启动类上开启注解
@SpringBootApplication
@EnableTransactionManagement
public class goodsApp {
    public static void main(String[] args) {
        SpringApplication.run(goodsApp.class,args);
    }
}
  1. 在serviceimpl 中假如注解
	@Transactional
    public ResponseResult goodTransaction(Integer goodId, Integer num) {
        LambdaQueryWrapper<Good> queryWrapper = new LambdaQueryWrapper<>();
        Map<String,Object> map = new HashMap<>();
        queryWrapper.eq(Good::getGoodId,goodId);

        int ii = 1 / 0;

        Good good = goodMapper.selectById(goodId);
        if (good.getGoodNums() < num){
            return ResponseResult.errorResult(AppHttpCodeEnum.STOCK_INSUFFICIENCY);
        }

        if (good.getIsDeleted() == 1){
            return ResponseResult.errorResult(AppHttpCodeEnum.HAVE_BEEN_DELETED);
        }
//        String lastTime =  DateFormatUtils.format(good.getUpdateTime(),"yyyy-MM-dd HH:mm:ss.SSSSSS");
        Date lastTime =  good.getUpdateTime();
        queryWrapper.clear();

        queryWrapper.eq(Good::getGoodId,goodId);

        good.setGoodNums(good.getGoodNums() - num);
        for (int i = 0; i < 10; i++) {


            good = goodMapper.selectById(goodId);

            if (good.getGoodNums() < num){
                return ResponseResult.errorResult(AppHttpCodeEnum.STOCK_INSUFFICIENCY);
            }else {
                good.setGoodNums(good.getGoodNums() - num);
            }

            lastTime = good.getUpdateTime();

            good.setUpdateTime(new Date());

            queryWrapper.eq(Good::getUpdateTime, lastTime);
            final int updateRow = goodMapper.update(good, queryWrapper);
            if (updateRow > 0) {
                map.put("result", "success");
                map.put("success_buy_nums", num);
                map.put("good",good);
                return ResponseResult.okResult(map);
            }
        }

        return ResponseResult.errorResult(AppHttpCodeEnum.STOCK_INSUFFICIENCY);
    }

@RequestBody中的小问题

在postman中进行调试的时候一定要加引号,否则会报错。

  1. 只能用raw,Json格式

在这里插入图片描述

	@PostMapping("/checkMsgCode")
    public ResponseResult checkMsgCode(
//            @RequestParam(value = "tele") String tele,
//            @RequestParam(value = "msgCode") String msgCode
            @RequestBody Map<String,String>map
            ){
        System.out.println(map);
        log.info(map.toString());
        String tele = map.get("tele");
        String msgCode = map.get("msgCode");
        return msgCodeService.checkMsgCode(tele,msgCode);
    }

@RequestParam

在postman调试时可以选择的Body类型有

  1. form-data在这里插入图片描述
  2. x-www-form-urlencoded 在这里插入图片描述
  3. raw json格式会报错,不能使用
    在这里插入图片描述

过滤器和拦截器的区别

在这里插入图片描述

多个拦截器的执行顺序

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

spring mvc 前后端分离响应过程

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

Restful 风格

操作传统方式REST风格
查询操作getUserById?id=1user/1–>get请求方式
保存操作saveUseruser–>post请求方式
删除操作deleteUser?id=1user/1–>delete请求方式
更新操作updateUseruser–>put请求方式

spring mvc 常用组件

  • DispatcherServlet:前端控制器,不需要工程师开发,由框架提供

作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求

  • HandlerMapping:处理器映射器,不需要工程师开发,由框架提供

作用:根据请求的url、method等信息查找Handler,即控制器方法

  • Handler:处理器,需要工程师开发

作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理

  • HandlerAdapter:处理器适配器,不需要工程师开发,由框架提供

作用:通过HandlerAdapter对处理器(控制器方法)进行执行

  • ViewResolver:视图解析器,不需要工程师开发,由框架提供

作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、

RedirectView

  • View:视图

作用:将模型数据通过页面展示给用户

mybatis 开启日志输出 sql语句

在这里插入图片描述

Mybatis plus Service CRUD 接口

在这里插入图片描述Service CRUD 接口 官方文档

  1. 首先创建Mapper接口
public interface ApUserMapper extends BaseMapper<ApUser> {

}
  1. 创建service接口

在这里面可以实现自己的方法,并且一般的增删改查操作都会不需要再自己写,

public interface IApUserService extends IService<ApUser> {

    ResponseResult login(LoginDto dto);
}
  1. 创建service实现类
 */
@Service
public class ApUserServiceImpl extends ServiceImpl<ApUserMapper, ApUser> implements IApUserService {

    @Override
    public ResponseResult login(LoginDto dto) {
  	/*
  	进行自定义方法的实现
  	*/
    }
}

  1. controller中注入service

其中增删改查的方法见官网Service CRUD 接口 官方文档

@RestController
@RequestMapping("/api/v1/login")
public class LoginController {

    @Autowired
    private IApUserService userService;

    @PostMapping("/login_auth")
    public ResponseResult login(@RequestBody LoginDto dto){
        return userService.login(dto);
    }
}

逻辑删除

	@TableField("is_deleted")
    @TableLogic
    private Integer isDeleted;

mybatis plus 会自动实现删除操作时将该字段名进行赋值为1的操作,并且查询时我们不需要添加条件 is_deleted = 1,mybatis plus 自动加上该条件。

条件构造器构造查询条件

在这里插入图片描述

mybatis 乐观锁

  1. @Version
  2. 加拦截器
    在这里插入图片描述

多表查询

  1. 创建接口
    在这里插入图片描述2. 生成XML文件
    在这里插入图片描述

  2. 编写xml中的sql代码
    在这里插入图片描述 4. service进行调用

在这里插入图片描述

自动填充

  1. 在实体类中加上注解
    在这里插入图片描述2. 添加配置类
    在这里插入图片描述

mybatis插件顺序

在这里插入图片描述

多个数据库进行查询

  1. 加入依赖
    在这里插入图片描述
  2. yml进行配置
    在这里插入图片描述
  3. 设置使用的是哪个数据库
    在这里插入图片描述

mybatisx插件可以快速定位mapper.xml接口

可以生产sql代码、xml文件等

mybatisx插件地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值