我的编程空间,编程开发者的网络收藏夹
学习永远不晚

什么是MyBatisPlu

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

什么是MyBatisPlu

这篇文章主要介绍“什么是MyBatisPlu”,在日常操作中,相信很多人在什么是MyBatisPlu问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是MyBatisPlu”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、MP 是什么

MP 全称 Mybatis-Plus ,套用官方的解释便是成为 MyBatis 最好的搭档,简称基友。它是在 MyBatis  的基础上只做增强不做改变,为简化开发、提高效率而生。

1. 三大特性

1)润物无声

只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。

2)效率至上

只需简单配置,即可快速进行单表 CRUD 操作,从而节省大量时间。

3)丰富功能

代码生成、物理分页、性能分析等功能一应俱全。

2. 支持数据库

mysql 、mariadb 、oracle 、db2 、h3 、hsql 、sqlite 、postgresql 、sqlserver 、presto  、Gauss 、Firebird

Phoenix 、clickhouse 、Sybase ASE 、 OceanBase 、达梦数据库 、虚谷数据库 、人大金仓数据库  、南大通用数据库

3. 框架结构

什么是MyBatisPlu

实话说,以上这些内容只要你打开官网也能看到,那么我们接下来就先来实际操作一番!

二、MP实战

1. 手摸手式项目练习

1)数据库及表准备

sql 语句:

use test; CREATE TABLE `student`  (   `id` int(0) NOT NULL AUTO_INCREMENT,   `dept_id` int(0) NULL DEFAULT NULL,   `name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,   `remark` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,   PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES (1, 1, '小菜', '关注小菜不迷路!'); INSERT INTO `student` VALUES (2, 2, '小明', '好好学习,天天向上!');

2)pom 依赖

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--lombok--> <dependency>     <groupId>org.projectlombok</groupId>     <artifactId>lombok</artifactId>     <version>1.16.16</version> </dependency> <!--MP插件--> <dependency>     <groupId>com.baomidou</groupId>     <artifactId>mybatis-plus-boot-starter</artifactId>     <version>3.2.0</version> </dependency> <!--Mysql--> <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.21</version> </dependency> <!-- 连接池 --> <dependency>     <groupId>com.alibaba</groupId>     <artifactId>druid</artifactId>     <version>1.2.1</version> </dependency> <!--JUNIT--> <dependency>     <groupId>junit</groupId>     <artifactId>junit</artifactId>     <version>4.13.1</version> </dependency>

3)配置文件

spring:   datasource:     url: jdbc:mysql://localhost:3306/test     username: root     password: 123456     driver-class-name: com.mysql.cj.jdbc.Driver

4)实体类

@Data @Builder @TableName("student") public class User {      @TableId(type = IdType.AUTO)     private Integer id;      private Integer deptId;      private String name;      private String remark; }

5)Mapper

public interface UserMapper extends BaseMapper<User> {}

6)测试类

@RunWith(SpringRunner.class) @SpringBootTest public class MapperTest {      @Autowired     private UserMapper userMapper;      @Test     public void getAll() {         List<User> users = userMapper.selectList(null);         users.forEach(System.out::println);     } } 

小菜结:

在以上的结果,我们可以看到已经打印出了数据库中的全部数据(两条)。而并没有看到平时我们需要写的 mapper.xml 文件,只是用到了  usermapper 中的 selectList() 方法,而 UserMapper 继承了 BaseMapper 这个接口,这个接口便是  MybatisPlus 提供给我们的,我们再来看下这个接口给我们提供了哪些方法。

2. CRUD 基操

1)insert

@Test public void insert() {     //这里使用了 lombok 中的建造者模式构建对象     User user = User.builder().deptId(1).name("小华").remark("小华爱学习").build();     int insertFlag = userMapper.insert(user);     log.info("插入影响行数,{} | 小华的ID: {}", insertFlag, user.getId()); } 

可以看到我们不仅插入了数据,而且还获取到了插入数据的ID,但是值得注意的是这里的 ID 虽然是自增的,但并非是 MP 默认的  ID生成策略,而是我们在实体类中指定的:

什么是MyBatisPlu

在 MP 中支持的主键生成策略有以下几种:

什么是MyBatisPlu

我们既然已经看到了 @TableId 这个注解,那我们再来关注一个常用注解 @TableField

从注解名上我们就可以看出,@TableId 是用来标记主键 ID 的,而 @TableField 是用来标记其他字段的。

什么是MyBatisPlu

可以看得出来这个注解中存在的值还是比较多的,下面介绍几个常用的值:

  • value

用于解决字段名不一致问题和驼峰命名,比如实体类中属性名为 remark,但是表中的字段名为 describe ,这个时候就可以使用  @TableField(value="describe") 来进行转换。驼峰转换如果在全局中有配置驼峰命名,这个地方可不写。

  • exist

用于在数据表中不存在的字段,我们可以使用 @TableField(exist = false) 来进行标记

  • condition

用在预处理 WHERE 实体条件自定义运算规则,比如我配置了 @TableField(condition = SqlCondition.LIKE),输出  SQL 为:select 表 where name LIKE CONCAT('%',值,'%'),其中 SqlCondition 值如下:

什么是MyBatisPlu

  • update

用在预处理 set 字段自定义注入,比如我配置了 @TableField(update = "%s+1"),其中 %s 会填充字段,输出 SQL  为:update 表名 set 字段 = 字段+1 where 条件

  • select

用于是否查询时约束,如果我们有个字段 remark 是 text 类型的,查询的时候不想查询该字段,那么就可以使用 @TableField(select  = false) 来约束查询的时候不查询该字段

2)update

MybatisPlus 的更新操作存在两种:

int updateById(Param("et") T entity);  int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

根据 ID 更新

@Test public void update() {     User user = User.builder().id(3).name("小华").remark("小华爱玩游戏").build();     userMapper.updateById(user); } 

根据条件更新

@Test public void update() {     UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();     updateWrapper.eq("name","小华").set("remark","小华爱下棋");     userMapper.update(null, updateWrapper); } 

我们也可以将要更新的条件放进 user 对象 里面:

@Test public void update() {     UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();     updateWrapper.eq("name","小华");     User user = User.builder().remark("小华爱游泳").build();     userMapper.update(user, updateWrapper); } 

3)delete

在 MybatisPlus 中删除的方式相对于更新多,总共有四种:

int deleteById(Serializable id);  int deleteByMap(@Param("cm") Map<String, Object> columnMap);  int delete(@Param("ew") Wrapper<T> wrapper);  int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);

根据 ID 删除

@Test public void deleteById() {     userMapper.deleteById(3); } 

根据 Map 删除

@Test public void deleteByMap() {     HashMap<String, Object> columnMap = new HashMap<>();     columnMap.put("name","小华");     columnMap.put("remark","小华爱游泳");     userMapper.deleteByMap(columnMap); } 

根据 Wrapper 删除

@Test public void delete() {     UpdateWrapper<User> wrapper = new UpdateWrapper<>();     wrapper.eq("remark","小华爱下棋");     userMapper.delete(wrapper); } 

根据 Wrapper 删除还有另外一种方式,直接将实体类放入 Wrapper 中包装:

@Test public void delete() {     User user = User.builder().remark("小华爱下棋").build();     UpdateWrapper<User> wrapper = new UpdateWrapper<>(user);     userMapper.delete(wrapper); } 

根据 ID 批量删除

@Test public void deleteBatchIds() {     List<Integer> idList = new ArrayList<>();     idList.add(4);     idList.add(7);     userMapper.deleteBatchIds(idList); } 

4)select

查询操作在我们开发中是最经常用到的,也是重中之重。MybatisPlus 中支持查询的方法也比较多,如下:

T selectById(Serializable id);  List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);  List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);  T selectOne(@Param("ew") Wrapper<T> queryWrapper);  Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);  List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);  List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);  List<Object> selectObjs(@aram("ew") Wrapper<T> queryWrapper);  IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);  IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);

可以看到总共有 10 个方法,我们接下来一个一个测试

查询所有

@Test public void selectList() {     List<User> users = userMapper.selectList(null);     users.forEach(System.out::println); } 

查询数量

@Test public void selectCount() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     queryWrapper.like("name","小");     System.out.println(userMapper.selectCount(queryWrapper)); } 

根据 ID 查询

@Test public void selectById() {     User user = userMapper.selectById(1);     System.out.println(user); } 

根据 ID 批量查询

@Test public void selectBatchIds() {     List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2));     users.forEach(System.out::println); } 

根据条件查询单条

@Test public void selectOne() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     queryWrapper.eq("name","小菜");     User user = userMapper.selectOne(queryWrapper);     System.out.println(user); } 

根据条件查询多条

通过 map 传递参数,不是通过 LIKE 查询,而是通过 = 查询

@Test public void selectByMap() {     HashMap<String, Object> columnMap = new HashMap<>();     columnMap.put("name","小");     List<User> users = userMapper.selectByMap(columnMap);     users.forEach(System.out::println); } 

如果我们没有新建实体类进行结果封装,我们还可以用 Map 来接收结果集:

@Test public void selectMaps() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     queryWrapper.like("name","小");     List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);     maps.forEach(System.out::println); } 

也可以用 Object  对象来接收结果集:

@Test public void selectObjs() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     queryWrapper.like("name", "小");     List<Object> objects = userMapper.selectObjs(queryWrapper); } 

分页查询

@Test public void selectPage() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     queryWrapper.like("name", "小");     Page<User> page = new Page<>(1, 1);     IPage<User> userIPage = userMapper.selectPage(page, queryWrapper);     System.out.println("数据总数:" + userIPage.getTotal());     System.out.println("总页数:" + userIPage.getPages());     System.out.println("当前页:" + userIPage.getCurrent());     System.out.println("页大小:" + userIPage.getSize());     userIPage.getRecords().forEach(System.out::println); } 

3. 条件构造器

什么是MyBatisPlu

在 CRUD 的基本操作中,我们想要通过条件查询都是通过 Wrapper  类进行封装的,上面只是简单的用到 eq 和 like 操作。事实上这个类十分强大,我们在下面会详细进行介绍。

1)allEq

全部 eq  或个别 isNull

allEq(Map<R, V> params) allEq(Map<R, V> params, boolean null2IsNull) allEq(boolean condition, Map<R, V> params, boolean null2IsNull)      allEq(BiPredicate<R, V> filter, Map<R, V> params) allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull) allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)

参数说明:

param: key 为数据库字段名,value 为字段值 **nullsIsNull:**为 true 则在 map 的 value 为 null 时调用 isNull 方法,为 false 时则忽略 value 为 null 时不调用 isNull 方法 filter: 过滤函数,判断是否允许字段传入比对条件中

使用示例:

  • allEq(Map params)

@Test public void testAllEq() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     Map<String,Object> params = new HashMap<>();     params.put("name","小菜");     params.put("dept_id",1);     params.put("remark",null);     queryWrapper.allEq(params); //会调用 isNull 方法     userMapper.selectList(queryWrapper); } 
  • allEq(Map params, boolean null2IsNull)

@Test public void testAllEq() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     Map<String,Object> params = new HashMap<>();     params.put("name","小菜");     params.put("dept_id",1);     params.put("remark",null);     queryWrapper.allEq(params, false); //不会调用 isNull 方法     userMapper.selectList(queryWrapper); } 
  • allEq(boolean condition, Map params, boolean  null2IsNull)

@Test public void testAllEq() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     Map<String,Object> params = new HashMap<>();     params.put("name","小菜");     params.put("dept_id",1);     params.put("remark",null);     queryWrapper.allEq(false,params,false); //不会带入条件进行查询     userMapper.selectList(queryWrapper); } 
  • allEq(BiPredicate filter, Map params)

@Test public void testAllEq() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     Map<String, Object> params = new HashMap<>();     params.put("name", "小菜");     params.put("dept_id", 1);     params.put("remark", null);     //只有 key 中含有 “m” 才会用作条件判断     queryWrapper.allEq((k, v) -> (k.contains("m")), params);     userMapper.selectList(queryWrapper); } 

2)比较操作

  • eq: 相当于 =

  • ne: 相当于 !=

  • gt:  相当于 >

  • ge: 相当于>=

  • lt:   相当于  <

  • le:   相当于<=

  • between:   相当于between ... and ...

  • notBetween:    相当于not between ... and ...

  • in:   相当于in(.., .., ..)

  • notIn:   相当于not  in(.., .., ..)

3)模糊查询

  • like: like("name","小菜") --> name like  "%小菜%"

  • notLike: notLike("name","小菜") --> name not like "%小菜%"

  • likeLeft:  like("name","小菜") --> name like "%小菜"

  • likeRight:  like("name","小菜") --> name like "小菜%"

4)排序

  • orderBy:

orderBy(boolean condition, boolean isAsc, R... columns)

orderBy(true,  true, "id", "name") --> order by id ASC, name ASC

  • orderByAsc:

orderByAsc("id","name") --> order by id ASC, name ASC

  • orderByDesc:

orderByDesc("id","name) --> order by id Desc, name Desc

5)逻辑查询

or:

拼接:主动调用 or 表示紧接着下一个方法不是用 and 连接!(不调用 or 则默认为使用 and 连接),  eq("id",1).or().eq("name","老王")

嵌套:or(i -> i.eq("name", "李白").ne("status",  "活着"))

and:

嵌套:and(i -> i.eq("name", "李白").ne("status", "活着"))

6)select

在MP查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段,如select("id",  "name")

4. 配置讲解

1)基本配置

  • configLocation

用于指明 **MyBatis **  配置文件的位置,如果我们有 MyBatis 的配置文件,需将配置文件的路径配置到 configLocation 中

SpringBoot:

mybatis-plus.config-location = classpath:mybatis-config.xml

SpringMvc:

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean
  • mapperLocations

用于指明 Mapper 所对应的 XML 的文件位置,我们在 通用 CRUD  中用到的 Mapper 是直接继承 MP 提供的 BaseMapper ,我们也可以自定义方法,然后在 XML 文件中自定义 SQL,而这时我们需要告诉  Mapper 所对应 XML 文件的位置

  • SpringBoot:

mybatis-plus.mapper-locations = classpath*:mybatis     DEFAULT,          INSERT,          UPDATE,          INSERT_UPDATE }

然后我们再编写自定义的填充处理模式:

@Component public class MyMetaObjectHandler implements MetaObjectHandler {     @Override     public void insertFill(MetaObject metaObject) {         Object remark = getFieldValByName("remark", metaObject);         if (null == remark) {             setFieldValByName("remark", "好好学习", metaObject);         }     }      @Override     public void updateFill(MetaObject metaObject) {   //自定义更新时填充     } }

测试:

@Test public void testObjectHandler() {     User user = User.builder().deptId(1).name("小明").build();     userMapper.insert(user); } 

可以看到插入时,已经自动将我们填充的字段合并进去。

2)逻辑删除

在开发中,很多时候我们删除数据并不需要真正意义上的物理删除,而是使用逻辑删除,这样子查询的时候需要状态条件,确保被标记的数据不被查询到。MP  当然也支持这样的功能。

我们需要先为 student 表添加一个字段 status 来声明数据是否被删除,0  表示被删除,1表示未删除,然后也需要在实体类上增加这个属性:

@TableLogic private Integer status;

在 application.yaml 中配置:

mybatis-plus:   global-config:     db-config:       logic-delete-value: 0       logic-not-delete-value: 1

测试:

@Test public void testLogicDelete() {     userMapper.deleteById(1); } 

可以看出这段 SQL 并没有真正删除,而是进行了逻辑删除,只是更新了删除标识

3)通用枚举

如果有性别之类的字段,我们通常会用 0 和 1 来表示,但是查出来我们得进行值转换,这个时候我们就可以使用枚举来解决这个问题:

首先为  student 表添加一个 sex 字段来表示性别,0 表示女性,1 表示男性,然后定义一个枚举类:

public enum SexEnum implements IEnum<Integer> {     MAN(1, "男"),     WOMEN(0, "女");      private int code;      private String value;      SexEnum(int code, String value) {         this.code = code;         this.value = value;     }      @Override     public Integer getValue() {         return this.code;     }          //注意要重写此方法,不然会将值转换成 &lsquo;MAN&rsquo;,而不是 &lsquo;男&rsquo;     @Override     public String toString() {         return this.value;     } }

然后在实体类中添加对应属性:

private SexEnum sex;

在 application.yaml 中配置:

mybatis-plus:   type-enums-package: cbuc.life.enums

测试:

@Test public void selectOne() {     QueryWrapper<User> queryWrapper = new QueryWrapper<>();     queryWrapper.eq("name", "小菜");     User user = userMapper.selectOne(queryWrapper);     System.out.println(user); } 

到此,关于“什么是MyBatisPlu”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

什么是MyBatisPlu

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

什么是 ipsec?SDN 是什么?

IPsec是一种协议套件,用于确保IP网络通信的安全,提供保密性、完整性和身份验证。SDN是一种网络架构,将网络控制平面与数据平面分离,集中控制和可编程性。两者的结合可增强网络安全性和可编程性:SDN可动态配置IPsec策略,IPsec增强SDN网络安全性,SDN简化IPsec管理。
什么是 ipsec?SDN 是什么?
2024-04-02

Windows Vista是什么?什么是Windows Vista

我身边很多朋友对Windows Vista是什么一点都不知道,经常来问我,所以今天我就像大家详细介绍Windows Vista这个操作系统,如有不足,还请大家见谅,好了,进入正题:Windows Vista是微软公司的一款视窗操作系统。微软
2023-06-05

Spring之什么是ObjectFactory?什么是ObjectProvider?

这篇文章主要介绍了Spring之什么是ObjectFactory?什么是ObjectProvider?具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-01

window.setinterval是什么 其作用是什么

window.setInterval是一个JavaScript方法,它允许您周期性地执行指定的函数或代码块。该方法以指定的时间间隔(以毫秒为单位)触发指定的函数。window.setInterval的语法如下:javascriptsetIn
2023-07-12

colspan_colspan是什么意思?作用是什么

colspan是HTML中的一个属性,用于指定一个单元格横跨的列数。作用是将一个单元格合并为多个列,使得该单元格占据更大的水平空间。例如,如果一个表格中有两列,而某个单元格需要占据这两列的水平空间,可以使用colspan属性将该单元格的co
2023-08-22

什么是DHCP?什么是DHCP服务器

DHCP是Dynamic Host Configuration Protocol(动态主机配置协议)的缩写,它是一种网络协议,常用于局域网(LAN)中自动分配IP地址和其他网络配置信息给客户端设备。DHCP服务器是运行DHCP协议的服务器,
2023-09-05

c#什么是委托什么是事件

委托是一种指向方法的引用类型,用于实现松散耦合,而事件是一种特殊委托,用于事件处理。委托可将调用方法的职责转移到接收方,提高代码可重用性。事件允许对象向订阅者通知事件发生,订阅者可响应事件。使用委托需要定义一个与所调方法签名相同的委托类型,
c#什么是委托什么是事件
2024-04-04

c++中什么是类,什么是对象

c++kquote>类在 c++ 中代表对象集合的模板,定义了对象的属性(数据成员)和行为(成员函数)。对象是类的实例,拥有类中的所有数据成员和成员函数,由类创建,并使用与类相同的数据类型。类和对象在 C++ 中的作用什么是类?类是
c++中什么是类,什么是对象
2024-05-08

java中什么是类,什么是对象

类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。对象就是一个真实世界中的实体,对象与实体是一一对应关系的,意思就是现实世界的每一个实体都是一个对象,所
java中什么是类,什么是对象
2020-06-27

DHCP是什么?工作原理是什么?

  在设置无线AP或无线路由器过程中,用户会遇到很多参数,如果只是完成一般的设置,满足一般的上网需求的话,有以一些参数是不需要深入了解的。但是在一些比较复杂的网络环境就需要我们对一些参数作相应的配置,今天我们来看一下无线路由器的参数之一DHCP。  1、DHCP的作用  DHCP(Dynamic Host Confif
DHCP是什么?工作原理是什么?
2024-04-18

什么是软考?软考全称是什么

  什么是软考?对于软考很多人可能并不了解,初次听到甚至可能会觉得很好奇。其实软考只是一种考试的简称,那么软考全称是什么呢?  什么是软考?  软考全称是计算机技术与软件专业技术资格(水平)考试(以下简称计算机资格考试),是由国家人力资源和社会保障部(原人事部,以下简称人社部)、工业和信息化部(原信息产业部,以下简称工
什么是软考?软考全称是什么
2024-04-18

什么是软考软考全称是什么

  软考也叫软件水平考试,全称计算机技术与软件专业技术资格(水平)考试,是由国家人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)领导的国家级考试。  软考全称计算机技术与软件专业技术资格(水平)考试,是由国家人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)领导的国家级考试,其目的是,科学
什么是软考软考全称是什么
2024-04-18

软考是什么考试?全称是什么?

  软考也叫软件水平考试,全称计算机技术与软件专业技术资格(水平)考试,是由国家人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)领导的国家级考试,其目的是,科学、公正地对全国计算机与软件专业技术人员进行职业资格、专业技术资格认定和专业技术水平测试。  根据原人事部、原信息产业部颁布的《关于印发〈计算机技
软考是什么考试?全称是什么?
2024-04-19

css是什么?有什么用?

CSS是什么东西?CSS,即层叠样式表(Cascading Style Sheets),是一种用于网页设计的样式语言。通过CSS,你可以改变HTML页面上各个元素的外观、布局和行为。CSS最初是由赛迪公司(斯佩克特公司)的开发者创建的,并于1996年成为一项业界标准。随着互联网的发展,在HTML语言出现之后,CSS已经成为了使用最广泛的网页设计工具之一。让我们来看一下CSS有哪
2023-05-14
2024-04-02

编程热搜

目录