Mybatis | Mybatis的“入门程序“

Mybatis的入门程序

目录:

  • Mybatis的入门程序
    • 一、查询数据
      • 根据表 “主键id” 查询数据
      • 模糊查询
    • 二、添加数据
    • 三、更新数据
    • 四、删除数据

在这里插入图片描述

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材为:
《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著
文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。
欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权可联系我,进行删除,如果雷同,纯属巧合)


一、查询数据

在实际开发中,查询操作 通常都会涉及单条数据 根据表 “主键id” 查询数据,以及多条数据模糊查询

根据表 “主键id” 查询数据

根据 “表主键id” 查询数据 主要是通过查询数据库表中的主键( 这里表示唯一的 主键id号 )来实现的。

  • 创建 表t_customer

在这里插入图片描述

在这里插入图片描述

  • 导入 Mybatis框架依赖 (引入Mybatis的核心包 和 Mybatis的依赖包) 和 MySQL驱动JAR: [Mybatis网址
    获得Mybatis核心包 和 Mybatis的依赖包

    MySQL驱动JAR
    在这里插入图片描述

  • log4j.properties :

# 因为Mybatis默认使用功能log4j来输出日志信息,所以如果要查看控制处输出sql语句
# 就要在classpath路径下配置log4g的配置文件 : log4j.properties (log4j要配置的"日志文件") :
# 即在src目录下配置 log4j.properties配置文件,然后将以下的配置信息复制到配置文件中# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
#将com.myh包下所有类的日志记录设计为DEBUG
log4j.logger.com.myh=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

由于MyBatis默认使用log4j输出日志信息,所以 如果查看控制台输出SQL语句,那么就需要在classpath路径下配置其日志文件。在项目的src目录下创建log4i.properties 文件。

上述代码中 :包含了全局的日志配置MyBatis的日志配置控制台输出,其中Mybatis的日志配置用于将com.myh包下所有类日志记录级别设置为DEBUG
(可在MyBatis使用手册中的Logging可以找到图上述代码中的的配置信息,只需将其复制到项目的log4j配置文件中,并对MyBat志配置信息进行简单修改即可使用。)

  • Customer.java
package com.myh.po;
public class Customer { // "顾客"类 --"持久化"类private Integer id; //主键private String username; //客户名称private String jobs; //职业private String phone; //电话public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getJobs() {return jobs;}public void setJobs(String jobs) {this.jobs = jobs;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "Customer{" +"id=" + id +", username='" + username + '\'' +", jobs='" + jobs + '\'' +", phone='" + phone + '\'' +'}';}
}

上述代码可以看出,持久化类Customer普通JavaBean 并没有什么区别,只是其属性字段与数据库中的表字段相对应。实际上,Customer 就是一个POJO (普通Java对象)。MyBatis就是采用POJO作为持久化类来完成对数据库操作的。

  • CustomerMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--  namespace的命名空间 -->
<mapper namespace="CustomerMapper"><!-- 根据客户编号获取客户信息--><select id="findCustomerById" parameterType="Integer" resultType="com.myh.po.Customer">select * from t_customer where id = #{id}</select>
</mapper>

第2-3行是MyBatis的约束配置,第6-12行是需要程序员编写映射信息。其中,<mapper>元素配置文件根元素,它包含一个 namespace属性,该属性为这个 <mapper> 指定了 唯一的命名空间,通常会设置成 “包名+SQL映射文件名”的形式。

子元素 <select> 中的信息是用于 执行查询操作 的配置,其 id 属性是 <select>元素在映射文件中的唯一标识parameterType 属性用于指定传入参数的类型,这里表示传递给执行SQL的是一个Integer类型的参数,resultType 属性用于指定返回结果的类型,这里表示返回的数据是Customer类型。

在定义的查询SQL语句中,“#{ }“用于表示一个 占位符,相当于“?", 而 “#[ id ] " 表示 占位符接收参数名称为id

  • mybatis-config.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><!--Mybatis的配置文件: mybatis-config.xml : 为全局配置文件,配置了“运行环境的信息”,主要内容是 : 数据库的连接 (其属于Mybatis操作步骤的第一步 : 读取Mybatis-config.xml配置文件的"先行要准备好的内容")
--><!--  1.配置环境,默认环境id为mysql  --><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"/><!--  用于指定MyBatis获取数据库连接的方式。“POOLED”代表的是连接池。 --><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--  2.配置Mapper文件的位置 : mybatis.config.xml配置文件要读取映射文件: 即读取mapper.xml文件   --><!--  因为按照"Mybatis框架的执行流程图 : 加载了mybatis-config.xml配置文件之后,是要加载"映射文件"的,所以  --><!--  读取"映射文件"  --><mappers><mapper resource="com/myh/mapper/CustomerMapper.xml"/></mappers></configuration>

在上述代码中,第2~3行是MyBatis配置文件约束信息,下面 <configuration>元素中的内容就是开发人员需要编写的配置信息。这里按照<configuration>子元素的功能不同,将配置分为了两个步骤 :第1步 配置连接数据库环境第2步 配置了Mapper的位置

  • MybatisTest.java (测试类)
package com.myh.test;import com.myh.po.Customer;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.InputStream;public class MybatisTest {  // 测试类 : 根据id来查询数据/*** 根据客户编号查询客户信息*/@Test //Junit4"单元测试"public void findCustomerByIdTest() throws Exception{//1.读取mybatis框架的配置文件String resource = "mybatis-config.xml";//通过“输入流”读取mybatis配置文件/*在该mybatis-config.xml配置文件中,已配置了“数据源”信息 和配置了"映射文件 : XxxMapper.xml”的位置,可实施加载“映射文件”*/InputStream inputStream = Resources.getResourceAsStream(resource);//2.根据配置文件“构建会话工厂 : SqlSessionFactory ”SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.通过SqlSessionFactory(会话工厂)创建SqlSession("会话"对象)SqlSession sqlSession = sqlSessionFactory.openSession();//4.SqlSession执行"映射文件"中定义的SQL,并返回"映射结果"//SelectOne()中的参数为 : "映射文件"中的sql语句 + 该sql语句对应的参数为:1 ---执行获得指定id下的“顾客信息”Customer customer = (Customer)sqlSession.selectOne("CustomerMapper.findCustomerById", 1);//打印输出结果System.out.println(customer.toString());//5.关闭SqlSessionsqlSession.close();}
}

在测试类的 的findCustomerByldTest( )方法中,首先通过输入流读取了配置文件 ( mybatis-config.xml ),
根据配置文件构建SqlSessionFactory 对象 (会话工厂对象)。接下来通过SqlSessionFactory 对象的 openSession( ) 方法来获得 SqlSession对象。

SelectOne( ) 方法的第1个参数表示 映射SQL标识字符串,它由CustomerMapper.xml<mapper> 标签的 namespace + . + <select>标签的 id值 组成。 第2个参数表示查询所需要的参数。即查询的是客户表中id为1的客户。最后,程序执行完毕时,要关闭SqlSession

模糊查询

  • 模糊查询 的实现非常简单,只需要在 根据 “主键id查询” 查询的基础上进行部分修改 即可。
    ( “映射文件” 和 “测试类” 中的代码有所不同其他代码都是基本相同的。)
    CustomerMapper2.xml (要自动在 mybatis-config.xml加载此 ”映射文件“)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--  namespace的命名空间 -->
    <mapper namespace="CustomerMapper2"><!-- 模糊查询 (根据username来进行"模糊查询") --><select id="findCustomerByName" parameterType="String" resultType="com.myh.po.Customer">select * from t_customer where username like '%${value}%'-- 此处通过 ${}来进行sql的拼接,无法防止SQL注入问题,可用concat()函数 + #{} 解决该问题-- select * from t_customer where username like concat('%',#{value},'%') : 该sql语句不会产生SQL注入问题</select></mapper><!--#{} : 相当于占位符${} : 拼接sql字符串-->
    

    与根据表 主键id 相比,上述配置代码中的属性 idparameterTypeSQL语句相应变化。

    SQL语句中的“${ } " 用来表示用于 拼接SQL语句字符串,即不加解释原样输出。 “${value}”表示 要拼接的简单类型参数 ( 表示要拼接sql语句后面的参数名value )。


    注意点

    在使用“${ }” 进行SQL字符串拼接时,无法防止SQL注入问题。所以想要既能实查询,又要防止SQL注入,可以对上述映射文件CustomerMapper.xml模糊查询进行修改,使用MySQL中的 concat( )函数进行字符串拼接

    CustomerMapper2.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--  namespace的命名空间 -->
    <mapper namespace="CustomerMapper2"><!-- 模糊查询 (根据username来进行"模糊查询") --><!--此处通过 ${}来进行sql的拼接,无法防止SQL注入问题,可用concat()函数 + #{} 解决该问题select * from t_customer where username like '%${value}%' : 此sql语句会产生SQL注入问题,下面那个语句则不会--><select id="findCustomerByName" parameterType="String" resultType="com.myh.po.Customer">select * from t_customer where username like concat('%',#{value},'%')</select></mapper><!--
    #{} : 相当于占位符${} : 拼接sql字符串
    -->
    

    MybatisTest2.java

    package com.myh.test;import com.myh.po.Customer;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;/*** 模糊查询 : 只是"映射文件" 和 "测试类"中的部分有所不同,其他代码都是基本相同的*/
    public class MybatisTest2 {  // 测试类 : 模糊查询@Testpublic void findCustomerByNameTest() throws IOException {//1.读取mybatis-config.xml配置文件 (通过"输入流"来读取)String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//2.根据配置文件(通过SqlSessionFactoryBuilder对象 )创建"会话工厂"对象 : SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.获得SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//4.执行映射文件中的sql语句,并返回映射结果List<Customer> customers = sqlSession.selectList("CustomerMapper2.findCustomerByName", "张");//打印输出结果for (Customer customer : customers) {System.out.println(customer);}//5.关闭SqlSessionsqlSession.close();}
    }
    

二、添加数据

  • MyBatis映射文件 (XxxMapper.xml ) 中,添加操作 是通过 <insert>元素 来实现的。例如,向数据库中的 t customer表插入一条数据可以通过如下配置来实现。
    ps :
    添加数据,也只是映射文件测试类中部分代码不同,其他代码基本都是相同的

    CustomerMapper3.xml : (要自动在 mybatis-config.xml加载此 ”映射文件“)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--映射文件中,插入数据用 <insert>元素
    -->
    <!-- #{} : 相当于"占位符"  ${} : 相当于在sql语句后要拼接的"字符串" -->
    <mapper namespace="CustomerMapper3"><insert id="addCustomer" parameterType="com.myh.po.Customer">insert into t_customer(username,jobs,phone)values(#{username},#{jobs},#{phone})</insert>
    </mapper>
    

    MybatisTest3.java (测试类)

    package com.myh.test;import com.myh.po.Customer;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;/*** 添加数据 : 只是"映射文件" 和 "测试类"中的部分有所不同,其他代码都是基本相同的*/
    public class MybatisTest3 {  // 测试类 : 添加数据@Testpublic void addCustomerTest() throws IOException {//1.读取mybatis-config.xml配置文件 (通过"输入流"来读取)String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//2.根据配置文件(通过SqlSessionFactoryBuilder对象 )创建"会话工厂"对象 : SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.获得SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//4.SqlSession执行"添加数据"操作//4.1创建Customer对象,并向其中添加数据Customer customer = new Customer();customer.setUsername("小明");customer.setJobs("学生");customer.setPhone("123456");//4.2执行SqlSession的插入方法,返回Sql影响的行数int rows = sqlSession.insert("CustomerMapper3.addCustomer", customer);if (rows > 0) {System.out.println("你成功插入了" + rows + "条数据");} else {System.out.println("执行插入操作失败!");}//4.3提交事务sqlSession.commit();//5.关闭SqlSessionsqlSession.close();}
    }
    

    在上述代码中,,首先创建了Customer对象,并向Customer对象中添加了属性值;然后通过SqlSession对象的insert( )方法执行插入操作,并通过该操作返回的数据判断插入操作是否执行成功。最后通过SqlSesseion的commit( )方法提交了事务,并通过close()方法关闭SqlSession

三、更新数据

  • MyBatis的 更新操作映射文件 : XxxMapper.xml 中是通过配置 <update>元素 来实现的。如果需要更新数据,可以通过如下代码配置来实现。
    ps :
    更新操作 / 更新数据,也只是映射文件测试类中部分代码不同,其他代码基本都是相同的

    CustomerMapper4.xml : (要自动在 mybatis-config.xml加载此 ”映射文件“)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--映射文件中,更新数据用 <update>元素
    -->
    <!-- #{} : 相当于"占位符"  ${} : 相当于在sql语句后要拼接的"字符串" -->
    <mapper namespace="CustomerMapper4"><update id="updateCustomer" parameterType="com.myh.po.Customer">update t_customer set username = #{username},jobs=#{jobs},phone=#{phone}where id = #{id}</update>
    </mapper>
    

    MybatisTest4.java测试类

    package com.myh.test;import com.myh.po.Customer;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;import java.io.IOException;
    import java.io.InputStream;/*** 更新数据 : 只是"映射文件" 和 "测试类"中的部分有所不同,其他代码都是基本相同的*/
    public class MybatisTest4 {  // 测试类 : 更新数据@Testpublic void updateCustomerTest() throws IOException {//1.读取mybatis-config.xml配置文件 (通过"输入流"来读取)String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//2.根据配置文件(通过SqlSessionFactoryBuilder对象 )创建"会话工厂"对象 : SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.获得SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//4.SqlSession执行"更新"操作Customer customer = new Customer();customer.setId(5);customer.setUsername("小明");customer.setJobs("高级软件开发工程师");customer.setPhone("12345678");int update = sqlSession.update("CustomerMapper4.updateCustomer", customer);if (update > 0) {System.out.println("你成功修改了" + update + "条数据");} else {System.out.println("执行修改操作失败!");}sqlSession.commit();//5.关闭SqlSessionsqlSession.close();}
    }
    

四、删除数据

  • MyBatis删除操作映射文件中是通过配置 <delete>元素 来实现的。在映射文件 : CustomerMapper4.xml中添加删除客户信息SQL语句
    ps :
    删除操作,也只是映射文件测试类中部分代码不同,其他代码基本都是相同的

    CustomerMapper5.xml (要自动在 mybatis-config.xml加载此 ”映射文件“)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--映射文件中,删除数据用 <delete>元素
    -->
    <!-- #{} : 相当于"占位符"  ${} : 相当于在sql语句后要拼接的"字符串" -->
    <mapper namespace="CustomerMapper5"><update id="deleteCustomer" parameterType="Integer">delete from t_customer where id = #{id}</update>
    </mapper>
    

    MybatisTest5.java测试类

    package com.myh.test;import com.myh.po.Customer;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;import java.io.IOException;
    import java.io.InputStream;/*** 删除数据 : 只是"映射文件" 和 "测试类"中的部分有所不同,其他代码都是基本相同的*/
    public class MybatisTest5 {  // 测试类 : 删除数据@Testpublic void addCustomerTest() throws IOException {//1.读取mybatis-config.xml配置文件 (通过"输入流"来读取)String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//2.根据配置文件(通过SqlSessionFactoryBuilder对象 )创建"会话工厂"对象 : SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3.获得SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//4.SqlSession执行"删除"操作int delete = sqlSession.delete("CustomerMapper5.deleteCustomer", 5);if (delete > 0) {System.out.println("你成功删除了" + delete + "条数据");} else {System.out.println("执行删除操作失败!");}sqlSession.commit();//5.关闭SqlSessionsqlSession.close();}
    }
    

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

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

相关文章

Freesia项目介绍

项目介绍 这是一个Spring Boot Vue的前后端分离项目&#xff0c;实现的是一个通用的后台管理系统。 框架使用 前端使用了layui-vue和layui-vue-admin&#xff0c;分别提供了组件和前端整体架构的支持。 后端使用Spring Boot框架管理 项目技术使用 前端 Layui-vue、Layui…

Java8 Stream操作流10条常用方法

1.基础数据 Data AllArgsConstructor NoArgsConstructor public class User {private String name;private Integer age;private String sex;private String city; //城市private Integer money; //业绩金额 } //准备数据List<User> users new ArrayList<>();use…

UnityWebGL UGUI中文不显示问题

这是Unity编辑中效果 打包成webgl后的效果&#xff08;中文没有显示出来&#xff09; 解决方法 将Unity默认使用的Arial替换成中文字体。 1.找到电脑字体库&#xff08;win电脑字体库路径&#xff1a;C:\Windows\Fonts &#xff1b;Mac电脑搜索“字体册”&#xff09;。 2.将…

java008 - Java方法

1、方法概述 1.1 概念 将独立功能的代码块组织成为一个整体&#xff0c;使其具有特殊功能的代码集。 1.2 注意事项 方法必须先创建才能使用&#xff0c;该过程称为方法的定义方法创建好不能直接运行&#xff0c;需要手动使用才执行&#xff0c;该过程称为方法的调用 2、方…

ABAP-CPI: Get CPI Monitoring Log (通过postman去获取CPI监控中心的日志)

参照文档: SAP Business Accelerator Hub Using Message Monitoring and Logging (sap.com) 进入到你的CPI监控中心: 获取到上面的 https://..hana.ondemand.com的地址,在它后面加上/api/v1 即https://....hana.ondemand.com/api/v1 然后就可以开始postman调用了,文章…

终于支持中文,开源手绘风格画板工具 Revezone 推荐!

Excalidraw 是一款老牌的手绘风格画板工具&#xff0c;颜值高&#xff0c;操作简单&#xff0c;GitHub 上拥有 69k 的 Star &#x1f449; https://excalidraw.com/ 可惜的是&#xff0c;Excalidraw 只有网页版&#xff0c;也不支持中文字体&#xff1a; 最近发现了国内开发者…

Random,随机函数

黑马程序员学习笔记 nextInt(n)&#xff1a; 只生成0~(n-1)之间的数字&#xff0c;不包括n 主要代码就三个; package com.zhang.random;import java.util.Random;public class RandomDemo1 {public static void main(String[] args) {//目标&#xff1a;掌握使用Random生成随…

SAP PO接口行项目json缺少中括号[]问题

PO接口小问题问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#xff1a;HTTP Header ITEM将缺少[].需要注意 PO接口小问题 问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#…

Vue项目 快速上手(如何新建Vue项目,启动Vue项目,Vue的生命周期,Vue的常用指令)

目录 一.什么Vue框架 二.如何新建一个Vue项目 1.使用命令行新建Vue项目 2.使用图形化界面新建Vue项目 三.Vue项目的启动 启动Vue项目 1.通过VScode提供的图形化界面启动Vue项目 2.通过命令行的方式启动Vue项目 四.Vue项目的基础使用 常用指令 v-bind 和 v-model v…

phpldapadmin This base cannot be created with PLA

phpldapadmin This base cannot be created with PLA 1、问题描述2、问题分析3、解决方法&#xff1a;创建根节点 1、问题描述 安装phpldapadmin参考链接: https://blog.csdn.net/OceanWaves1993/article/details/136048686?spm1001.2014.3001.5501 刚安装完成phpldapadmin&…

kafka三节点集群平滑升级过程指导

一、前言 Apache Kafka作为常用的开源分布式流媒体平台&#xff0c;可以实时发布、订阅、存储和处理数据流,多用于作为消息队列获取实时数据&#xff0c;构建对数据流的变化进行实时反应的应用程序&#xff0c;已被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型…

【MySQL】MySQL复合查询--多表查询自连接子查询 - 副本

文章目录 1.基本查询回顾2.多表查询3.自连接4.子查询 4.1单行子查询4.2多行子查询4.3多列子查询4.4在from子句中使用子查询4.5合并查询 4.5.1 union4.5.2 union all 1.基本查询回顾 表的内容如下&#xff1a; mysql> select * from emp; ----------------------------…

计算机找不到ffmpeg.dll怎么办,这5种方法可快速解决

ffmpeg.dll 是一个在计算机系统中扮演重要角色的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它的功能与多媒体处理领域紧密相关。该文件作为 FFmpeg&#xff08;快速前进移动图像专家组&#xff09;项目的核心组件之一&#xff0c;承载着实现多种音频、视频编解码及…

Nginx网络服务六-----IP透传、调度算法和负载均衡

1.实现反向代理客户端 IP 透传 就是在日志里面加上一个变量 Module ngx_http_proxy_module [rootcentos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf server { listen 80; server_name www.kgc.org; location / { index index.html index.php; root /data/nginx/html/p…

BLEU: a Method for Automatic Evaluation of Machine Translation

文章目录 BLEU: a Method for Automatic Evaluation of Machine Translation背景和意义技术原理考虑 n n n - gram中 n 1 n1 n1 的情况考虑 n n n - gram中 n > 1 n\gt 1 n>1 的情况考虑在文本中的评估初步实验评估和结论统一不同 n n n 值下的评估数值考虑句子长度…

从C到C++

二、从C到C 本章介绍一些C拓展的非面向对象功能。 引用&#xff08;掌握&#xff09; 1.1 概念 引用从一定程度上讲是一个指针的平替&#xff0c;几乎被所有面向对象编程语言所使用。引用相当于对某一个目标变量起”别名“。 操作引用与操作原变量完全一样。 #include <iost…

如何获取Header??

两种获取Header的方式&#xff1a; 原始方式&#xff1a; RestController RequestMapping("/param") public class ParamController {//如何获取HeaderRequestMapping("/getHeader")public String getHeader(HttpServletRequest request){String userAge…

springboot之jdbc、druid、mybatis

springboot整合jdbc spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.52.3:3306/mybatis?useUnicodetrue&characterEncodingutf-8&serverTimezoneUTCusername: rootpassword: root<?xml version"1.0" encodi…

trie树(前缀树)

前缀树 1. 前缀树的的介绍2.前缀树的实现2.1插入功能2.2删除功能2.3查找前缀和查找单词功能2.4 哈希表版本 1. 前缀树的的介绍 在计算机科学中&#xff0c;trie&#xff0c;又称前缀树或字典树&#xff0c;是一种有序树&#xff0c;用于保存关联数组&#xff0c;其中的键通常是…

MarkDown实用技巧:MarkDown中如何实现换行?

MarkDown实用技巧&#xff1a;MarkDown中如何实现换行&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望…