数据持化技术的发展演变(SQL、JDBC、mybatis)

文章目录

  • 1 简单SQL语句
    • 1.1 查询
    • 1.2 新增
    • 1.3 修改
    • 1.4 删除
    • 1.5 多表查询
  • 2 JDBC
    • 2.1 什么是JDBC
    • 2.2 什么是jar和maven
    • 2.3 JDBC的使用
    • 2.4 JDBC总结
  • 3 mybatis
    • 3.1 什么是ORM?为什么是ORM不是JDBC?
    • 3.2 mybatis的使用
    • 3.3 mybatis总结
  • 4 mybatis与jdbc的逻辑相同处

环境配置

  • jdk
    • 视频:https://b23.tv/WN28YAm
    • 博客:只需四步完成java JDK1.8的下载安装与配置【图文详解】
  • maven
    • 视频:https://b23.tv/Lmo8rWl
    • 博客:只需五步学会Maven 3.6.1的下载安装与配置【图文详解】
  • idea
    • 公众号:关注软件科技管家回复idea2019
  • idea配置jdk和maven
    在这里插入图片描述在这里插入图片描述

正文开始之前
问题:大家有没有学习过这两本书?
在这里插入图片描述

在这里插入图片描述  为了开发时的层次清晰和分工明确,现如今基本上都将web应用的开发分成了五个层级结构,分别是表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。
  我们都知道,为了方便数据的存储和查询一般都是将数据存储在数据库中,我们我可以通过SQL的增删改查语句来操作数据库的所有记录。以我的理解,数据持久化就是将程序代码中对数据记录的各种操作体现在数据库中,下一次再去查询数据库的时候不会说查到的还是操作之前的数据。学习数据持久层之前,我们需要先来复习一下SQL语句。

1 简单SQL语句

1.1 查询

  讲解SQL语句之前先演示如何使用Navicat导入SQL文件,创建表并添加记录。如果没有图形化操作软件的话可以使用dos窗口的命令导入https://blog.csdn.net/qq_37918817/article/details/81107433

SELECT 列名称 FROM 表名称;

查询所有的记录

SELECT * FROM singer; 

倒序查询所有的记录

SELECT * FROM singer ORDER BY id DESC;

1.2 新增

INSERT INTO 表名称 [列名称…]
  VALUES (值…);

插入一条记录

INSERT INTO singerVALUES(64,'张三',1,'/img/singerPic/1586091210109Sanna Nielsen.jpg','1984-11-27 00:00:00','平顶山','五音不全');

1.3 修改

UPDATE 表名称
  SET 列名称 = 新值 [,列名称 = 新值,…]
  [WHERE <条件>];

修改id为64的introduction为歌声甜美

UPDATE singerSET introduction='歌声甜美'WHERE id=64;

1.4 删除

DELETE FROM 表名称
  [WHERE <条件>];

按照id删除一条记录

DELETE FROM singerWHERE id=64;

1.5 多表查询

在这里插入图片描述

SELECT * FROM singer sr INNER JOIN song sg ON sr.id = sg.singer_idWHERE sr.name LIKE '王%'ORDER BY sr.id DESC;

工程创建
创建一个project
在这里插入图片描述创建两个maven的module分别是jdbc_test和mybatis_test在这里插入图片描述创建一个Spring Initializr模块
在这里插入图片描述

2 JDBC

  为什么需要数据持久化技术?每次修改数据库的时候直接使用SQL语句不就可以了?想象一下数据库就像是一台老式按键电视机,你家的沙发离这台电视机的距离不近(当然距离取决于个人家庭情况)。各种CRUD操作就像是你父母的节目需求,你正在看《巴啦啦小魔仙》,你家父皇来了想看《谭谈交通》,你家母后来了想要看《爱情保卫战》,过了一会你家父皇又想看《金牌调解》……你是不是就需要来回跑到电视前面使用按钮换台,这时候有人问你有个东西叫遥控器,他可以在十米范围内随意换台,你说你用不用?

2.1 什么是JDBC

  JDBC就是Java数据库连接(Java Database Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。jdbc是sun公司为了在Java语言中提供对数据库访问的支持,而提供的一套用于访问数据库的标准Java类库。我们通常说的JDBC是面向关系型数据库的,今天讲解的所有持久层框架也是以关型数据库为例

2.2 什么是jar和maven

  之前java web的学习涉及到jar包也就是 Java Archive File文件,jar包其实是一种zip格式的文件,也就是压缩包它里面的内容就是Java代码,在项目的编写阶段导入jar包就可以使用里面提供的方法。不要认为jar包很是神秘,其实自己也可以创建一个jar包,只需要将写好的Java代码打成jar包再导入即可使用里面定义的方法。就好比你把一首歌的MP3文件放在压缩包发给你的朋友,他解压缩之后就可以听了。jar包参考博客
  maven风格的项目,把所有的jar包都放在了本地"仓库“ 里,然后哪个项目需要用到这个jar包,只需要给出jar包的名称和版本号就行了(也就是常说的坐标),这样就实现了jar包共享,避免每一个项目都单独引入jar包带来的麻烦。使用maven管理就相当于,直接发给你的朋友这首歌的链接。maven参考博客
  查询依赖的网站:https://mvnrepository.com/

2.3 JDBC的使用

  首先需要导入数据库连接依赖,这样才能将Java代码连接到数据库

<!--数据库连接依赖-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version><scope>runtime</scope>
</dependency>

然后创建实体类,实体类中的字段与数据库中的列名一一对应,数据类型也是相对应的

private Integer id;
private String name;
private Integer sex;
private String pic;
private Date birth;
private String location;
private String introduction;
public Singer() {
}public Singer(Integer id, String name, Integer sex, String pic, Date birth, String location, String introduction) {this.id = id;this.name = name;this.sex = sex;this.pic = pic;this.birth = birth;this.location = location;this.introduction = introduction;
}public Integer getId() {return id;
}public void setId(Integer id) {this.id = id;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}public Integer getSex() {return sex;
}public void setSex(Integer sex) {this.sex = sex;
}public String getPic() {return pic;
}public void setPic(String pic) {this.pic = pic;
}public Date getBirth() {return birth;
}public void setBirth(Date birth) {this.birth = birth;
}public String getLocation() {return location;
}public void setLocation(String location) {this.location = location;
}public String getIntroduction() {return introduction;
}public void setIntroduction(String introduction) {this.introduction = introduction;
}@Override
public String toString() {return "Singer{" +"id=" + id +", name='" + name + '\'' +", sex=" + sex +", pic='" + pic + '\'' +", birth=" + birth +", location='" + location + '\'' +", introduction='" + introduction + '\'' +'}';
}

因为后面使用jdbc操作会频繁的连接数据库,关闭数据库释放资源,于是将这两个部分抽取成工具类中的静态方法,直接调用

// 加载驱动并建立数据库驱动
public static Connection getConnection() throws ClassNotFoundException, SQLException {String url = "jdbc:mysql://localhost:3306/music";String username = "root";String password = "123456";String driver = "com.mysql.jdbc.Driver";Class.forName(driver);return DriverManager.getConnection(url, username, password);
}// 关闭数据库连接,释放资源
public static void release(Statement statement, Connection conn) {if (statement != null) {try {statement.close();} catch (SQLException e) {e.printStackTrace();}statement = null;}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}conn = null;}
}public static void release(ResultSet resultSet, Statement statement, Connection conn) {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}resultSet = null;}release(statement, conn);
}

持久层CRUD的方法api和测试方法的测试

查询所有记录

/*** 查询所有方法* @return*/
public ArrayList<Singer> selectAll() {Connection conn = null;Statement statement = null;ResultSet resultSet = null;ArrayList<Singer> singers = new ArrayList<Singer>();try {// 获取数据库连接conn = JDBCUtil.getConnection();// 获得statement对象statement = conn.createStatement();//发送SQL语句String sql = "select * from singer;";System.out.println(sql);resultSet = statement.executeQuery(sql);// 处理查询结果while (resultSet.next()) {Singer singer = new Singer();singer.setId(resultSet.getInt("id"));singer.setName(resultSet.getString("name"));singer.setSex(resultSet.getInt("sex"));singer.setPic(resultSet.getString("pic"));singer.setBirth(resultSet.getDate("birth"));singer.setLocation(resultSet.getString("location"));singer.setIntroduction(resultSet.getString("introduction"));singers.add(singer);return singers;}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {JDBCUtil.release(statement, conn);}return null;
}
// 查询所有的
SingerDao singerDao = new SingerDao();
ArrayList<Singer> singers = singerDao.selectAll();
for (Singer singer : singers) {System.out.println(singer);
}

按照id查询

/*** 按id查询方法* @return*/
public Singer selectById(Integer id) {Connection conn = null;Statement statement = null;ResultSet resultSet = null;try {// 获取数据库连接conn = JDBCUtil.getConnection();// 获得statement对象statement = conn.createStatement();//发送SQL语句String sql = "select * from singer where id=" + id +";";System.out.println(sql);resultSet = statement.executeQuery(sql);// 处理查询结果while (resultSet.next()) {Singer singer = new Singer();singer.setId(resultSet.getInt("id"));singer.setName(resultSet.getString("name"));singer.setSex(resultSet.getInt("sex"));singer.setPic(resultSet.getString("pic"));singer.setBirth(resultSet.getDate("birth"));singer.setLocation(resultSet.getString("location"));singer.setIntroduction(resultSet.getString("introduction"));return singer;}return null;} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {JDBCUtil.release(statement, conn);}return null;
}
// 按照id查询
SingerDao singerDao = new SingerDao();
Singer singer = singerDao.selectById(63);
System.out.println(singer);

新增

/*** insert操作* @param singer* @return*/
public boolean insert(Singer singer) {Connection conn = null;Statement statement = null;try {// 获取数据库连接conn = JDBCUtil.getConnection();// 获得statement对象statement = conn.createStatement();//发送SQL语句SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String birth = sdf.format(singer.getBirth());String sql = "INSERT INTO singer" +" VALUES("+ singer.getId() + ",'"+ singer.getName() + "',"+ singer.getSex() + ",'"+ singer.getPic() + "','"+ birth + "','"+ singer.getLocation() + "','"+ singer.getIntroduction()+ "');";System.out.println(sql);int num = statement.executeUpdate(sql);if (num > 0) {return true;}return false;} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {JDBCUtil.release(statement, conn);}return false;
}
// 插入语句测试
// 先创建一个singer对象
Singer singer = new Singer();
singer.setId(64);
singer.setName("张三");
singer.setSex(1);
singer.setPic("/img/singerPic/1586091210109Sanna Nielsen.jpg");
singer.setBirth(new Date());
singer.setLocation("平顶山");
singer.setIntroduction("五音不全");
// 调用业务方法
SingerDao singerDao = new SingerDao();
boolean insert = singerDao.insert(singer);
System.out.println(insert);

修改

/*** update方法* @param singer* @return*/
public boolean update(Singer singer) {Connection conn = null;Statement statement = null;try {// 获取数据库连接conn = JDBCUtil.getConnection();// 获得statement对象statement = conn.createStatement();//发送SQL语句String sql = "update singer set introduction='"+ singer.getIntroduction() + "' where id="+ singer.getId() + ";";System.out.println(sql);int num = statement.executeUpdate(sql);if (num > 0) {return true;}return false;} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {JDBCUtil.release(statement, conn);}return false;
}
// 修改
Singer singer1 = new Singer();
singer1.setId(64);
singer1.setIntroduction("歌声甜美");
SingerDao singerDao = new SingerDao();
boolean update = singerDao.update(singer1);
System.out.println(update);

按照id删除

/*** delete方法* @param id* @return*/
public boolean delete(Integer id) {Connection conn = null;Statement statement = null;try {// 获取数据库连接conn = JDBCUtil.getConnection();// 获得statement对象statement = conn.createStatement();//发送SQL语句String sql = "delete from singer where id=" + id +";";System.out.println(sql);int num = statement.executeUpdate(sql);if (num > 0) {return true;}return false;} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {JDBCUtil.release(statement, conn);}return false;
}
// 删除
SingerDao singerDao = new SingerDao();
boolean delete = singerDao.delete(64);
System.out.println(delete);

2.4 JDBC总结

使用JDBC进行CRUD的步骤:

  • 导入数据库连接依赖(jar包)
  • 创建实体类
  • 创建工具类(连接数据库,释放资源)
  • 接口api方法(crud方法)
  • 测试,创建方法类的对象,使用对象调用方法完成数据持久化操作

3 mybatis

  还以遥控器为例,假如说你家的客厅100平,之前的遥控的范围不够,你还是要走几步,现在人家又说了,最新款的遥控器可以支持15米,你说你换不换?
mybatis是一种优秀的ORM框架

3.1 什么是ORM?为什么是ORM不是JDBC?

  ORM(Object Relational Mapping)即对象关系映射,是一种开发规范。将简单的java对象(pojo)和数据库表记录进行映射,使得表中的记录能和POJO一一对应。
  JDBC的劣势:代码繁琐(sql语句的拼接发送接收),SQL拼接复杂且容易出错,耦合度太高(SQL语句硬编码到java程序,不利于后期的维护),性能问题。基于以上诸多问题,企业中的开发慢慢过度到了ORM框架,下面讲到的mybatis框架就是一个十分优秀的ORM框架

3.2 mybatis的使用

maven项目的第一步,导依赖

<!--mybatis的依赖-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version>
</dependency>
<!--数据库连接依赖-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version>
</dependency>

创建POJO类Singer

private Integer id;
private String name;
private Integer sex;
private String pic;
private Date birth;
private String location;
private String introduction;

使用lombok简化开发

<!--lombok简化实体类开发,如果之前没有下载过依赖的同名插件的话需要下载安装,然后重启一下idea-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version><optional>true</optional>
</dependency>

创建jdbc.properties数据库连接配置

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/music
jdbc.username=root
jdbc.password=123456

创建mybatis.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--加载配置文件--><properties resource="jdbc.properties"/><typeAliases><typeAlias type="com.xiaochen.domain.Singer" alias="singer"/></typeAliases><!--数据源环境--><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--加载映射文件--><mappers><mapper resource="mapper/SingerMapper.xml"/></mappers>
</configuration>

创建mapper接口

/*** 查询全部* @Param void* @return ArraryList<Singer>*/
public ArraryList<Singer> queryAll();/*** 按id查* @param id* @return Singer */
public Singer queryById(Integer id);/*** 增* @param singer* @return boolean*/
public boolean save(Singer singer);/*** 改* @param singer* @return boolean*/
public boolean update(Singer singer);/*** 删* @param id* @return boolean*/
public boolean delete(Integer id);

使用Spring整合mybatis先导入依赖

<!--spring整合mybatis-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version>
</dependency>

spring框架整合mybatis需要满足的四个条件

  • mapper标签的namespace = 接口全限定名
  • 接口方法名 = mapper字标签的id
  • 接口方法参数类型 = mapper字标签的parameterType
  • 接口方法返回值类型 = mapper字标签的resultType

满足条件即可使用框架底层逻辑完成之前JDBC的数据库连接,SQL语句发送等过程。现在按照四个条件构建xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaochen.mapper.SingerMapper"><!--查所有--><select id="queryAll" resultType="singer">select * from singer order by id desc ;</select><!--条件查--><select id="queryById" parameterType="int" resultType="singer">select * from singer where id = #{id};</select><!--增--><insert id="save" parameterType="singer">insert into singer values (#{id},#{name},#{sex},#{pic},#{birth},#{location},#{introduction});</insert><!--改--><insert id="update" parameterType="singer">update singer set introduction = #{introduction} where id = #{id};</insert><!--删--><insert id="delete" parameterType="int">delete from singer where id = #{id};</insert>
</mapper>

测试类使用Junit进行测试
导依赖

<!--Junit测试依赖-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope>
</dependency>
/*** 查询操作* @Param void* @return*/
@Test 
public void queryTest() throws IOException {InputStream in = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);ArrayList<Singer> singers = mapper.queryAll();for (Singer singer : singers) {System.out.println(singer);}session.close();
}
/*** 条件查询操作* @Param void* @return*/
@Test
public void queryByIdTest() throws IOException {InputStream in = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);Singer singer = mapper.queryById(63);System.out.println(singer);session.close();
}
/*** 插入操作* @Param void* @return*/
@Test
public void saveTest() throws IOException {Singer singer = new Singer();singer.setId(64);singer.setName("张三");singer.setSex(1);singer.setPic("/img/singerPic/1586091210109Sanna Nielsen.jpg");singer.setBirth(new Date());singer.setLocation("平顶山");singer.setIntroduction("五音不全");InputStream in = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);boolean result = mapper.save(singer);System.out.println(result);queryTest();session.close();
}
/*** 更新操作* @Param void* @return*/
@Test
public void updateTest() throws IOException {Singer singer = new Singer();singer.setId(64);singer.setIntroduction("歌声甜美");InputStream in = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);boolean update = mapper.update(singer);System.out.println(update);queryTest();session.close();
}
/*** 删除操作* @Param void* @return*/
@Test
public void deleteTest() throws IOException {InputStream in = Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);boolean result = mapper.delete(64);System.out.println(result);queryTest();session.close();
}

3.3 mybatis总结

mybatis开发步骤:

  • 导依赖
  • 创建实体类
  • 配置文件
  • spring框架整合mybatis需要满足的四个条件
    • mapper标签的namespace = 接口全限定名
    • 接口方法名 = mapper字标签的id
    • 接口方法参数类型 = mapper字标签的parameterType
    • 接口方法返回值类型 = mapper字标签的resultType
  • 按照条件创建接口和映射文件
  • 测试类读取配置文件创建mapper对象,调用方法

4 mybatis与jdbc的逻辑相同处

  将mybatis对标jdbc可以发现,使用流程大体上是一样的,导入数据库连接依赖,创建实体类,创建持久层api方法供测试调用(mybatis将SQL抽取成了映射文件),测试类调用api并完成相应的操作。

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

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

相关文章

传统蒙文字体_蒙古要改回使用传统回鹘蒙文,这是种什么文字,蒙古为什么要改回...

喜欢就点关注吧!文字是一个国家的文化象征&#xff0c;也是其书面交流的主要工具&#xff0c;世界上的大多数国家都有自己独特的文字&#xff0c;我们的邻国蒙古也是如此&#xff0c;近日蒙古国实行了一场意义重大的文字改革&#xff0c;据新华社乌兰巴托3月18日报道&#xff0…

三态输出门实验报告注意事项_数电基础知识:各种IO输出的类型

集电极开路(OC)集电极开路输出的结构如图1所示&#xff0c;右边的那个三极管集电极什么都不接&#xff0c;所以叫做集电极开路&#xff1b;左边的三极管为反相之用&#xff0c;使输入为“0”时&#xff0c;输出也为“0”。对于图 1&#xff0c;当左端的输入为“0”时&#xff0…

数据持久化技术——MP

文章目录1 环境搭建1.1 创建一个maven的project1.2 pom.xml文件导入web开发依赖1.3 创建SpringBoot项目的主程序入口2 代码生成器3 配置数据库4 导入前端页面5 开始前端控制器的编码5.1 wrapper构造器mybatis-plus(简称 MP)是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基…

win7无法连接打印机拒绝访问_如何解决局域网无法访问SQL Server 2008 无法连接到(local)...

初次安装使用SQL server 2008时&#xff0c;可能会遇到无法连接到(local)的情况。那么&#xff0c;如何解决此问题&#xff1f;工具/原料: SQL server 2008方法/步骤1. 打开SQL server 配置管理器-->SQL server 网络配置-->实例名的协议(我的实例名为SQLEXPRESS)。2. 将S…

windows进程管理器_任务管理器就能搞定9成的电脑问题?方法在这里!

90% 对于电脑的不满&#xff0c;都逃不出这几个方面&#xff1a;电脑状态无法随时监测、运行卡顿、开机时间长、莫名黑屏、电池关键时刻不扛使(笔记本电池怎么保养&#xff1f;能不能一直插电源充电&#xff1f;可以戳这里→)&#xff0c;很多小伙伴就选择安装第三方软件来解决…

三维网格精简算法java版_ISMAR 2020 | 商汤提出手机端实时单目三维重建系统

导读&#xff1a;商汤研究院和浙江大学CAD&CG国家重点实验室合作研发了一个手机端实时单目三维重建系统Mobile3DRecon。与现有的基于RGBD的在线三维重建或离线生成表面网格的系统不同&#xff0c;该系统结合前端位姿跟踪结果&#xff0c;允许用户使用单目摄像头在线重建场景…

【分类汇总】idea快捷键、idea配置、常用插件

写在前面 千万别看目录很长就感觉本篇博客很絮叨繁琐&#xff0c;里面多是配置的讲解贴了很多的图片方便大家了解&#xff0c;配置成功一次之后就可以一直使用了。 快捷键的使用建议大家先看&#xff0c;后续敲代码的时候刻意的使用快捷键&#xff0c;相信经过两三天的使用就可…

win10设置默认输入法_个性化设置技巧

个性化设置技巧子墨居士前言本次内容主要是win10系统自带的功能&#xff0c;不是用第三方软件优化桌面的情况下&#xff0c;让自己的电脑桌面能更美观、更舒服。系统自身的个性化设置主要是下图中的几个。鼠标右击->个性化设置。 第三方软件的效果会更好&#xff0c;毕竟是专…

什么叫组网_家庭wifi,如何组网最合适

wifi信号通过电磁波在空中传播的&#xff0c;属于微波通信的一种&#xff0c;因为微波本身及发射功率的限制&#xff0c;导致wifi的穿透能力比较差&#xff0c;北方比较厚的承重强&#xff0c;铁门、家具等对都会对wifi信号有较强的削弱作用。穿过的障碍物越多&#xff0c;这种…

java输入输出、数组初始化

&#x1f4a1;涉及的知识点速通&#x1f6eb; 关于输入输出你都知道啥?&#x1f6eb; 关于控制路程都需要注意啥?&#x1f6eb; 关于数组的问题你能答对几道&#xff1f;&#x1fa82; 数组初始化的小细节你都知道吗?&#x1fa82; 这些Arrays的常见API你都掌握了吗?&#…

linux rm 命令删除文件恢复_Linux之恢复误删除文件

前言每当我们在生产环境服务器上执行rm命令时&#xff0c;总是提心吊胆的&#xff0c;因为一不小心执行了误删&#xff0c;然后就要准备跑路了&#xff0c;毕竟人不是机器&#xff0c;更何况机器也有 bug。那么如果真的删除了不该删除的文件&#xff0c;比如数据库、日志或执行…

java三大特征 重载与重写的区别

&#x1f4a1;涉及的知识点速通&#x1f6eb; OOP的三大特征都是什么?&#x1fa82; 什么是封装?&#x1fa82; 什么是继承?&#x1fa82; 什么是多态?&#x1f6eb; 关于构造器你都知道什么?&#x1f6eb; 关于类的源文件都需要知道什么?&#x1f6eb; 重载和重写都是什…

发生身份验证错误_Python MySQL8.0 错误

Python MySQL8.0 错误&#xff1a;authentication plugin calling_sha2_password is not supported.Python3 进行到 python3 mysql(mysql-connector)&#xff0c;然后安装mysql-8.0.16&#xff0c;照着示例程序运行 python&#xff0c;遇到这个大大的问题&#xff1a;authentic…

vue 获取当前元素的父元素_react获取触发元素的属性 e.target.dataset

我的react项目中一个应用场景就是在点击一个元素的时候想要获取到这个元素的属性。代码如下&#xff1a;renderyear()>{return(<div><div data-value"年初">年初</div> </div>);}//点击标签的时候触发的函数 TagClick(e)>{console.log…

为什么要学Redis(NoSQL数据库)

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的Redis 6专栏&#xff0c;在这个系列专栏中我对B站尚硅谷的Redis教程进行一个总结&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知识点速览&…

centos常用命令_二、Docker镜像是什么?Docker常用命令

科技奇闻 关注让你我共同进步文章来源&#xff1a;CSDN作者&#xff1a;IronmanJayDocker常用命令1.帮助命令docker version #查看版本号docker info #显示Docker系统信息&#xff0c;包括镜像和容器数docker --help #查看Docker有哪些命令…

实现定时中断_无线传感器网络实验报告(二)Timer定时应用实验

实验二&#xff1a; Timer定时应用实验2.1实验目的1. 认识并了解 CC2530 定时器&#xff1b; 2. 学习定时器的基本配置与应用&#xff1b; 3. 在 ZigBee 模块上运行定时器程序。2.2实验原理根据数据手册可知 CC2530 总共有 4 个定时器&#xff0c;但是定时器 2 被系统占用&…

详析java中的关键字和权限修饰

&#x1f4a1;涉及的知识点速通&#x1f6eb; 关于关键字你都知道什么?&#x1fa82; this和super关键字&#x1fa82; instanceof关键字&#x1fa82; static关键字&#x1fa82; final关键字&#x1f6eb; 权限修饰符的作用范围知多少?各位小伙伴们大家好&#xff0c;欢迎来…

JQ 全选后获取选中的值_Filecoin如何创建账户钱包并获取FIL测试币

昨天"猩动力节点"加入了fielcoin的测试网络&#xff0c;对用户或者矿工来说&#xff0c;如何获取代币&#xff0c;创建钱包保护好自己的资产&#xff0c;每一个用户来说都很关心。下面我们一起来学习如何创建账户钱包&#xff0c;并获取FIL 测试代币。在创建账户钱包…

Redis中 字符串的常用命令

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的Redis 6专栏&#xff0c;在这个系列专栏中我对B站尚硅谷的Redis教程进行一个总结&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f4a1;Redis知识点速览&…