完成商品属性分组和商品属性关联维护

news2024/12/23 13:42:17

文章目录

    • 1.前端页面搭建
        • 1.复制attrgroup-attr-relation.vue到src/views/modules/commodity下
        • 2.加入超链接和引入组件 src/views/modules/commodity/attrgroup.vue
          • 1.加入超链接
          • 2.引入组件
        • 3.数据池加入变量
        • 4.使用组件
          • 1.引用组件
          • 2.添加方法
          • 3.测试,点击关联,会输出当前的id
        • 5.修改请求,将attrgroup-attr-relation.vue的请求修改成环境变量 + 资源路径的形式
        • 6.解析
          • 1.点击关联按钮,会将这行的id传到relationAttrHandle方法中
          • 2.这个方法,首先显示对话框,然后调用组件的init方法
          • 3.init方法向后端发送请求,返回当前属性组已经关联的商品属性(基本属性)的数据
    • 2.第六次部署
        • 1.后端部署
          • 1.由于只修改了sunliving-commodity模块,所以不需要区分多环境
          • 2.将sunliving-commodity模块设置成prod
          • 3.maven打包
          • 4.target目录测试jar包执行
          • 5.ctrl + c 退出,部署到服务器
        • 2.前端部署
          • 1.由于所有请求都是环境变量 + 资源路径,所以不需区分多环境
          • 2.根目录npm run build
          • 3.nvm切换到node16,dist目录下执行serve,模拟线上环境
          • 4.验证码没出来503服务不可用,原因是Nacos将这些服务下线了,全部上线即可,然后重启前端
          • 5.测试无误
          • 6.将dist目录下的文件部署到服务器
          • 7.测试无误
    • 2.点击关联按钮,可以看到该组关联的所有商品属性
        • 1.后端 sunliving-commodity 模块
          • 1.分析资源路径写法
          • 2.AttrService.java 新增方法 根据属性组id获取关联的属性
          • 3.AttrServiceImpl.java 实现方法
          • 4.AttrgroupController.java 根据路径参数传来的组id得到关联的所有属性信息
          • 5.测试
        • 2.前端 attrgroup-attr-relation.vue
          • 1.接受数据
          • 2.测试
    • 3.删除某个商品属性分组关联的商品属性,支持批量删除
        • 1.梳理表之间的关系
        • 2.后端 sunliving-commodity模块
          • 1.AttrAttrgroupRelationDao.java 新增批量删除方法
          • 2.AttrAttrgroupRelationDao.xml 实现批量删除
          • 3.AttrService.java 新增批量删除方法
          • 4.AttrServiceImpl.java 实现批量删除
        • 2.分析前端请求
          • 1.AttrgroupController.java 编写接口
          • 2.后端测试
          • 3.前端测试
    • 4.查询某个商品的属性分组可以关联的商品属性(支持分页)
        • 思路分析图
        • 1.分析前端请求 attrgroup-attr-relation.vue
          • 1.点击新建关联
          • 2.调用getDataList方法
          • 3.发送请求,携带attrGroupId
        • 2.后端 sunliving-commodity 模块(先不分页)
          • 1.AttrService.java 添加方法 根据属性组id获取可以关联的属性
          • 2.AttrServiceImpl.java 实现方法
          • 3.AttrgroupController.java 编写接口
          • 4.测试并分析结果
            • 1.请求携带属性组参数为1,此时返回了一个可关联的属性
            • 2.首先从属性组表中查找id为1的categoryId为301
            • 3.然后从属性表中查找是基本属性的,并且categoryId为301的发现有12,14,21符合要求
            • 4.最后从关联表中查询是否属性id已经存在,发现12,21已经被关联,所以最终只返回id为14的属性
        • 3.后端 sunliving-commodity 模块(支持分页,包含分页模板!!!)
          • 1.AttrService.java 添加方法 根据属性组id获取可以关联的属性,并且分页
          • 2.AttrServiceImpl.java 实现方法(也相当于分页模板)
          • 3.分页结果工具类 PageUtils
          • 4.测试
    • 5.新建属性和属性组之间的关联(支持批量添加)
        • 1.分析前端请求 attrgroup-attr-relation.vue
          • 1.点击确认新增
          • 2.调用submitAddRealtion方法
          • 3.可以得到新增的基本属性的数据
          • 4.可以看到,将attrId和attrGroupId组成的js对象数组传递给了后端
        • 2.后端 sunliving-commodity 模块
          • 1.直接写controller即可
          • 2.测试

1.前端页面搭建

1.复制attrgroup-attr-relation.vue到src/views/modules/commodity下

image-20240420191436885

2.加入超链接和引入组件 src/views/modules/commodity/attrgroup.vue
1.加入超链接
<el-button type="text" size="small" @click="relationAttrHandle(scope.row.id)">关联</el-button>

image-20240420191725103

2.引入组件

image-20240420191824864

image-20240420191924712

3.数据池加入变量

image-20240420192031989

4.使用组件
1.引用组件

image-20240420192335584

2.添加方法
    //处理分组与属性的关联
    relationAttrHandle(groupId) {
      this.relationVisible = true;
      console.log(groupId)
      this.$nextTick(() => {
        this.$refs.relationUpdate.init(groupId);
      });
    }
3.测试,点击关联,会输出当前的id

image-20240420192637334

5.修改请求,将attrgroup-attr-relation.vue的请求修改成环境变量 + 资源路径的形式

image-20240420193149940

6.解析
1.点击关联按钮,会将这行的id传到relationAttrHandle方法中

image-20240420193344565

2.这个方法,首先显示对话框,然后调用组件的init方法

image-20240420193457781

image-20240420193444289

3.init方法向后端发送请求,返回当前属性组已经关联的商品属性(基本属性)的数据

image-20240420193605313

2.第六次部署

1.后端部署
1.由于只修改了sunliving-commodity模块,所以不需要区分多环境
2.将sunliving-commodity模块设置成prod

image-20240420221008545

3.maven打包

image-20240420221121004

4.target目录测试jar包执行

image-20240420221435283

5.ctrl + c 退出,部署到服务器

image-20240420222026383

2.前端部署
1.由于所有请求都是环境变量 + 资源路径,所以不需区分多环境
2.根目录npm run build

image-20240420222320588

3.nvm切换到node16,dist目录下执行serve,模拟线上环境

image-20240420222417756

4.验证码没出来503服务不可用,原因是Nacos将这些服务下线了,全部上线即可,然后重启前端
5.测试无误

image-20240420223140403

6.将dist目录下的文件部署到服务器
7.测试无误

image-20240420223800354

2.点击关联按钮,可以看到该组关联的所有商品属性

1.后端 sunliving-commodity 模块
1.分析资源路径写法

image-20240420195227841

2.AttrService.java 新增方法 根据属性组id获取关联的属性
    /**
     * 根据属性组id获取关联的属性
     * @param attrgroupId
     * @return
     */
    List<AttrEntity> getRelationAttr(Long attrgroupId);
3.AttrServiceImpl.java 实现方法
    @Override
    public List<AttrEntity> getRelationAttr(Long attrgroupId) {
        // 根据attrgroupId查询出所有的关联属性
        List<AttrAttrgroupRelationEntity> relationEntities = attrAttrgroupRelationService.list(new QueryWrapper<AttrAttrgroupRelationEntity>()
                .eq("attr_group_id", attrgroupId));
        // 如果relationEntities为空,直接返回null
        if (relationEntities.isEmpty()) {
            return null;
        }
        // 使用stream api获取所有的attrId
        List<Long> attrIds = relationEntities.stream().map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());
        // 根据attrIds查询出所有的attr
        return attrDao.selectBatchIds(attrIds);
    }
4.AttrgroupController.java 根据路径参数传来的组id得到关联的所有属性信息
    /**
     * 获取属性分组关联的属性
     */
    @RequestMapping("/{attrGroupId}/attr/relation")
    // @RequiresPermissions("commodity:attrgroup:list")
    public R attrRelation(@PathVariable("attrGroupId") Long attrGroupId) {
        // 根据attrGroupId查询关联的属性
        List<AttrEntity> relationAttr = attrService.getRelationAttr(attrGroupId);
        return R.ok().put("data", relationAttr);
    }
5.测试

image-20240421103920387

2.前端 attrgroup-attr-relation.vue
1.接受数据

image-20240421104247043

2.测试

image-20240421104308822

3.删除某个商品属性分组关联的商品属性,支持批量删除

1.梳理表之间的关系

image-20240421105334938

2.后端 sunliving-commodity模块
1.AttrAttrgroupRelationDao.java 新增批量删除方法
	// 批量删除关联关系
    void deleteBatchRelation(@Param("entities") List<AttrAttrgroupRelationEntity> entities);
2.AttrAttrgroupRelationDao.xml 实现批量删除
    <delete id="deleteBatchRelation">
        delete
        from `commodity_attr_attrgroup_relation`
        where
        <foreach collection="entities" item="item" separator="or">
            (attr_id = #{item.attrId} and attr_group_id = #{item.attrGroupId})
        </foreach>
    </delete>
3.AttrService.java 新增批量删除方法
    /**
     * 批量删除关联关系
     * @param entities
     */
    void deleteRelation(List<AttrAttrgroupRelationEntity> entities);
4.AttrServiceImpl.java 实现批量删除
    @Override
    public void deleteRelation(List<AttrAttrgroupRelationEntity> entities) {
        // 批量删除关联关系,这里的entities只有attrId和attrGroupId
        attrAttrgroupRelationDao.deleteBatchRelation(entities);
    }
2.分析前端请求
  • 可以看到传入的是AttrAttrgroupRelationEntity类型的数组

image-20240421113329188

1.AttrgroupController.java 编写接口
    /**
     * 移除关联
     * @param entities
     * @return
     */
    @RequestMapping("/attr/relation/delete")
    public R deleteRelation(@RequestBody AttrAttrgroupRelationEntity[] entities) {
        attrService.deleteRelation(Arrays.asList(entities));
        return R.ok();
    }
2.后端测试

image-20240421113717396

image-20240421113725441

image-20240421113735608

3.前端测试

image-20240421115951190

4.查询某个商品的属性分组可以关联的商品属性(支持分页)

思路分析图

image-20240421143850042

1.分析前端请求 attrgroup-attr-relation.vue
1.点击新建关联

image-20240421140022831

2.调用getDataList方法

image-20240421140032641

3.发送请求,携带attrGroupId

image-20240421140116761

2.后端 sunliving-commodity 模块(先不分页)
1.AttrService.java 添加方法 根据属性组id获取可以关联的属性
    /**
     * 根据属性组id获取可以关联的属性
     * @param attrGroupId
     * @return
     */
    List<AttrEntity> getAttrRelation(Long attrGroupId);
2.AttrServiceImpl.java 实现方法
    @Override
    public List<AttrEntity> getAttrRelation(Long attrGroupId) {
        // 1. 根据属性组id,在属性组表中查询出对应的categoryId
        Long categoryId = attrgroupDao.selectById(attrGroupId).getCategoryId();
        // 2.根据这个id去属性表中查询出所有的属性
        List<AttrEntity> allAttr = attrDao.selectList(new QueryWrapper<AttrEntity>().eq("category_id", categoryId));
        // 3.查询关联表的所有数据,不加条件
        List<AttrAttrgroupRelationEntity> relationEntities = attrAttrgroupRelationService.list();
        // 4.获取所有的attrId
        List<Long> attrIds = relationEntities.stream().
                map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());
        // 5.过滤出没有关联的属性,并且attrType为1
        List<AttrEntity> noRelationAttr = allAttr.stream().filter(attrEntity -> {
            return !attrIds.contains(attrEntity.getAttrId()) && attrEntity.getAttrType() == 1;
        }).collect(Collectors.toList());

        return noRelationAttr;
    }
3.AttrgroupController.java 编写接口
    /**
     * 根据属性组id获取可以关联的属性
     *
     * @param attrGroupId
     * @return
     */
    @RequestMapping("{attrGroupId}/noattr/relation")
    public R noattrRelation(@PathVariable("attrGroupId") Long attrGroupId) {
        List<AttrEntity> attrRelation = attrService.getAttrRelation(attrGroupId);
        return R.ok().put("page", attrRelation);
    }
4.测试并分析结果
1.请求携带属性组参数为1,此时返回了一个可关联的属性

image-20240421143748163

2.首先从属性组表中查找id为1的categoryId为301

image-20240421144053620

3.然后从属性表中查找是基本属性的,并且categoryId为301的发现有12,14,21符合要求

image-20240421144153571

4.最后从关联表中查询是否属性id已经存在,发现12,21已经被关联,所以最终只返回id为14的属性

image-20240421144240296

3.后端 sunliving-commodity 模块(支持分页,包含分页模板!!!)
1.AttrService.java 添加方法 根据属性组id获取可以关联的属性,并且分页
    /**
     * 根据属性组id获取可以关联的属性,并且分页
     * @param params
     * @param attrGroupId
     * @return
     */
    PageUtils  queryPageAttrRelation(Map<String, Object> params, Long attrGroupId);
2.AttrServiceImpl.java 实现方法(也相当于分页模板)
  • 前端传入的参数一般为
    • key:查询的key
    • page:当前页
    • limit:页面大小
  • 进行分页查询的步骤
    • 获取关键字和分页参数
    • 使用QueryWrapper构建查询条件
    • 创建Page对象,传入page和limit
    • 对Page对象进行处理
    • 处理后,使用PageUtils封装返回结果
    @Override
    public PageUtils queryPageAttrRelation(Map<String, Object> params, Long attrGroupId) {
        // 1.获取关键字和分页参数
        String key = (String) params.get("key");
        int currentPage = Integer.parseInt(params.getOrDefault("page", "1").toString());
        int pageSize = Integer.parseInt(params.getOrDefault("limit", "10").toString());

        // 2.构建基本查询条件,根据key进行查询
        QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(key)) {
            queryWrapper.and(wrapper ->
                    wrapper.eq("attr_id", key).or().like("attr_name", key)
            );
        }

        // 3.获取已关联的属性ID
        Set<Long> relatedAttrIds = attrAttrgroupRelationService.list().stream()
                .map(AttrAttrgroupRelationEntity::getAttrId)
                .collect(Collectors.toSet());

        // 4.排除已关联的属性ID
        if (!relatedAttrIds.isEmpty()) {
            queryWrapper.notIn("attr_id", relatedAttrIds);
        }

        // 5.附加查询条件,根据attrGroupId查询出对应的categoryId
        if (attrGroupId != null) {
            Long categoryId = attrgroupDao.selectById(attrGroupId).getCategoryId();
            if (categoryId != null) {
                queryWrapper.eq("category_id", categoryId);
                queryWrapper.eq("attr_type", 1);  // 只包括类型为1的属性
            }
        }

        // 6.执行分页查询
        Page<AttrEntity> page = new Page<>(currentPage, pageSize);
        IPage<AttrEntity> attrPage = attrDao.selectPage(page, queryWrapper);

        // 7.使用PageUtils封装返回结果
        return new PageUtils(attrPage);
    }
3.分页结果工具类 PageUtils
/**
 * 分页工具类
 *
 * @author Mark sunlightcs@gmail.com
 */
public class PageUtils implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 * 总记录数
	 */
	private int totalCount;
	/**
	 * 每页记录数
	 */
	private int pageSize;
	/**
	 * 总页数
	 */
	private int totalPage;
	/**
	 * 当前页数
	 */
	private int currPage;
	/**
	 * 列表数据
	 */
	private List<?> list;
	
	/**
	 * 分页
	 * @param list        列表数据
	 * @param totalCount  总记录数
	 * @param pageSize    每页记录数
	 * @param currPage    当前页数
	 */
	public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
		this.list = list;
		this.totalCount = totalCount;
		this.pageSize = pageSize;
		this.currPage = currPage;
		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
	}

	/**
	 * 分页
	 */
	public PageUtils(IPage<?> page) {
		this.list = page.getRecords();
		this.totalCount = (int)page.getTotal();
		this.pageSize = (int)page.getSize();
		this.currPage = (int)page.getCurrent();
		this.totalPage = (int)page.getPages();
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrPage() {
		return currPage;
	}

	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}

	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}
	
}

4.测试

image-20240421163852974

image-20240421185521692

5.新建属性和属性组之间的关联(支持批量添加)

1.分析前端请求 attrgroup-attr-relation.vue
1.点击确认新增

image-20240421190533084

2.调用submitAddRealtion方法

image-20240421190711525

3.可以得到新增的基本属性的数据

image-20240421190704860

4.可以看到,将attrId和attrGroupId组成的js对象数组传递给了后端

image-20240421190908128

2.后端 sunliving-commodity 模块
1.直接写controller即可
    /**
     * 批量增加关联
     *
     * @param entities
     * @return
     */
    @RequestMapping("/attr/relation")
    public R relation(@RequestBody AttrAttrgroupRelationEntity[] entities) {
        attrAttrgroupRelationService.saveBatch(Arrays.asList(entities));
        return R.ok();
    }
2.测试

image-20240421191825365

image-20240421191831778

image-20240421191836262

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【低照度图像增强系列(7)】RDDNet算法详解与代码实现(同济大学|ICME)

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检测…

qt改变样式表 label

border:1px solid black; background-color:rgb(238,234,235); border-color:rgb(0,112,249);

Zabbix实现7x24小时架构监控

上篇&#xff1a;https://blog.csdn.net/Lzcsfg/article/details/138774511 文章目录 Zabbix功能介绍Zabbix平台选择安装Zabbix监控端部署MySQL数据库Zabbix参数介绍登录Zabbix WEBWEB界面概览修改WEB界面语言添加被控主机导入监控模板主机绑定模板查看主机状态查看监控数据解…

一文了解基于ITIL的运维管理体系框架

本文来自腾讯蓝鲸智云社区用户&#xff1a;CanWay ITIL&#xff08;Information Technology Infrastructure Library&#xff09;是全球最广泛使用的 IT 服务管理方法&#xff0c;旨在帮助组织充分利用其技术基础设施和云服务来实现增长和转型。优化IT运维&#xff0c;作为企业…

U-Boot menu菜单分析

文章目录 前言目标环境背景U-Boot如何自动调起菜单U-Boot添加自定义命令实践 前言 在某个厂家的开发板中&#xff0c;在进入它的U-Boot后&#xff0c;会自动弹出一个菜单页面&#xff0c;输入对应的选项就会执行对应的功能。如SD卡镜像更新、显示设置等&#xff1a; 目标 本…

Linux进程--函数 system 和 popen 的区别

system() 和 popen() 是 C 语言中用于执行外部命令的两个函数&#xff0c;它们的功能类似&#xff0c;但在使用方式和特性上有一些区别。 system() system() 函数允许您在程序中执行外部命令&#xff0c;并等待该命令执行完成后继续执行程序。其基本语法如下&#xff1a; in…

本地idea连接虚拟机linux中的docker进行打包镜像上传--maven的dockerfile-maven-plugin插件

项目名必须是英文,-,.,_,这些数字,idea需要管理员运行,因为idea控制台mvn命令需要管理员权限才能运行(maven需配置环境变量)改linux中的Docker服务文件,使用2375 进行非加密通信,然后加载重启 2.1 #修改Docker服务文件 vi /lib/systemd/system/docker.service ​ # 通常使…

深度学习基于Tensorflow卷积神经网络VGG16的CT影像识别分类

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着医疗技术的快速发展&#xff0c;CT&#xff08;Computed Tomography&#xff09;影像已成为医生…

练习题(2024/5/22)

1N 皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;2 解释&#xff1a;如上…

WAF绕过(下)

过流量检测 这里的流量检测就是在网络层的waf拦截到我们向webshell传输的数据包&#xff0c;以及webshell返回的数据 包&#xff0c;检测其中是否包含敏感信息的一种检测方式。如果是大马的情况下&#xff0c;可以在大马中添加多处判断代码&#xff0c;因此在执行大马提供的功…

设计模式12——外观模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 外观模式&#xff08;Facade&a…

【Linux】高效文本处理命令

目录 一.sort命令&#xff08;排序&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 二.unip命令&#xff08;去重&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 三.tr命令&#xff08;替换&#xff09; 1.语法格式 2.常用选项 3.相关示例…

如何在 Ubuntu 24.04 (桌面版) 上配置静态IP地址 ?

如果你想在你的 Ubuntu 24.04 桌面有一个持久的 IP 地址&#xff0c;那么你必须配置一个静态 IP 地址。当我们安装 Ubuntu 时&#xff0c;默认情况下 DHCP 是启用的&#xff0c;如果网络上可用&#xff0c;它会尝试从 DHCP 服务器获取 IP 地址。 在本文中&#xff0c;我们将向…

MySQL主从复制(二):高可用

正常情况下&#xff0c; 只要主库执行更新生成的所有binlog&#xff0c; 都可以传到备库并被正确地执行&#xff0c; 备库就能达到跟主库一致的状态&#xff0c; 这就是最终一致性。 但是&#xff0c; MySQL要提供高可用能力&#xff0c; 只有最终一致性是不够的。 双M结构的…

2024年甘肃特岗教师招聘报名流程,速速查收哦!

2024年甘肃特岗教师招聘报名流程&#xff0c;速速查收哦&#xff01;

WXML模板语法-事件绑定

一、 1.事件 事件是渲染层到逻辑层的通讯方式&#xff0c;通过事件可以将用户在渲染层产生的行为&#xff0c;反馈到逻辑层进行业务的处理 2.小程序中常用的事件 3.事件对象的属性列表 当事件回调触发的时候&#xff0c;会收到一个事件对象event&#xff0c;其属性为&#x…

Mysql之基本架构

1.Mysql简介 mysql是一种关系型数据库&#xff0c;由表结构来存储数据与数据之间的关系&#xff0c;同时为sql(结构化查询语句)来进行数据操作。 sql语句进行操作又分为几个重要的操作类型 DQL: Data Query Language 数据查询语句 DML: Data Manipulation Language 添加、删…

axios案例应用

1、Spring概述 Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架&#xff0c;以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核&#xff0c;提供了展现层 Spring MVC 和持久层。Spring JDBC 以及业务层事务管理等众多…

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶&#xff1a;C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1&#xff5b;&#xff5d;初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…

STM32——DAC篇(基于f103)

技术笔记&#xff01; 一、DAC简介&#xff08;了解&#xff09; 1.1 DAC概念 传感器信号采集改变电信号&#xff0c;通过ADC转换成单片机可以处理的数字信号&#xff0c;处理后&#xff0c;通过DAC转换成电信号&#xff0c;进而实现对系统的控制。 1.2 DAC的特性参数 1.3…