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

Mybatis(二):实现“增删改查”

Mybatis(二):实现“增删改查”

  • 前言
  • 一、MyBatis的增删改查
    • 1、添加
    • 2、修改
    • 3、删除
    • 4、查询
      • 4.1 查询一个实体
      • 4.1 查询集合
  • 二、MyBatis获取参数值的两种方式(重点)
    • 1、单个字面量类型的参数
    • 2、多个字面量类型的参数
    • 3、map集合类型的参数
    • 4、实体类类型的参数
    • 5、使用@Param标识参数
    • 6、结论
  • 三、MyBatis的各种查询功能
    • 1、查询一个实体类对象
    • 2、查询一个list集合
    • 3、查询单个数据
    • 4、查询一条数据为map集合
    • 5、查询多条数据为map集合
    • 6、结论



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

一、MyBatis的增删改查

1、添加

UserMapper接口:

     /***添加用户信息*/int insertUser();

UserMapper.xml

<!--int insertUser();--><insert id="insertUser">insert into t_user values(null,'张三','123',23,'女')</insert>

2、修改

UserMapper接口:

     /*** 修改用户信息*/void updateUser();

UserMapper.xml

        <!-- void updateUser();--><update id = "updateUser">update t_user set username = '张三' where id = 4</update>

3、删除

UserMapper接口:

    /*** 删除用户信息*/void deleteUser();

UserMapper.xml

        <!-- void deleteUser();--><delete id="deleteUser">delete from t_user where id = 5</delete>

4、查询

4.1 查询一个实体

UserMapper接口:

    /*** 查询用户信息*/User getUserId();
UserMapper.xml
      <!--User getUserById();--><!--查询功能的标签必须设置resultType或resultMapresultType:设置默认的映射关系resultMap:设置自定义的映射关系--><select id="getUserById" resultType="com.ir.mybaits.pojo.User">select * from t_user where id = 3</select>

4.1 查询集合

UserMapper接口:

    /*** 查询用户信息*/List<User> getAllUser();

UserMapper.xml

      <!--List<User> getAllUser();--><select id="getAllUser" resultType="User">select * from t_user</select>

注意:

⭕ 查询的标签select必须设置属性resultTyperesultMap,用于设置实体类和数据库表的映射关系
resultType:自动映射,用于属性名和表中字段名一致的情况
resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

⭕当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常TooManyResultsException,但是若查询的数据只有一条,可以使用实体类或集合作为返回值

二、MyBatis获取参数值的两种方式(重点)

MyBatis获取参数值的两种方式:${}#{}

${}的本质就是字符串拼接,使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;

#{}的本质就是占位符赋值,但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

1、单个字面量类型的参数

⭕ 若mapper接口中的方法参数为单个的字面量类型,此时可以使用${}#{}以任意的名称获取参数的值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

/*** @description:查询用户信息* @author: Hey* @date: 2022/7/3 16:53* @param: [username]* @return: com.ir.mybatis.pojo.User**/User getUserByUsername(String username);

UserMapper.xml

 <!--User getUserByUsername(String username);--><select id="getUserByUsername" resultType="user"><!--此时只注重传递过来的值,{username}中的usernsme可以替换为任意字母,结果都不会改变--><!--select * from t_user where username = '${username}';-->select * from t_user where username = #{username};</select>

UserMapperTest

   /*** @description:* @author: Hey* @date: 2022/7/3 15:29* @param: []* @return: void**/@Testpublic void getUserByUsername(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);System.out.println(userMapper.getUserByUsername("张三"));}

2、多个字面量类型的参数

mapper接口方法的参数为多个时,此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储

  1. arg0,arg1…为键,以参数为值
  2. param1,param2…为键,以参数为值

因此只需要通过${}#{}访问map集合的键就可以获取相对应的 值,但是需要注意${}的单引号问题。

⭕ 代码演示:

UserMapper

    /*** @description:检查用户登录信息* @author: Hey* @date: 2022/7/3 15:46* @param: [username, password]* @return: com.ir.mybatis.pojo.User**/User checkLoginByParameter(String username,String password);

UserMapper.xml

  <!--User checkLoginByParameter(String username,String password);--><select id="checkLoginByParameter" resultType="user">select * from t_user where username=#{arg0} and password=#{arg1};</select>

UserMapperTest

 /*** @description:* @author: Hey* @date: 2022/7/3 15:30* @param: []* @return: void**/@Testpublic void checkLoginByParam(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);User user = userMapper.checkLoginByParameter("张三","123");System.out.println(user);}

3、map集合类型的参数

⭕ 若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中,只需要通过${}#{}访问map集合的键就可以获取相对应的值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

    /*** @description:通过自定义Map来验证登录* @author: Hey* @date: 2022/7/3 15:45* @param:* @return:**/User checkLoginByMap(Map<String, Object> map);

UserMapper.xml

 <!--User checkLoginByMap(Map<String, Object> map);--><select id="checkLoginByMap" resultType="user">select * from t_user where username=#{username} and password=#{password};</select>

UserMapperTest

     /*** @description:测试通过自定义Map验证登录* @author: Hey* @date: 2022/7/3 15:55* @param: []* @return: void**/@Testpublic void checkLoginByMap(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);Map<String,Object> map = new HashMap<>();map.put("username","张三");map.put("password","123");User user = userMapper.checkLoginByMap(map);System.out.println(user);}

4、实体类类型的参数

⭕ 若mapper接口中的方法参数为实体类对象时,此时可以使用${}#{},通过访问实体类对象中的属性名获取属性值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

 /*** @description:添加用户* @author: Hey * @date: 2022/7/3 16:11* @param: [user]* @return: int**/Integer insertUser(User user);

UserMapper.xml

<!--int insertUser(User user);--><select id="insertUser" >insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})</select>

UserMapperTest

     /*** @description:添加用户  * @author: Hey* @date: 2022/7/3 16:24* @param: []* @return: void**/@Testpublic void insertUser(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);Integer result = userMapper.insertUser(new User(null,"喜羊羊","123456",18,"男","123123@qq.com"));System.out.println(result);}

5、使用@Param标识参数

⭕ 可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中,以如下两种方式来取值访问:

  1. @Param注解的value属性值为键,以参数为值;
  2. param1,param2…为键,以参数为值;

只需要通过${}#{}访问map集合的键就可以获取相对应的值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

 /*** @description:通过参数注解验证登录* @author: Hey * @date: 2022/7/3 16:59* @param: [username, password]* @return: com.ir.mybatis.pojo.User**/User checkLoginByParam(@Param("username") String username, @Param("password") String password);

UserMapper.xml

    <!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);--><select id="checkLoginByParam" resultType="User">select * from t_user where username = #{username} and password = #{password}</select>

UserMapperTest

 /*** @description:通过注解方式验证登录* @author: Hey* @date: 2022/7/3 16:57* @param: []* @return: void**/@Testpublic void testCheckLoginByParam(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.checkLoginByParam("admin", "123456");System.out.println(user);}

6、结论

将以上五种情况分为两类情况
⭕ 情况一:参数为实体类型
⭕ 情况二:参数都用@Param来修饰

三、MyBatis的各种查询功能

1、查询一个实体类对象

SelectMapper

    /*** @description:通过id查询用户* @author: Hey* @date: 2022/7/3 17:54* @param: [id]* @return: com.ir.mybatis.pojo.User**/User getUserById(@Param("id") Integer id);

SelectMapper.xml

<select id="getUserById" resultType="user">select * from t_user where id= #{id};</select>

SelectMapperTest

/*** @description:通过id查询用户* @author: Hey* @date: 2022/7/3 17:58* @param: []* @return: void**/@Testpublic void getUserById(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);User user = selectMapper.getUserById(3);System.out.println(user);}

2、查询一个list集合

SelectMapper

/*** @description:获取多个用户* @author: Hey* @date: 2022/7/3 17:56* @param: []* @return: java.util.List<com.ir.mybatis.pojo.User>**/List<User> getAllUser();

SelectMapper.xml

<select id="getAllUser" resultType="user">select * from t_user;</select>

SelectMapperTest

/*** @description:查询所有用户* @author: Hey* @date: 2022/7/3 18:00* @param: []* @return: void**/@Testpublic void getAllUser(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);List<User> list =  selectMapper.getAllUser();for (User user:list) {System.out.println(user);}}

3、查询单个数据

MyBatis中,对于Java中常用的类型都设置了类型别名

AliasMapped Type
_bytebyte
_char (since 3.5.10)char
_character (since 3.5.10)char
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
char (since 3.5.10)Character
character (since 3.5.10)Character
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
bigintegerBigInteger
objectObject
date[]Date[]
decimal[]BigDecimal[]
bigdecimal[]BigDecimal[]
biginteger[]BigInteger[]
object[]Object[]
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

SelectMapper

    /*** @description:查询用户信息的总记录数* @author: Hey* @date: 2022/7/3 20:40* @param: []* @return: java.lang.Integer**/Integer getCount();

SelectMapper.xml

 <select id="getCount" resultType="int">select count(1) from t_user;</select>

SelectMapperTest

/*** @description:查询用户信息的总记录数* @author: Hey * @date: 2022/7/3 20:45* @param: []* @return: void**/@Testpublic void getCount(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);int result = selectMapper.getCount();System.out.println(result);}

4、查询一条数据为map集合

SelectMapper

/*** @description:根据id查询用户信息为一个map集合* @author: Hey* @date: 2022/7/3 20:59* @param: [id]* @return: java.util.Map<java.lang.String,java.lang.Object>**/Map<String,Object> getUserByIdToMap(@Param"id"Integer id);

SelectMapper.xml

<select id="getUserByIdToMap" resultType="map">select * from t_user where id=#{id}
</select>

SelectMapperTest

/*** @description:根据id查询用户信息为一个map集合* @author: Hey* @date: 2022/7/3 21:03* @param: []* @return: void**/@Testpublic void getUserByIdToMap(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);System.out.println(selectMapper.getUserByIdToMap(5));//{password=123456, sex=男, id=5, age=18, email=123123@qq.com, username=喜羊羊}}

5、查询多条数据为map集合

方式一:
SelectMapper

/*** @description:查询所有用户信息为Map集合* * 将表中的数据以map集合的方式查询,一条数据对应一个map;* 若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取* * @author: Hey* @date: 2022/7/3 21:15* @param: []* @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>**/List<Map<String, Object>> getAllUserToMap();    

SelectMapper.xml

 <select id="getAllUserToMap" resultType="map">select * from t_user</select>

SelectMapperTest

/*** @description:查询所有用户信息为Map集合* @author: Hey* @date: 2022/7/3 21:17* @param: []* @return: void**/
@Testpublic void testGetAllUserToMap(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);System.out.println(mapper.getAllUserToMap());/*** [{password=123, sex=女, id=1, age=23, email=12345@qq.com, username=张三},* {password=123456, sex=男, id=2, age=18, email=123123@qq.com, username=喜羊羊}]*/}

方式二:
SelectMapper

/*** @description:查询所有用户信息为Map集合* * 将表中的数据以map集合的方式查询,一条数据对应一个map;* 若有多条数据,就会产生个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合* * @author: Hey* @date: 2022/7/3 21:15* @param: []* @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>**/@MapKey("id")Map<String, Object> getAllUserToMap();    

SelectMapper.xml

 <select id="getAllUserToMap" resultType="map">select * from t_user</select>

SelectMapperTest

 /*** @description:查询所有用户信息为Map集合* @author: Hey* @date: 2022/7/3 21:17* @param: []* @return: void**/@Testpublic void testGetAllUserToMap(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);System.out.println(mapper.getAllUserToMap());/*** {* 1={password=123, sex=女, id=1, age=23, email=12345@qq.com, username=张三}, * 2={password=123456, sex=男, id=2, age=18, email=123123@qq.com, username=喜羊羊}* }*/}

6、结论

MyBatis的各种查询功能:

⭕ 若查询出的数据只有一条
● 可以通过实体类对象接收
● 可以通过list集合接收
● 可以通过map集合接收
结果:
{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}

⭕ 若查询出的数据有多条
● 可以通过实体类类型的list集合接收
● 可以通过map类型的list集合接收
●可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键,放在同一个map集合中

⭕ 注意:一定不能通过实体类对象接收,此时会抛异常TooManyResultsException

相关文章:

Mybatis(二):实现“增删改查”

Mybatis&#xff08;二&#xff09;&#xff1a;实现“增删改查”前言一、MyBatis的增删改查1、添加2、修改3、删除4、查询4.1 查询一个实体4.1 查询集合二、MyBatis获取参数值的两种方式&#xff08;重点&#xff09;1、单个字面量类型的参数2、多个字面量类型的参数3、map集合…...

Faster RCNN 对血液细胞目标检测

目录 1. 介绍 2. 工具函数介绍 utils 2.1 xml 文件的读取 get_label_from_xml 2.2 绘制边界框 draw_bounding_box...

【数据结构】Java实现栈

目录 1. 概念 2. 栈的使用 3. 自己动手实现栈&#xff08;使用动态数组实现栈&#xff09; 1. 创建一个MyStack类 2. push入栈 3. pop出栈 4. 查看栈顶元素 5. 判断栈是否为空与获取栈长 6. toString方法 4. 整体实现 4.1 MyStack类 4.2 Test类 4.3 测试结果 1.…...

【数据结构】排序

作者&#xff1a;✿✿ xxxflower. ✿✿ 博客主页&#xff1a;xxxflower的博客 专栏&#xff1a;【数据结构】篇 语录&#xff1a;⭐每一个不曾起舞的日子&#xff0c;都是对生命的辜负。⭐ 文章目录1.排序1.1排序的概念1.2常见的排序算法2.常见排序算法2.1插入排序2.1.1直接插入…...

过拟合、验证集、交叉验证

过拟合 简单描述&#xff1a;训练集误差小&#xff0c;测试集误差大&#xff0c;模型评估指标的方差&#xff08;variance&#xff09;较大&#xff1b; 判断方式&#xff1a; 1、观察 train set 和 test set 的误差随着训练样本数量的变化曲线。 2、通过training accuracy 和…...

原力计划来了【协作共赢 成就未来】

catalogue&#x1f31f; 写在前面&#x1f31f; 新星计划持续上新&#x1f31f; 原力计划方向&#x1f31f; 原力计划拥抱优质&#x1f31f; AIGC&#x1f31f; 参加新星计划还是原力计划&#x1f31f; 创作成就未来&#x1f31f; 写在最后&#x1f31f; 写在前面 哈喽&#x…...

一文了解Jackson注解@JsonFormat及失效解决

背景 项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下&#xff1a; spring:jackson:time-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: true尝试是否关于时间的注解是否会生效&#xff0c;使用JsonForma和JsonFiled均失效。 常…...

webpack——使用、分析打包代码

世上本无nodejs js最初是在前端浏览器上运行的语言&#xff0c;js代码一旦脱离了浏览器环境&#xff0c;就无法被运行。直到nodejs的出现&#xff0c;我们在电脑上配置了node环境&#xff0c;就可以让js代码脱离浏览器&#xff0c;在node环境中运行。 浏览器不支持模块化 nodej…...

libvirt零知识学习5 —— libvirt源码编译安装(3)

接前一篇文章libvirt零知识学习4 —— libvirt源码编译安装&#xff08;2&#xff09; 在上篇文章及上上篇文章中构建libvirt的时候遇到了一个问题“ERROR: Problem encountered: YAJL 2 is required to build QEMU driver”。上篇文章讲到即使安装了相应的YAJL库仍然不能解决问…...

Nmap 的使用教程

Nmap是一个网络侦测和安全审计工具。它可以用于发现网络上的主机和服务&#xff0c;并提供广泛的信息&#xff0c;其中包括操作系统类型和版本、应用程序和服务的详细信息等。在本文中&#xff0c;我们将介绍如何使用Nmap扫描网络主机&#xff0c;识别开放端口以及进行操作系统…...

async与await异步编程

ECMA2017中新加入了两个关键字async与await 简单来说它们是基于promise之上的的语法糖&#xff0c;可以让异步操作更加地简单明了 首先我们需要用async关键字&#xff0c;将函数标记为异步函数 async function f() {} f()异步函数就是指&#xff1a;返回值为promise对象的函…...

移动应用架构设计:如何转变开发流程

移动应用架构设计&#xff1a;如何转变开发流程 2023 年掌握移动应用程序架构的指南&#xff08;附案例研究&#xff09; 如果他们要解决这个问题&#xff0c;开发人员需要了解移动架构设计的最佳实践&#xff0c;使他们能够构建用户喜欢的优化应用程序。其中一些做法包括使用…...

NX二次开发 图层函数总结

简介&#xff1a; NX二次开发 图层相关的总结。 函数&#xff1a; uc5007()uc5008()uc5009()UF_LAYER_ask_category_info()获取图层类别的信息UF_LAYER_ask_category_tag()根据图层分类名称查询其图层分类标识UF_LAYER_ask_status()UF_LAYER_ask_work_layer()UF_LAYER_create…...

windows微服务部署

windows部署一.nginx部署1.nginx 官网下载2. 配置nginx3.配置nigix 防止nigix刷新404不生效二.配置redis部署成服务1.在系统配置中 配置为系统变量2.打开快捷登录服务管理#3. 开启redis三.windows部署jar包一.nginx部署 1.nginx 官网下载 地址 官网地址 安装 windows版本 可安…...

Java四种内部类(看这一篇就够了)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…...

蓝桥杯刷题第二十天

第一题&#xff1a;纸张尺寸问题描述在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。输入纸张的名称, 请输出…...

如何通过命令行查看CentOS版本信息和linux系统信息

1.如何查看已安装的CentOS版本信息&#xff1a; 1.cat /proc/version 2.uname -a 3.uname -r 4.cat /etc/centos-release 5.lsb_release -a 6.hostnamectl1. 第一种方式输出的结果是&#xff1a; Linux version 3.10.0-1127.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) …...

oracle查询表空间大小以及每个表所占空间的大小

1、查询数据库中所有的表空间以及表空间所占空间的大小&#xff0c;直接执行语句就可以了&#xff1a; select tablespace_name, sum(bytes)/1024/1024 from dba_data_files group by tablespace_name; 2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, …...

C语言通讯录应用程序:从设计到实现

hello&#xff0c;这期给大家带来C语言实现静态通讯录,主要也是建立起创建大项目的思维&#xff0c;与往期这两篇博客有点类似 C语言实现三子棋 C语言实现扫雷 文章目录&#x1f913;通讯录介绍&#x1f636;‍&#x1f32b;️效果演示&#x1f920;主题框架头文件测试文件函数…...

银河麒麟v10sp2安装nginx

nginx官网下载&#xff1a;http://nginx.org/download/ 银河麒麟系统请先检查yum源是否配置&#xff0c;若没有配置请参考&#xff1a;https://qdhhkj.blog.csdn.net/article/details/129680789 一、安装 1、yum安装依赖 yum install gcc gcc-c make unzip pcre pcre-devel …...

华为笔试题OD

华为笔试题OD 1题 华为od-2022.11.5-k优雅阈值 题目内容 如果一个数组中出现次数最多的元素出现大于等于 &#xfffd;k 次&#xff0c; 被称为 &#xfffd;−优雅数组k−优雅数组 &#xff0c; &#xfffd;k 也可以被称为优雅阈值。 例如&#xff0c;数组 [1,2,3,1,2,3,…...

Win10+Anconda安装.whl文件到指定环境——以pycocotools为例

Anconda安装.whl文件到指定环境1.Whl文件2.pycocotools安装前言&#xff1a;本篇文章主要记录了两个问题&#xff1a; &#xff08;1&#xff09;Win10环境下&#xff0c;利用Anconda安装.whl文件到指定环境的方法&#xff1b; &#xff08;2&#xff09;Win10系统安装pycocoto…...

全自动托盘四向穿梭车|拥有输送系统提升机AGV的托盘四向穿梭车立体库的软硬件配置系统

托盘四向穿梭车一般是在两向穿梭车的结构上设计改进而来的&#xff0c;托盘两向穿梭车在取货时可以实现“先进先出”或“先入后出”模式&#xff0c;多用于量大且品种少的行业。但是随着市场的不断迅速发展&#xff0c;各大企业、商家不仅对于小批量、多批次的需求越来越大&…...

【Linux】进程概念二

文章目录进程概念二1. 进程状态2. 进程状态查看3. 僵尸进程3.1 僵尸进程的危害4. 孤儿进程5. 环境变量5.1 常见环境变量5.2 查看环境变量的方法5.3 测试PATH5.4 环境变量相关的命令5.5 环境变量的组织方式5.6 通过代码获取环境变量6. 程序地址空间7. 进程地址空间8. 扩展8.1 为…...

如何用C语言实现渣男通讯录

注意&#xff1a;纯属玩笑&#xff0c;博大家一乐&#xff0c;切勿当真&#x1f4d6;首先我们要知道一个渣男通讯录有哪些信息要包含哪些功能1.你的通讯录要装多少个女朋友你得规定吧&#xff1b;2.每个女朋友的姓名&#xff0c;年龄&#xff0c;电话&#xff0c;爱好这些要有吧…...

【从零开始的C语言】操作符详解

文章目录前言一、操作符分类二、算术操作符三、移位操作符3.1 左移3.2 右移四、位操作符&#xff08;重要&#xff09;五、赋值操作符六、单目操作符七、关系操作符八、逻辑操作符九、条件操作符十、逗号表达式前言 本篇文章开始&#xff0c;我将开设《从零开始的C语言》专栏&…...

黑马在线教育数仓实战1

1. 教育项目的架构说明 项目的架构: 基于cloudera manager大数据统一管理平台, 在此平台之上构建大数据相关的软件(zookeeper,HDFS,YARN,HIVE,OOZIE,SQOOP,HUE...), 除此以外, 还使用FINEBI实现数据报表展示 各个软件相关作用: zookeeper: 集群管理工具, 主要服务于…...

python中pandas模块数据处理小案例

内容目录1. 添加随机日期2. 聚合求和3.聚合求和排序4. 聚合求和排序取前十5. 聚合取极值6. 重新赋值7. 按条件赋值pandas作为数据处理的得力工具&#xff0c;简便了数据开发过程&#xff0c;之前串联了pandas的使用方法&#xff0c;现在用几个小案例巩固一下常用的pandas方法。…...

从 X 入门Pytorch——Tensor的自动微分、计算图,常见的with torch.no_grad()机制

这里写目录标题1 Pytorch计算图和自动微分2 将单个数据从计算图中剥离 .detach3 使用with torch.go_grad(): 包含的代码段不会计算微分1 Pytorch计算图和自动微分 从功能上理解&#xff1a; 计算图就是类似于数据结构中的无环有向图&#xff0c;Pytorch中的计算图就是为了记录…...

三十七、实战演练之接口自动化平台的文件上传

上传文件功能 上传文件功能主要针对需要测试上传文件的接口。原理是&#xff0c;把要测试上传的文件先上传到测试平台&#xff0c;然后把路径写入 用例中&#xff0c;后台真正测试时再将其进行上传。 一、上传文件模型 在testplans/models.py 模块中编写如下模型&#xff1a;…...