五、深入理解Mybatis中的参数parameterType (传递一个简单参数,传递多个参数:@Param、使用自定义对象、按位置、使用Map)

1.1 parameterType

parameterType: 接口中方法参数的类型, 类型的完全限定名或别名。这个属性是可选的,因为 MyBatis可以推断出具体传入语句的参数,默认值为未设置(unset)。接口中方法的参数从 java 代码传入到mapper 文件的 sql 语句。

int 或 java.lang.Integer
hashmap 或 java.util.HashMap
list 或 java.util.ArrayList
student 或 com.bjpowernode.domain.Student

在这里插入图片描述
<select>,<insert>,<update>,<delete>都可以使用 parameterType 指定类型。
例如:

<delete id="deleteStudent" parameterType="int">delete from student where id=#{studentId}
</delete>

等同于

<delete id="deleteStudent" parameterType="java.lang.Integer">delete from student where id=#{studentId}
</delete>

1.2 MyBatis 传递参数

从 java 代码中把参数传递到 mapper.xml 文件。

1.3 一个简单参数

Dao 接口中方法的参数只有一个简单类型(java 基本类型和 String)占位符 #{ 任意字符 }和方法的参数名无关

接口方法:

/*** 一个简单类型的参数:*      简单类型:mybatis把java的基本数据类型和String都叫简单类型。* 在mapper文件获取简单类型的一个参数的值,使用 #{任意字符}* @param id* @return*/public Student selectStudentById(Integer id);

mapper 文件:

<select id="selectStudentById" resultType="com.zep.domain.Student" parameterType="java.lang.Integer">select id,name,email,age from student where id=#{studentId}
</select>

注意:
#{studentId} , 这里的studentId是自定义的变量名称,和方法参数名无关。

测试方法:

@Testpublic void testSelectStudentById() {/*** 使用mybatis的动态代理机制,使用SqlSession.getMapper(dao接口)* getMapper能够获取dao接口对应的实现类对象。*/SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class); // 这句代码可以自动创建dao接口的实现类对象//调用dao的方法,执行数据库的操作Student student = dao.selectStudentById(1001);System.out.println("学生=" + student);}

在这里插入图片描述

1.4 多个参数-使用@Param

当 Dao 接口方法多个参数,需要通过名称使用参数。在方法形参前面加入@Param(“自定义参数名”),mapper 文件使用#{自定义参数名}。

例如定义 List selectStudent( @Param(“personName”) String name ) { … }
mapper 文件 select * from student where name = #{ personName}

接口方法:

 /*** 多个参数:命名参数,在形参定义的前面加入@Param("自定义参数名称")*/public List<Student> selectMultiParam(@Param("myname") String name, @Param("myage") Integer age);

mapper 文件:

 <!--多个参数,使用@Param命名--><select id="selectMultiParam" resultType="com.zep.domain.Student">select * from student where name=#{myname} or age=#{myage}</select>

测试方法:

 @Testpublic void testSelectMultiParam() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);List<Student> students = dao.selectMultiParam("李四", 20);for (Student student : students) {System.out.println("学生=" + student);}sqlSession.close();}

在这里插入图片描述

1.5 多个参数-使用对象

使用 java 对象传递参数, java 的属性值就是 sql 需要的参数值。 每一个属性就是一个参数。
语法格式:

#{ property,javaType=java 中数据类型名,jdbcType=数据类型名称 }

javaType, jdbcType 的类型 MyBatis 可以检测出来,一般不需要设置。
常用格式 #{ property }
在这里插入图片描述
创建保存参数值的对象 QueryParam:
在这里插入图片描述

package com.zep.vo;public class QueryParam {private String paramName;private Integer paramAge;public String getParamName() {return paramName;}public void setParamName(String paramName) {this.paramName = paramName;}public Integer getParamAge() {return paramAge;}public void setParamAge(int paramAge) {this.paramAge = paramAge;}
}

接口方法:

 /*** 多个参数,使用java对象作为接口中方法的参数**/List<Student> selectMultiObject(QueryParam param);

mapper 文件:

<!--多个参数。使用java对象的属性值,作为参数的实际值适用对象的语法:#{属性名,javaType=类型名称,jdbcType=数据类型} 很少用javaType:指java中的属性数据类型jdbcType: 在数据库中的数据类型例如:#{paramName,javaType=java.lang.String,jdbcType=VARCHAR}select * from student where name=#{paramName,javaType=java.lang.String,jdbcType=VARCHAR}or age=#{paramAge,javaType=java.lang.Integer,jdbcType=INTEGER}我们使用的简化方式:#{对应接口的参数的类型,即参数对象的属性名},javaType,jdbcType的值mybatis反射能获取。不用提供--><select id="selectMultiObject" resultType="com.zep.domain.Student">select * from student where name=#{paramName}or age=#{paramAge}</select>

或者

  <select id="selectMultiObject" resultType="com.zep.domain.Student">select * from student where name=#{paramName,javaType=java.lang.String,jdbcType=VARCHAR}or age=#{paramAge,javaType=java.lang.Integer,jdbcType=INTEGER}
</select>

测试方法:

 @Testpublic void testSelectMultiObject() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);QueryParam queryParam = new QueryParam();queryParam.setParamName("张三");queryParam.setParamAge(28);List<Student> students = dao.selectMultiObject(queryParam);for (Student student : students) {System.out.println("学生=" + student);}sqlSession.close();}

在这里插入图片描述

1.6 多个参数-按位置

参数位置从 0 开始, 引用参数语法 #{ arg 位置 }, 第一个参数是#{arg0}, 第二个是#{arg1}

注意:mybatis-3.3 版本和之前的版本使用#{0},#{1}方式, 从 mybatis3.4 开始使用#{arg0}方式。

接口方法:

/*** 多个参数,简单类型的,按位置来传值* mybatis 3.4之前,使用#{0},#{1}* mybatis 3.4之后,使用#{arg0},#{arg1}*/List<Student> selectMultiPosition(String name,Integer age);
}

mapper 文件:

 <!--多个参数使用位置--><select id="selectMultiPosition" resultType="com.zep.domain.Student">select * from student where name=#{arg0}or age=#{arg1}</select>

测试方法:

@Testpublic void testSelectMultiPosition() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);List<Student> students = dao.selectMultiPosition("李四",20);for (Student stu : students) {System.out.println("学生=" + stu);}}

在这里插入图片描述

1.7 多个参数-使用 Map

Map 集合可以存储多个值,使用Map向 mapper 文件一次传入多个参数。Map 集合使用 String的 key,Object 类型的值存储参数。 mapper 文件使用# { key }引用参数值。

例如:Map<String,Object> data = new HashMap<String,Object>();
data.put(“myname”,”李力”);
data.put(“myage”,20);

接口方法:

    /*** 多个参数,使用Map存放多个值*/List<Student> selectMultiByMap(Map<String,Object> map);

mapper 文件:

 <!--多个参数,使用Map,使用的语法:#{map的key}--><select id="selectMultiByMap" resultType="com.zep.domain.Student">select * from student where name=#{myname}or age=#{myage}</select>
@Testpublic void testSelectMultiByMap() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);Map<String,Object> data = new HashMap<>();data.put("myname","张三");data.put("myage",20);List<Student> students = dao.selectMultiByMap(data);for (Student stu : students) {System.out.println("学生=" + stu);}}

在这里插入图片描述

1.8 #和$

#:占位符,告诉 mybatis 使用实际的参数值代替。并使用 PrepareStatement 对象执行 sql 语句, #{…}代替sql 语句的“?”。这样做更安全,更迅速,通常也是首选做法

mapper 文件

<select id="selectStudentById" resultType="com.zep.domain.Student">select id,name,email,age from student where id=#{studentId}
</select>

转为 MyBatis 的执行是:

String sql=” select id,name,email,age from student where id=?;
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,1005);

解释:
where id=? 就是 where id=#{studentId}
ps.setInt(1,1005) , 1005 会替换掉 #{studentId}
在这里插入图片描述

在这里插入图片描述

$ 字符串替换,告诉 mybatis 使用$包含的“字符串”替换所在位置使用 Statement 把 sql 语句和${}的内容连接起来。主要用在替换表名,列名,不同列排序等操作。
在这里插入图片描述

在这里插入图片描述

select id,name, email,age from student where id=#{studentId}

  # 的结果: select id,name, email,age from student where id=? select id,name, email,age from student where id=${studentId}$ 的结果:select id,name, email,age from student where id=1001String sql="select id,name, email,age from student where id=" + "1001";使用的Statement对象执行sql, 效率比PreparedStatement低。

$:可以替换表名或者列名, 你能确定数据是安全的。可以使用$
接口方法:

 List<Student> selectUse$Order(@Param("colName") String colName);

mapper文件:

 <!--$替换列名--><select id="selectUse$Order" resultType="com.zep.domain.Student">select * from student order by ${colName}</select>

测试文件:

    @Testpublic void testSelectUse$Order() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);List<Student> students = dao.selectUse$Order("name");for (Student student : students) {System.out.println("学生=" + student);}sqlSession.close();}

在这里插入图片描述
在这里插入图片描述

1.8.1 # 和 $区别

  1.  #使用 ?在sql语句中做站位的, 使用PreparedStatement执行sql,效率高2.  #能够避免sql注入,更安全。3.  $不使用占位符,是字符串连接方式,使用Statement对象执行sql,效率低4.  $有sql注入的风险,缺乏安全性。5.  $:可以替换表名或者列名

1.9 完整代码

StudentDao .java:

package com.zep.dao;import com.zep.domain.Student;
import com.zep.vo.QueryParam;
import org.apache.ibatis.annotations.Param;import java.util.List;
import java.util.Map;public interface StudentDao {/*** 一个简单类型的参数:*      简单类型:mybatis把java的基本数据类型和String都叫简单类型。* 在mapper文件获取简单类型的一个参数的值,使用 #{任意字符}* @param id* @return*/public Student selectStudentById(Integer id);/*** 多个参数:命名参数,在形参定义的前面加入@Param("自定义参数名称")*/public List<Student> selectMultiParam(@Param("myname") String name, @Param("myage") Integer age);/*** 多个参数,使用java对象作为接口中方法的参数**/List<Student> selectMultiObject(QueryParam param);List<Student> selectMultiStudent(Student student);/*** 多个参数,简单类型的,按位置来传值* mybatis 3.4之前,使用#{0},#{1}* mybatis 3.4之后,使用#{arg0},#{arg1}*/List<Student> selectMultiPosition(String name,Integer age);/*** 多个参数,使用Map存放多个值*/List<Student> selectMultiByMap(Map<String,Object> map);/****/List<Student> selectUse$(@Param("myname") String name);List<Student> selectUse$Order(@Param("colName") String colName);}

mapper文件(StudentDao.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">
<mapper namespace="com.zep.dao.StudentDao"><!--parameterType:dao接口中方法参数的数据类型。parameterType它的值是java的数据类型全限定名称或者是mybatis定义的别名例如:parameterType="java.lang.Integer"parameterType="int"注意:parameterType不是强制的,mybatis通过反射机制能够发现接口参数的数据类型,所以可以没有。一般我们也不写。使用#{}之后,mybatis执行sql使用的是jdbc中的PreparedStatement对象由mybatis执行下面的代码:1. mybatis创建Connection,PreparedStatement对象String = "select id,name,email,age from student where id=?";PreparedStatement pst = conn.preparedStatement(sql);pst.setInt(1,1001);2.执行sql封装为resultType="com.zep.domain.Student"这个对象ResultSet rs = pst.executeQuery();Student student = null;while(rs.next){//从数据库中取表的一行数据,存到一个java对象属性中student = new Student();student.setId(rs.getInt("id"));student.setName(rs.getString("name"));student.setEmail(rs.getString("email"));student.setAge(rs.getInt("age"));}return student; //赋给了dao方法调用的返回值--><select id="selectStudentById" resultType="com.zep.domain.Student" parameterType="java.lang.Integer">select id,name,email,age from student where id=#{studentId}</select><!--多个参数,使用@Param命名--><select id="selectMultiParam" resultType="com.zep.domain.Student">select * from student where name=#{myname} or age=#{myage}</select><!--多个参数。使用java对象的属性值,作为参数的实际值适用对象的语法:#{属性名,javaType=类型名称,jdbcType=数据类型} 很少用javaType:指java中的属性数据类型jdbcType: 在数据库中的数据类型例如:#{paramName,javaType=java.lang.String,jdbcType=VARCHAR}select * from student where name=#{paramName,javaType=java.lang.String,jdbcType=VARCHAR}or age=#{paramAge,javaType=java.lang.Integer,jdbcType=INTEGER}我们使用的简化方式:#{对应接口的参数的类型,即参数对象的属性名},javaType,jdbcType的值mybatis反射能获取。不用提供--><select id="selectMultiObject" resultType="com.zep.domain.Student">select * from student where name=#{paramName}or age=#{paramAge}</select><select id="selectMultiStudent" resultType="com.zep.domain.Student">select * from student where name=#{name}or age=#{age}</select><!--多个参数使用位置--><select id="selectMultiPosition" resultType="com.zep.domain.Student">select * from student where name=#{arg0}or age=#{arg1}</select><!--多个参数,使用Map,使用的语法:#{map的key}--><select id="selectMultiByMap" resultType="com.zep.domain.Student">select * from student where name=#{myname}or age=#{myage}</select><!--使用 ${} --><select id="selectUse$" resultType="com.zep.domain.Student">select * from student where name=${myname}</select><!--$替换列名--><select id="selectUse$Order" resultType="com.zep.domain.Student">select * from student order by ${colName}</select>
</mapper>

测试代码:

package com.zep;import com.zep.dao.StudentDao;
import com.zep.domain.Student;
import com.zep.utils.MybatisUtils;
import com.zep.vo.QueryParam;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.util.HashMap;
import java.util.List;
import java.util.Map;public class TestMybatis {@Testpublic void testSelectStudentById() {/*** 使用mybatis的动态代理机制,使用SqlSession.getMapper(dao接口)* getMapper能够获取dao接口对应的实现类对象。*/SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class); // 这句代码可以自动创建dao接口的实现类对象//调用dao的方法,执行数据库的操作Student student = dao.selectStudentById(1001);System.out.println("学生=" + student);}@Testpublic void testSelectMultiParam() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);List<Student> students = dao.selectMultiParam("李四", 20);for (Student student : students) {System.out.println("学生=" + student);}sqlSession.close();}@Testpublic void testSelectMultiObject() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);QueryParam queryParam = new QueryParam();queryParam.setParamName("张三");queryParam.setParamAge(28);List<Student> students = dao.selectMultiObject(queryParam);for (Student student : students) {System.out.println("学生=" + student);}sqlSession.close();}@Testpublic void testSelectMultiStudent(){SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);Student student = new Student();student.setAge(20);student.setName("张三");List<Student> students = dao.selectMultiStudent(student);for (Student stu : students) {System.out.println("学生=" + stu);}}@Testpublic void testSelectMultiPosition() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);List<Student> students = dao.selectMultiPosition("李四",20);for (Student stu : students) {System.out.println("学生=" + stu);}}@Testpublic void testSelectMultiByMap() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);Map<String,Object> data = new HashMap<>();data.put("myname","张三");data.put("myage",20);List<Student> students = dao.selectMultiByMap(data);for (Student stu : students) {System.out.println("学生=" + stu);}}@Testpublic void testSelectUse$() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);List<Student> students = dao.selectUse$("'李四'");for (Student student : students) {System.out.println("学生=" + student);}sqlSession.close();}@Testpublic void testSelectUse$Order() {SqlSession sqlSession = MybatisUtils.getSqlSession();StudentDao dao = sqlSession.getMapper(StudentDao.class);List<Student> students = dao.selectUse$Order("email");for (Student student : students) {System.out.println("学生=" + student);}sqlSession.close();}}

2.0 总结

在这里插入图片描述

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

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

相关文章

六、封装 MyBatis 输出结果resultType、resultMap 以及 数据库表中列名和返回对象属性名不一致的2种解决方案(详解)

1.1 resultType resultType: 执行 sql 得到 ResultSet 转换的类型&#xff0c;使用类型的完全限定名或别名。 注意&#xff1a;如果返回的是集合&#xff0c;那应该设置为集合包含的类型&#xff0c;而不是集合本身。resultType 和 resultMap&#xff0c;不能同时使用。 A、…

API 接口批量测试

ApiPost 创建接口 导入要测试的数据 测试结果 ApiFox 创建接口 导入接口 导入测试数据&#xff0c;可以直接编辑&#xff0c;粘贴进来 测试结果

LeetCode 2342. 数位和相等数对的最大和

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的数组 nums &#xff0c;数组中的元素都是 正 整数。请你选出两个下标 i 和 j&#xff08;i ! j&#xff09;&#xff0c;且 nums[i] 的数位和 与 nums[j] 的数位和相等。 请你找出所有满足条件的下标 i 和 j &#xff…

软件项目管理-构建之法-四周总结

写在前面 课程名&#xff1a;软件项目管理 授课人&#xff1a;东北师范大学 杨贵福&#xff08; http://www.cnblogs.com/younggift/&#xff09; 教材&#xff1a;《构建之法 - 现代软件工程》 作者&#xff1a;邹欣老师 &#xff08;博客&#xff1a;http://www.cnblogs.com…

一、Vue基础语法学习笔记系列——插值操作(Mustache语法、v-once、v-html、v-text、v-pre、v-cloak)、绑定属性v-bind(绑定class、style)、计算属性

一、插值操作 1. Mustache 如何将data中的文本数据&#xff0c;插入到HTML中呢&#xff1f; 我们已经学习过了&#xff0c;可以通过Mustache语法(也就是双大括号)。 Mustache: 胡子/胡须. 我们可以像下面这样来使用&#xff0c;并且数据是响应式的 2. v-once 但是&#xff0…

LeetCode 2348. 全 0 子数组的数目

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;返回全部为 0 的 子数组 数目。 子数组 是一个数组中一段连续非空元素组成的序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,0,0,2,0,0,4] 输出&#xff1a;6 解释&#xff1a; 子数组 [0] 出现了…

二、Vue基础语法学习笔记——事件监听v-on、条件判断(v-if、v-else-if、v-else、v-show)、循环遍历(v-for遍历数组对象,key属性、检测数组更新)、图书案例、双向绑定

四、事件监听 在前端开发中&#xff0c;我们需要经常和用于交互。 这个时候&#xff0c;我们就必须监听用户发生的时间&#xff0c;比如点击、拖拽、键盘事件等等 在Vue中如何监听事件呢&#xff1f;使用v-on指令 v-on介绍 作用&#xff1a;绑定事件监听器 缩写&#xff1a; 预…

LeetCode 2352. 相等行列对

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid &#xff0c;返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和列以相同的顺序包含相同的元素&#xff08;即相等的数组&#xff09;&#xff0c;则认为二者是相等的。 示…

三、Vue组件化开发学习笔记——组件化的基本步骤、全局组件和局部组件、父组件和子组件、注册组件的语法糖、模板分离写法、组件的数据存放

一、什么是组件化&#xff1f; 人面对复杂问题的处理方式&#xff1a; 任何一个人处理信息的逻辑能力都是有限的 所以&#xff0c;当面对一个非常复杂的问题时&#xff0c;我们不太可能一次性搞定一大堆的内容。 但是&#xff0c;我们人有一种天生的能力&#xff0c;就是将问题…

LeetCode 2353. 设计食物评分系统(sortedcontainers)

文章目录1. 题目2. 解题1. 题目 设计一个支持下述操作的食物评分系统&#xff1a; 修改 系统中列出的某种食物的评分。返回系统中某一类烹饪方式下评分最高的食物。 实现 FoodRatings 类&#xff1a; FoodRatings(String[] foods, String[] cuisines, int[] ratings) 初始化…

四、Vue组件化开发学习笔记——父子组件通信,父级向子级传值(props),子级向父级传值(自定义事件),slot插槽

一、父子组件的通信 在上一篇博文中&#xff0c;我们提到了子组件是不能引用父组件或者Vue实例的数据的。 但是&#xff0c;在开发中&#xff0c;往往一些数据确实需要从上层传递到下层&#xff1a; 比如在一个页面中&#xff0c;我们从服务器请求到了很多的数据。其中一部分数…

LeetCode 2336. 无限集中的最小数字(SortedSet)

文章目录1. 题目2. 解题1. 题目 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, …] 。 实现 SmallestInfiniteSet 类&#xff1a; SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。int popSmallest() 移除 并返回该无限集中的最小整数。void ad…

C# - 类_使用新成员隐藏基类成员

1 using System;2 3 namespace 类_使用新成员隐藏基类成员4 {5 // 基类 : Animal6 public class Animal7 {8 // 基类的普通方法Eat(), 并未用Virtual修饰9 public void Eat() 10 { 11 Console.WriteLine("动物吃的方法: …

五、Vue模块化开发学习笔记——JavaScript原始功能、匿名函数的解决方案、使用模块作为出口、CommonJS、ES6 export和import的使用

一、JavaScript原始功能 -在网页开发的早期&#xff0c;js制作作为一种脚本语言&#xff0c;做一些简单的表单验证或动画实现等&#xff0c;那个时候代码还是很少的。 那个时候的代码是怎么写的呢&#xff1f; 直接将代码写在<script>标签中即可 随着ajax异步请求的出现&…

LeetCode 2333. 最小差值平方和(贪心)

文章目录1. 题目2. 解题1. 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;长度为 n 。 数组 nums1 和 nums2 的 差值平方和 定义为所有满足 0 < i < n 的 (nums1[i] - nums2[i])^2 之和。 同时给你两个正整数 k1 和 k2 。你可以将 nums1 中的任意…

[na][tools]快速ping网段工具-QuickPing

一款神器 quickping 能够很快的探测出该网断分出去哪些地址. 在线的会显示绿色 在线的有主机名的显示为亮绿色 转载于:https://www.cnblogs.com/iiiiher/p/5362403.html

六、Webpack详解学习笔记——webpack的安装、起步、配置、loader的使用、webpack中配置Vue、plugin的使用、搭建本地服务器、webpack配置的分离

一、认识webpack 什么是webpack&#xff1f; 这个webpack还真不是一两句话可以说清楚的。我们先看看官方的解释&#xff1a; At its core, webpack is a static module bundler for modern JavaScript applications.从本质上来讲&#xff0c;webpack是一个现代的JavaScript应用…

LeetCode 2349. 设计数字容器系统(SortedSet)

文章目录1. 题目2. 解题1. 题目 设计一个数字容器系统&#xff0c;可以实现以下功能&#xff1a; 在系统中给定下标处 插入 或者 替换 一个数字。 返回 系统中 给定数字 的最小下标。 请你实现一个 NumberContainers 类&#xff1a; NumberContainers() 初始化数字容器系统…

七、Vue cli详解学习笔记——什么是Vue cli ,Vue cli的使用(安装,拉取2.x模板,初始化项目),Vue cli2详解,Runtime-Compiler和Runtime-only区别

一、什么是Vue CLI 如果你只是简单写几个Vue的Demo程序, 那么你不需要Vue CLI. 如果你在开发大型项目, 那么你需要, 并且必然需要使用Vue CLI 使用Vue.js开发大型应用时&#xff0c;我们需要考虑代码目录结构、项目结构和部署、热加载、代码单元测试等事情。如果每个项目都要手…

我们

我们的 转载于:https://www.cnblogs.com/xxzhou/p/5364606.html