当前位置: 首页 > news >正文

Mybatis-Plus常用的增删改查坑

添加依赖

   <!--实体类上加上@Data注解就不用写get,set,toString,equals等方法了--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--mybatis-plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.0</version></dependency>

Mapper接口要继承自BaseMapper并将实体类作为泛型

public interface UserMapper extends BaseMapper<User> {
}

增 insert

User user = new User();
user.setUserName("向南");
user.setAge(32);
user.setEmail("xn@163.com");
user.setManagerId(1088248166370832385L);
int rows = userMapper.insert(user);

删 delete

deleteById

@Test
public void deleteById(){int rows = userMapper.deleteById(1152147420519170050L);System.out.println("删除的记录数:"+rows);
}

deleteByMap

/*** DELETE FROM user WHERE name = ? AND age = ? */
@Test
public void deleteByMap(){HashMap<String, Object> map = new HashMap<>();map.put("age",32);map.put("name","朱上林");int rows = userMapper.deleteByMap(map);System.out.println("删除了:"+rows+"条记录");
}

deleteBatchIds

@Test
public void deleteBatchIds(){int rows = userMapper.deleteBatchIds(
Arrays.asList(1152134491950309377L,1152138510835929090L, 1152139353765216258L));System.out.println("受影响的行数:"+rows);
}

Lambda删除

@Test
public void deleteByLambdaWrapper(){LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();// DELETE FROM user WHERE age = ? OR age > ? lambdaWrapper.eq(User::getAge,32).or().gt(User::getAge,40);int rows = userMapper.delete(lambdaWrapper);System.out.println("受影响的行数:"+rows);
}

改 update

updateById

@Test
public void updateUser(){User user = new User();user.setId(1094590409767661571L);user.setAge(28);user.setEmail("zhushanglin@163.com");int rows = userMapper.updateById(user);//UPDATE user SET age=?, email=? WHERE id=? System.out.println("受影响的行数: "+rows);
}

update

@Test
public void updateByWrapper(){UpdateWrapper<User> wrapper = new UpdateWrapper<>();//where条件构造器wrapper.eq("name","朱上林");//set改变的数据设置User user = new User();user.setAge(29);user.setEmail("zhu2019@qq.com");int rows = userMapper.update(user, wrapper);//UPDATE user SET age=?, email=? WHERE name = ?System.out.println("受影响的行数: "+rows);
}

查 select

selectById

@Test
public void selectById(){User user = userMapper.selectById(1088248166370832385L);//SELECT id,name,age,email,manager_id,create_time FROM user WHERE id=?System.out.println(user);
}

selectBatchIds

@Test
public void selectBatchIds(){List<Long> idList = Arrays.asList(1087982257332887553L, 1094590409767661571L, 1152134491950309377L);List<User> userList = userMapper.selectBatchIds(idList);//SELECT id,name,age,email,manager_id,create_time FROM user WHERE id IN ( ? , ? , ? )userList.forEach(System.out::println);
}

selectByMap

@Test
public void selectByMap(){HashMap<String, Object> map = new HashMap<>();map.put("name", "朱上林");map.put("age",26);
//注意map中的key是表中的列,不是实体类中的属性List<User> userList = userMapper.selectByMap(map);//SELECT id,name,age,email,manager_id,create_time FROM user WHERE name = ? AND age = ?userList.forEach(System.out::println);
}

条件构造器查询

/**
*查询名字包含“雨”子,并且年龄小于40
*/
@Test
public void selectByWrapper(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件: WHERE name LIKE ? AND age < ?wrapper.like("name", "%雨%").lt("age",40);//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}/*
查询名字包含“雨”子,并且年龄大于等于20,小于等于40,并且email不为null*/
@Test
public void selectByWrapper2(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件:WHERE name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULLwrapper.like("name", "%雨%")
.between("age",20,40)
.isNotNull("email");//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}/*
查询名字为"王"姓,或者年龄大于等于26,先按照年龄降序排列,年龄相同的按照id升序排列*/
@Test
public void selectByWrapper3(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件:WHERE name LIKE 王% OR age >= 26 ORDER BY age DESC , id ASC wrapper.likeRight("name","王").or().ge("age",26).orderByDesc("age").orderByAsc("id");//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}/*
查询创建日期为2019-2-14,并且直属上级领导 姓"王"*/
@Test
public void selectByWrapper4(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件:create_time字段格式化为"年-月-日"后值为2019-02-14,并且,直属上级姓"王"(子查询)//WHERE date_format(create_time,'%Y-%m-%d') = ? AND manager_id IN (select id from user where name like '王%') wrapper.apply("date_format(create_time,'%Y-%m-%d') = {0}","2019-02-14").inSql("manager_id","select id from user where name like '王%'");//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}/*
查询名字为"王"姓 且(年龄小于40或邮箱不为空)*/
@Test
public void selectByWrapper5(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件:WHERE name LIKE ? AND ( age < ? OR email IS NOT NULL )
//wrap->wrap表示将wrapper传一个到后面,前面是一个整体,后面是一个整体,两个整体再andwrapper.likeRight("name","王").and(wrap->wrap.lt("age",40).or().isNotNull("email"));//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}/*
查询年龄大于40 或者(年龄大于20并且邮箱不为空)*/
@Test
public void selectByWrapper6(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件:WHERE age < ? OR ( age >= ? AND email IS NOT NULL ) wrapper.lt("age",40).or(wrap->wrap.ge("age",20).isNotNull("email"));//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}/*
查询(年龄小于40或者邮箱不为空) 并且 名字为"王"姓*/
@Test
public void selectByWrapper7(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件:WHERE ( age < ? OR email IS NOT NULL ) AND name LIKE ? wrapper.nested(wq->wq.lt("age",40).or().isNotNull("email")).likeRight("name","王");//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}/*
查询年龄是30,31,32,33
age in (30,31,32,33)*/
@Test
public void selectByWrapper8(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件:WHERE age IN (?,?,?,?) wrapper.in("age",Arrays.asList(30,31,32,33));//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}

常用构造器

常用条件构造器:
等于 =: eq("name", "老王")--->name = '老王'
不等于 <>: ne("name", "老王")--->name <> '老王'
大于 >: gt("age", 18)--->age > 18
大于等于 >=: ge("age", 18)--->age >= 18
小于 <: lt("age", 18)--->age < 18
小于等于 <=: le("age", 18)--->age <= 18
BETWEEN1 AND2: between("age", 18, 30)
--->age between 18 and 30
NOT BETWEEN1 AND2: notBetween("age", 18, 30)
--->age not between 18 and 30
LIKE '%值%': like("name", "王")
--->name like '%王%'
NOT LIKE '%值%': notLike("name", "王")
--->name not like '%王%'
LIKE '%值': likeLeft("name", "王")
--->name like '%王'
LIKE '值%': likeRight("name", "王")
--->name like '王%'
字段 IS NULL: isNull("name")
--->name is null
字段 IS NOT NULL: isNotNull("name")
--->name is not null
字段 IN: in("age",{1,2,3})
--->age in (1,2,3)
字段NOTIN: notIn("age",{1,2,3})
--->age not in (1,2,3)
字段 IN ( sql语句 ): inSql("id", "select id from table where id < 3")
--->id in (select id from table where id < 3)
字段 NOT IN ( sql语句 ): notInSql("id", "select id from table where id < 3")
--->age not in (select id from table where id < 3)
分组:GROUP BY 字段, ...: groupBy("id", "name")
--->group by id,name
排序:ORDER BY 字段, ... ASC: orderByAsc("id", "name")
--->order by id ASC,name ASC
排序:ORDER BY 字段, ... DESC: orderByDesc("id", "name")
--->order by id DESC,name DESC
HAVING ( sql语句 ): having("sum(age) > 10")
--->having sum(age) > 10: having("sum(age) > {0}", 11)
--->having sum(age) > 11
OR 拼接
例: eq("id",1).or().eq("name","老王")
--->id = 1 or name = '老王'
OR 嵌套
例: or(i -> i.eq("name", "李白").ne("status", "活着"))
--->or (name = '李白' and status <> '活着')
AND 嵌套
例: and(i -> i.eq("name", "李白").ne("status", "活着"))
--->and (name = '李白' and status <> '活着')
apply拼接sql
例: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08")
--->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")

查询部分字段

/**
*查询指定的字段
*/
@Test
public void selectByWrapperSuper(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件: SELECT id,name FROM user WHERE name LIKE ? AND age < ? wrapper.select("id","name").like("name", "%雨%").lt("age",40);//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}
/*** 查询除了name和age的所有有字段,名字中包含"雨",且年龄小于40*/
@Test
public void selectByWrapperSuper2(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//构造器赋予条件: SELECT id,name FROM user WHERE name LIKE ? AND age < ?wrapper.like("name", "%雨%").lt("age",40)
.select(User.class,info->!info.getColumn().equals("name")&&!info.getColumn().equals("age"));//执行条件构造器查询List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);
}

条件查询

@Test
public void testContdition(){String name = "王";String email = "";//WHERE name LIKE ? ,因为email为空,所以不加入到条件构造器中condition(name, email);
}private void condition(String name, String email){QueryWrapper<User> wrapper = new QueryWrapper<>();//当传过来的参数name,email不为空字符串时,才加入到查询构造器中wrapper.like(StringUtils.isNotEmpty(name),"name",name).like(StringUtils.isNotEmpty(email),"email",email);List<User> userList = userMapper.selectList(wrapper);userList.forEach(System.out::println);
}

创建条件构造器时,传入实体对象

 /*
创建条件构造器时,传入实体对象,就可以代替构造条件wrapper...*/@Testpublic void selectByWrapperEntity(){//创建实体对象User user = new User();user.setAge(26);//相当于WHERE age=26//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>(user);//使用实体对象,就不用构造条件了List<User> userList = userMapper.selectList(wrapper);//遍历输出结果userList.forEach(System.out::println);}

allEq

@Test
public void selectByWrapperAllEq(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();//创建一个参数map对象HashMap<String, Object> params = new HashMap<>();params.put("name", "王天风");params.put("age", null);wrapper.allEq(params);//WHERE name = ? AND age IS NULLList<User> userList = userMapper.selectList(wrapper);userList.forEach(System.out::println);
}

selectMaps

@Test
public void selectByWrapperMaps(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.select("id","name").like("name", "雨").lt("age", 40);List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);/*** 这样查询结果只有我们想要的字段和对应的值,没有很多没用的字段和对应的值为null* {name=张雨琪, id=1094590409767661570}* {name=刘红雨, id=1094592041087729666}*/maps.forEach(System.out::println);
}
/*** 按照直属上级分组,查询每组最大年龄,平均年龄,最小年龄,并且只取年龄总和小于500的组* select avg(age) avg_age,max(age) max_age,min(age) min_age* from user* group by manager_id* having sum(age)<500*/
@Test
public void selectByWrapperMaps02(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.select("avg(age) avg_age", "max(age) max_age", "min(age) min_age").groupBy("manager_id").having("sum(age)<{0}", 500);List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);/*** {max_age=40, avg_age=40.0000, min_age=40}* {max_age=25, avg_age=25.0000, min_age=25}* {max_age=33, avg_age=29.6250, min_age=26}*/maps.forEach(System.out::println);
}

selectCount

/*** 查询名字中有"雨"子的记录数量
* 注意查询记录数量,不能查询具体的列名*/
@Test
public void selectCount(){QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.like("name","雨");Integer count = userMapper.selectCount(wrapper);System.out.println(count);
}

Lambda条件构造器

好处:可以放置列名写错,写错编译就不通过

VehicleBO one = vehicleService.getOne(Wrappers.<VehicleBO>lambdaQuery().eq(VehicleBO::getVin, reqVo.getVin()));
/*** Lambda条件构造器* 查询王姓,年龄小于40*/
@Test
public void selectLambdaWrapper(){// 创建Lambda条件构造器LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();//设置Lambda条件:WHERE name LIKE ? AND age < ? lambdaWrapper.like(User::getName,"雨").lt(User::getAge, 40);List<User> userList = userMapper.selectList(lambdaWrapper);userList.forEach(System.out::println);
}
/*** Lambda条件构造器* name like '王%' and (age<40or email is not null)*/
@Test
public void selectLambdaWrapper2(){// 创建Lambda条件构造器LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();//设置Lambda条件:WHERE name LIKE ? AND ( age < ? OR email IS NOT NULL ) lambdaWrapper.likeRight(User::getName,"王").and(lwq->lwq.lt(User::getAge,40)//and(lwq->lwq)嵌套
.or().isNotNull(User::getEmail));//or()拼接List<User> userList = userMapper.selectList(lambdaWrapper);userList.forEach(System.out::println);
}

分页查询

配置分页插件类
在这里插入图片描述
分页查询selectPage

 /*分页查询:年龄大于26岁
*/@Testpublic void selectPage(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.gt("age",26);//创建一个Page对象:从第一页开始查询,每页5条数据Page<User> page = new Page<>(1, 5);
/***  Page<User> page = new Page<>(1, 5,false);
*  这样表示不查询总记录数*///selectPage返回一个Ipage对象IPage<User> iPage = userMapper.selectPage(page, wrapper);//Ipage对象中有总页数,总记录条数,所有记录的get方法System.out.println("总页数"+iPage.getPages());System.out.println("总记录条数"+iPage.getTotal());List<User> userList = iPage.getRecords();userList.forEach(System.out::println);}
 /*分页查询:年龄大于26岁的姓名和年龄
*/@Testpublic void selectMapPage(){//创建一个查询条件构造器对象QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.select("name", "age").gt("age",26);//创建一个Page对象:从第一页开始查询,每页5条数据Page<User> page = new Page<>(1, 5);//selectPage返回一个Ipage对象IPage<Map<String, Object>> iPage = userMapper.selectMapsPage(page, wrapper);//Ipage对象中有总页数,总记录条数,所有记录的get方法System.out.println("总页数"+iPage.getPages());System.out.println("总记录条数"+iPage.getTotal());List<Map<String, Object>> userList = iPage.getRecords();userList.forEach(System.out::println);}

Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: 无法将 NULL 插入 (“ZHXY_RSW_LOCAL”.“T_EXAM_SUBJECT”.“ID”)
使用mybatis-plus插入时,明明设置了id的值,还报这个错
在id字段上,添加 @TableId(type = IdType.INPUT)
在这里插入图片描述

相关文章:

Mybatis-Plus常用的增删改查坑

添加依赖 <!--实体类上加上Data注解就不用写get&#xff0c;set&#xff0c;toString&#xff0c;equals等方法了--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional…...

初识指针(4)<C语言>

前言 前面的文章&#xff0c;已经对指针的基础概念以及运用有了初步了解&#xff0c;我们可以进一步探究指针比较深入的知识&#xff0c;下文将主要介绍&#xff1a;使用指针数组模拟二维数组、字符指针变量、数组指针、二维数组传参的本质、函数指针、typedef关键字等。 目录…...

pyqt 工具栏QToolBar控件

pyqt 工具栏QToolBar控件 QToolBar控件介绍效果代码 QToolBar控件介绍 QToolBar 是 PyQt&#xff08;中的一个控件&#xff0c;它提供了一个工具栏&#xff0c;通常包含一系列的工具按钮或下拉菜单&#xff0c;用于提供对应用程序功能的快速访问。 QToolBar 通常与 QMainWind…...

SystemVerilog/Verilog中的仿真延时建模之模块路径延时

一 概要 模块路径延迟,描述的是模块中信号从源端到目的端传输的延迟。 路径以及对应的延迟是在模块中的specify块中指定的,其中信号源端一般为input或者inout,而目的端则只能为output或者inout.在specify中指定的模块路径,常见的形式主要三种,分别是: 简单路径(Simple Path…...

代码随想录算法训练营Day36 | 738.单调递增的数字、968.监控二叉树、贪心算法总结 | Python | 个人记录向

本文目录 738.单调递增的数字做题看文章 968.监控二叉树做题看文章 贪心算法总结以往忽略的知识点小结个人体会 738.单调递增的数字 代码随想录&#xff1a;738.单调递增的数字 Leetcode&#xff1a;738.单调递增的数字 做题 无思路。 看文章 例如&#xff1a;98&#xff…...

FME学习之旅---day26

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 【由于上周&#xff0c;上班状态不是很好&#xff0c;事情多又杂&#xff0c;没有学习的劲头&#xff0c;就短暂的休息了一下下。双休爬山&#xff0c;给自己上了强度&#xff0c;今天才缓过来…...

JAVA学习-练习试用Java实现电话号码的字母组合

问题: 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输…...

js代码中关于async await的滥用 async await的滥用

概念&#xff1a; 返回值&#xff1a; async返回一个promise---这个返回值是默认自发行为 async function name1(params) {console.log(params) } let result name1(lion) console.log(result) // Promise { undefined } result.then(res > console.log(res)) // undefin…...

基础算法,贪心算法,贪心策略,OJ练习

文章目录 一、概念二、OJ练习2.1 区间选点2.2 区间合并2.3 区间2.4 合并果子2.5 排队接水2.6 货仓选址2.7 防晒2.8 畜栏预定2.9 雷达设备2.10 国王游戏2.11 耍杂技的牛2.12 给树染色2.13 任务2.14 能量石 三、总结 一、概念 贪心是一种在每次决策时采取当前意义下最优策略的算…...

一文讲透亚马逊云三层架构

关于三层架构&#xff0c;我们有很多想说的话&#xff1a; &#xff08;以下内容以下都在VPC中&#xff09; cloudfront做CDN加速网关规划S3做静态网站托管APIGateway作为统一网关入口认证/限流Lambda 作为传统后端&#xff0c;并发&#xff0c;底层架构Redis缓存DDB作为持久化…...

只需3步,使用Stable Diffusion无限生成AI数字人视频(附安装包)

基本方法 搞一张照片&#xff0c;搞一段语音&#xff0c;合成照片和语音&#xff0c;同时让照片中的人物动起来&#xff0c;特别是头、眼睛和嘴。 语音合成 语音合成的方法很多&#xff0c;也比较成熟了&#xff0c;大家可以选择自己方便的&#xff0c;直接录音也可以&#…...

RustGUI学习(iced)之小部件(七):如何使用图像image部件来显示图片?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第七篇,主要讲述图像Image部件的使用,会结合实例…...

Substrate 入门课第 14 期圆满结束,岗位内推直达知名 Web3 项目!

Substrate&#xff0c;一个完全免费且开源的框架&#xff0c;利用 Rust 语言的强大功能和安全性&#xff0c;为全球开发者提供了一个高效和灵活的开发环境。借助其模块化的设计&#xff0c;即使是新手开发者也能在短短 15 分钟内搭建起定制化的区块链。自 2020 年以来&#xff…...

android进阶-AIDL

参考&#xff1a;Android进阶——AIDL详解_android aidl-CSDN博客 AIDL&#xff08;Android 接口定义语言&#xff09;&#xff0c;可以使用它定义客户端与服务端进程间通信&#xff08;IPC&#xff09;的编程接口&#xff0c;在 Android 中&#xff0c;进程之间无法共享内存&…...

贪心算法-活动选择问题背包问题

目录 活动选择问题 无重叠区间-Leetcode 435 分数背包问题--贪心解法 贪心法 0-1 背包问题 贪心法 贪心算法的局限 Set cover problem 活动选择问题 分析: /* 要在一个会议室举办n个活动 - 每个活动有它们各自的起始和结束时间 - 找出在时间上互不冲突的活动组合,能…...

Web3工具集合 - 00

使用 React 和 Material-UI 构建的 Web3 工具集合 大家好&#xff01; 我很高兴向大家介绍我最近刚启动了一个项目&#xff1a;Web3 工具集合。 这个项目的目的是一个集成各种 Web3 工具的网站&#xff0c;旨在为开发人员和加密货币爱好者提供便捷的工具和资源。 特点&#…...

分布式与集群的区别

先说区别&#xff1a; 分布式是并联工作的&#xff0c;集群是串联工作的。 分布式中的每一个节点都可以做集群。而集群并不一定就是分布式的。 集群举例&#xff1a;比如新浪网&#xff0c;访问的人很多&#xff0c;他可以做一个集群&#xff0c;前面放一个相应的服务器&…...

学习心得:如何开始学习一款MCU

一、MCU简介 任何一款MCU&#xff0c;其基本原理和功能都是大同小异&#xff0c;所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统&#xff0c;虽然形式上看似千差万别&#xff0c;但实际上只是符号的不同&#xff0c;其所代表的含义、所要完成的功能和寻址…...

顺序表的实现(迈入数据结构的大门)(1)

上一节我们认识到了什么是数据结构 这一节我们就来实现第一个数据结构的实现 思考一个问题&#xff1a; 假定一个数组&#xff0c;空间为10&#xff0c;已经使用了5个&#xff0c;向其中插入数据的步骤&#xff1a; 1.插入数据&#xff0c;我们先要求数组长度&#xff0c;其…...

RERCS系统-WDA+BOPF框架实战例子 PART 1-新建List UIBB(列表组件)并分配Feeder Class和Node Element

需求背景&#xff1a; 已有的项目主数据功能&#xff0c;新增一个列表UIBB显示主数据额外的关联数据明细。 1、Fiori页面通过右键-技术帮助打开对应的组件配置&#xff1b; 2、双击对应的组件配置&#xff0c;调整对应的页面新建UIBB&#xff1b; 3、填写对应的UIBB属性字段&a…...

一键搭建AI对话系统:通义千问1.5-1.8B-Chat-GPTQ-Int4镜像使用指南

一键搭建AI对话系统&#xff1a;通义千问1.5-1.8B-Chat-GPTQ-Int4镜像使用指南 想快速拥有一个属于自己的AI对话助手吗&#xff1f;今天要介绍的这个方法&#xff0c;可能比你想象中简单得多。不用折腾复杂的模型下载&#xff0c;不用配置繁琐的运行环境&#xff0c;更不用写一…...

别再只会用百度搜了!手把手教你用site语法精准锁定CSDN、知乎等网站的技术文章

技术搜索的艺术&#xff1a;用site语法打造高效信息获取系统 每次打开搜索引擎&#xff0c;输入技术关键词后&#xff0c;铺天盖地的结果中真正有用的内容却寥寥无几——这可能是大多数开发者都经历过的困扰。广告推广、低质量转载、过时教程混杂其中&#xff0c;而真正优质的C…...

Web3D开发入门:5大引擎(Direct3D、OpenGL、UE、Unity、Three.js)选型指南

Web3D开发入门&#xff1a;5大引擎选型实战指南 当虚拟展厅、数字孪生和元宇宙应用席卷各行业时&#xff0c;选择合适的三维引擎成为开发者面临的首个关键决策。本文将带您深入剖析Direct3D、OpenGL、Unreal Engine、Unity和Three.js五大主流方案的技术特性与商业价值&#xff…...

Ubuntu系统磁盘管理

要在Ubuntu系统中开机自动挂载AWS EBS卷&#xff08;设备名为/dev/xvdd&#xff09;&#xff0c;需通过**/etc/fstab文件**配置自动挂载规则。以下是完整步骤&#xff08;含前提条件、命令和验证&#xff09;&#xff1a; 一、前提条件 确认磁盘状态&#xff1a;/dev/xvdd需已…...

Qwen2.5-VL视觉定位模型支持多目标检测:一句话同时定位‘人和汽车’,效果惊艳

Qwen2.5-VL视觉定位模型支持多目标检测&#xff1a;一句话同时定位"人和汽车"&#xff0c;效果惊艳 1. 视觉定位技术的新突破 在计算机视觉领域&#xff0c;视觉定位&#xff08;Visual Grounding&#xff09;技术正经历着革命性的进步。传统的目标检测方法需要预先…...

AEC-Q100到AEC-Q200:汽车电子组件认证标准差异与应用场景详解

AEC-Q100到AEC-Q200&#xff1a;汽车电子组件认证标准差异与应用场景详解 当一辆现代汽车驶过零下40度的北极圈&#xff0c;又穿越50度的沙漠高温&#xff0c;其电子系统仍需要保持毫秒级的响应精度——这种极端可靠性背后&#xff0c;是AEC-Q系列认证标准构筑的质量防线。作为…...

STM32定时器时基单元详解:从PSC到ARR的完整配置指南(附代码)

STM32定时器时基单元实战指南&#xff1a;从寄存器配置到精准延时实现 在嵌入式开发中&#xff0c;定时器是最基础也最核心的外设之一。无论是简单的LED闪烁控制&#xff0c;还是复杂的电机PWM驱动&#xff0c;都离不开定时器的精准计时功能。对于STM32开发者来说&#xff0c;掌…...

Graphormer开源可部署意义:支撑国家AI for Science重大科技基础设施

Graphormer开源可部署意义&#xff1a;分子属性预测使用指南 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络模型&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子基准测试中表现优…...

Java POI读取大文件慢如何优化

用java poi处理大型excel文件时&#xff0c;往往会遇到阅读速度慢的问题&#xff0c;严重影响程序性能。本文将针对“java poi打开大文件的慢优化方法&#xff1f;”这个问题讨论了几个可行的解决方案&#xff0c;以帮助开发者提高程序效率。问题在于java poi 默认情况下&#…...

OpenWrt SDK实战:如何用SDK高效开发自定义驱动和应用

OpenWrt SDK实战&#xff1a;如何用SDK高效开发自定义驱动和应用 在嵌入式开发领域&#xff0c;OpenWrt因其高度模块化和可定制性成为路由器及物联网设备的首选操作系统。但对于需要频繁修改驱动或开发定制应用的工程师来说&#xff0c;每次完整编译整个系统不仅耗时耗力&#…...