JDBC
. JDBC就是使用Java语言操作关系型数据库的一套API
步骤
JDBC API详解
DriverManager
1.注册驱动
2.获取连接
static Connection
getconnection (string url,string user,string password)
参数
-
url:连接路径
语法: jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对
2示例: jdbc:mysql://127.0.0.1:3306/db1
细节:
如果连接的是本机mysql服务器,并且mysqlI服务默认端口是3306,则uri可以简写为: jdbc:mysql.//数据库名称?参数键值对
·配置useSSL=false参数,禁用安全连接方式,解决警告提示 -
user:用户名
-
password:密码
//2.获取连接:如果连接的是本机mysql并且端口是默认的3306可以简化书写
String url = "jdbc:mysql:///db1?useSSL=false";
Connection
- 获取执行SQL的对象
·普通执行SQL对象Statement createStatement()
·预编译SQL的执行SQL对象:防止SQL注入PreparedStatement prepareStaltement (sql)
·执行存储过程的对象CallableStatement prepareCall (sql)
- _事务管理
MySQL事务管理
开启事务:BEGIN; /STARTTRANSACTION;
提交事务: COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交事务
. JDBC事务管理:Connection接口中定义了3个对应的方法
- 开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务;false为手动提交事务,即为开启事务
- 提交事务: commit()
- 回滚事务:rollback()
举例
try{
conn.setAutocommit(false);
conn.commit();
}catch (Exception throwables) {
//回滚事务
conn.rollback();
throwables.printStackTrace();
}
Statement
.Statement作用:
1.执行SQL语句
·执行SQL语句
int executeUpdate(sql):执行DML、DDL语句
返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句
返回值: ResultSet结果集对象
ResultSet
. ResultSet(结果集对象)作用:
1.封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
·获取查询结果
boolean next(): (1)将光标从当前位置向前移动一行(2)判断当前行是否为有效行
返回值:
true:有效行,当前行有数据.
false:无效行,当前行没有数据
xxxgetXxx(参数):获取数据
XXX:数据类型;如: int getInt(参数); String getString(参数)参数:
.int:列的编号,从1开始
. String:列的名称
PreparedStatement
. PreparedStatement作用:
1.预编译SQL语句并执行:预防SQL注入问题
. SQL注入
.SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
- 获取PreparedStatement 对象
//SQL语句中的参数值,使用?占位符替代
String sql = “select * from user where username = ? and password = ?”;
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
- 设置参数值
PreparedStatement对象: setXxx(参数1,参数2):给﹖赋值
Xxx:数据类型;如setlnt(参数1,参数2)
参数:
参数1:?的位置编号,从1开始
参数2:? 的值
- 执行SQL
executeUpdate(); / executeQuery();:不需要再传递sql
//定义sql
String sql = "select * from tb_user where username = ? and password = ?";
//获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//设置?的值
pstmt.setString( parameterIndex: 1, name);
pstmt.setString( parameterIndex: 2, pwd);
//执行squl
Resultset rs= pstmt.executeQuery();
数据库连接池
数据库连接池简介
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
- 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
- 好处:
- ·资源重用
- ·提升系统响应速度·避免数据库连接遗漏
打印当前的路径System.out.println(System.getProperty(“user.dir”));
Driud使用步骤
- 导入jar包, druid-1.1.12.jar
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接
第三天
Maven
. Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
提供了一套标准化的项目结构
提供了一套标准化的构建流程(编译,测试,打包,发布…….)
提供了一套依赖管理机制
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:
如果有,则在项目直接引用;
如果没有,则去中央仓库中下载对应的jar包到本地仓库。
Maven生命周期
Maven构建项目生命周期描述的是一次构建过程经历经历了多少个事件Maven对项目构建的生命周期划分为3套
clean:清理工作
default:核心工作,例如编译,测试,打包,安装等>site:产生报告,发布站点等
MyBatis
什么是MyBatis?
MyBatis是一款优秀的持久层框架,用于简化JDBC开发
MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache softwarefoundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github官网: https://mybatis.org/mybatis-3/zh/index.html
持久层
负责将数据到保存到数据库的那一层代码JavaEE三层架构:
表现层、业务层、持久层
框架
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
心
在框架的基础之上构建软件编写更加高效、规范、通用、
可扩展
查询user表中所有数据
- 创建user表,添加数据
- 创建模块,导入坐标
- 编写MyBatis核心配置文件–>替换连接信息解决硬编码问题
- 编写SQL映射文件–>统一管理sql语句,解决硬编码问题
- 编码
-
- 定义POJO类
-
- 加载核心配置文件,获取 SqlSessionFactory 对象
-
- 获取SqISession对象,执行SQL语句
-
- 释放资源
48集重要,以后不会就回看,创建mybatis
6.28第四天
使用Mapper代理方式完成入门案例
1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值
类型一致
4.编码
- 1.通过SqlSession的getMapper方法获取Mapper接口的代理对象
- 2.调用对应方法完成sql的执行
细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载
数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据
起别名:对不一样的列名起别名,让别名和实体类的属性名一样
缺点:每次查询都要定义一次别名
sql片段
缺点:不灵活
resultMap:
1.定义<resultMap>
标签
2.在<select>
标签中,使用resultMap属性替换resultType属性
*参数占位符:
1.#{∶会将其替换为?,为了防止SQL注入
2.$:拼sql。会存在SQL注入问题I
2.parameterType:
用于设置参数类型,该参数可以省略
3.SQL语句中特殊字符处理:
- 转义字符
- <![CDATA[内容]]>
查询:@Select添加:@Insert修改:@Update删除:@Delete
c注解完成简单功能配置文件完成复杂功能
Web
JavaWeb技术栈
B/S架构: Browser/Server,浏览器/服务器架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可
静态资源:HTML、CSS、JavaScript、图片等。负责页面展现
动态资源: Servlet、JSP等。负责逻辑处理
数据库:负责存储数据
HTTP协议:定义通信规则
Web服务器:负责解析HTTP协议,解析请求数据,并发送响应数据
1.基于TCP协议:面向连接,安全
2.基于请求-响应模型的:一次请求对应一次响应
3. HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
·缺点:多次请求间不能共享数据。
优点:速度快
HTTP-请求数据格式
请求数据分为3部分:
- 请求行:请求数据的第一行。其中GET表示请求方式,
sp。
表示请求资源路径,HTTP/1.1表示协议版本 - 请求头:第二行开始,格式为key: value形式。
- 请求体:POST请求的最后一部分,存放请求参数
GET请求和POST请求区别:
1.GET请求请求参数在请求行中,没有请求体。
POST请求请求参数在请求体中
2.GET请求请求参数大小有限制,POST没有
HTTP-响应数据格式
响应数据分为3部分:
1.响应行:响应数据的第一行。其中HTTP/1.1表示协议版
本,200表示响应状态码,OK表示状态码描述
2.响应头:第二行开始,格式为key: value形式3.响应体:最后一部分。存放响应数据
常见的HTTP响应头:
Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;
Content-Length:表示该响应内容的长度(字节数);
Content-Encoding:表示该响应压缩算法,例如gzip;
Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒
6.29第五天
91集详细讲解了如何创建Mave Web项目
-Servlet执行流程&生命周期
- Servlet由谁创建? servlet方法由谁调用?
Servlet由web服务器创建,Servlet方法由web服务器调用。
- 服务器怎么知道servlet中一定有service方法?
因为我们自定义的Servlet,必须实现servlet接口并复写其
方法,而servlet接口中有service方法
Servlet运行在servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
- 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建servlet对象
- 初始化:在servlet实例化之后,容器将调用servlet的init()方法初始化这个对象,完成一些如
加载配置文件、创建连接等初始化的工作。该方法只调用一次 - 请求处理:每次请求Servlet时,Servlet容器都会调用servlet的service()方法对请求进行处理。
- 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成
资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
第六天,6.30
Servlet urlPattern配置
Servlet要想被访问,必须配置其访问路径(urlPattern)
1.一个Servlet,可以配置多个urlPattern
@WebServlet(urlPatterns = { "/demo1", " /demo2"})
2.urlPattern配置规则
- 精确匹配
- ②目录匹配
- ③扩展名匹配
- ④任意匹配
/和/*区别:
当我们的项目中的Servlet配置了“/”,会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet
当我们的项目中配置了“/*”,意味着匹配任意访问路径
Request
Request 获取请求数据
请求数据分为3部分:
1.请求行:
GET /request-demo/req1?username=zhangsan HTTP/1.1
. String getMethod():获取请求方式:GET
. String getContextPath():获取虚拟目录(项目访问路径): /request-demo
. StringBuffer getRequestURL():获取URL(统一资源定位符):
http:;//localhost:8080/request-demo/req1
. String getRequestURI():获取URI(统一资源标识符): /request-demo/req1
. Strina qetQueryString():获取请求参数(GET方式): username=zhangsan&password=123
2.请求头:
User-Agent: Mozilla/5.0 Chrome/91.0.4472.106
. String getHeader(String name):根据请求头名称,获取值
3.请求体:
username=superbaby&password=123
. ServletInputStream getlnputStream():获取字节输入流.BufferedReader getReader():获取字符输入流
Request 通用方式获取请求参数
. Map<String,String[ ]> getParameterMap():获取所有参数Map集合
. String[ ] getParameterValues(String name):根据名称获取参数值(数组)
. String getParameter(String name):根据名称获取参数值(单个值)
请求参数中文乱码
//1.解决乱码:POST. getReader ()
request.setcharacterEncoding(“UTF-8”);/设置字符输入流的编码
//2.获取username
String username = request.getParameter( name: “username” );system.out.println(username);
//3.转换为字节数据,编码
byte[ ] bytes = decode.getBytes( charsetName: “ISO-8859-1”);for (byte b : bytes) {
system.out.print(b + " ");}*/
//4.将字节数组转为字符串,解码
string s = new string(bytes,charsetName: “utf-8”);
system.out.println(s);
//3. GET,获取参数的方式: getQuerystring
乱码原因: tomcat进行URL解码,默认的字符集IS0-8859-1
通用:
//3.1先对乱码数据进行编码:转为字节数组
byte[] bytes = username.getBytes(StandardCharsets.IS0_8859_1);
//3.2字节数组解码
username = new string(bytes,standardCharsets.UTF_8);
system.out.println(“解决乱码后:”+username);
请求转发
请求转发(forward):一种在服务器内部的资源跳转方式
实现方式:
req.getRequestDispatcher(“资源B路径”).forward(req,resp);请求转发资源间共享数据:使用Request对象
void setAttribute(String name, Object o):存储数据到request域中
心
Object getAttribute(String name):根据key,获取值
void removeAttribute(String name):根据key,删除该键值对
URL (Uniform Resource Locator)
是一个用于唯一标识和定位网络资源的地址。它是一个字符串形式的网址,用于在互联网上定位到特定的资源。URL由多个部分组成,包括协议、主机名、端口、路径和查询参数等。
URL的格式通常如下:
protocol://hostname[:port]/path?query
- 协议(protocol):用于指定访问资源的协议,例如 HTTP、HTTPS、FTP等。
- 主机名(hostname):用于标识互联网上的具体主机,可以是一个域名或者IP地址。
- 端口(port):可选项,用于指定与主机通信的端口,默认的端口号会随协议而变化。
- 路径(path):用于指定资源在主机上的位置,通常是一个文件或者目录的路径。
- 查询参数(query):可选项,用于传递额外的参数,格式为key=value,多个参数用“&”分隔。
例如,URL “https://www.example.com:8080/products?category=electronics” :
- 协议是 HTTPS
- 主机名是 www.example.com
- 端口是 8080
- 路径是 /products
- 查询参数是 category=electronics
Response设置响应数据功能介绍
响应数据分为3部分:
1.响应行:HTTP/1.1200 OK
void setStatus(int sc):设置响应状态码
2.响应头:
Content-Type: text/html
void setHeader(String name, String value):设置响应头键值对
3.响应体:
<html><head>head><body></body></html>
PrintWriter getWriter():获取字符输出流
ServletOutputStream getOutputStream():获取字节输出流
重定向
1.设置响应状态码302response.setstatus(302);
2.设置响应头 Location
response.setHeader( “Location” , " /request-demo/resp2" ) ;
/简化方式完成重定向
response.sendRedirect( location: “/request-demo/resp2”);
重定向特点:
浏览器地址栏路径发生变化
可以重定向到任意位置的资源(服务器内部、外部均可)两次请求,不能在多个资源使用request共享数据
7.1
Response响应字符数据
- 使用:
1.通过Response对象获取字符输出流
PrintWriter writer = resp.getWriter();
2.写数据
writer.write(“aaa”);
注意:
·该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭
·中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1
resp.setContentType("text/html;charset=utf-8");
JSP
JSP快速入门
1.导入JSP坐标
2.创建JSP文件
3.编写HTML标签和Java代码
JSP原理
概念: Java Server Pages,Java服务端页面
JSP = HTML + Java,用于简化开发的
JSP本质上就是一个 Servlet
JSP脚本用于在JSP页面内定义Java代码JSP脚本分类:
<%…%>:内容会直接放到_jspService()方法之中
<%=…%>:内容会放到out.print()中,作为out.print()的参数
<%!.…%>:内容会放到_jspService()方法之外,被类直接包含
JSP缺点
由于JSP页面内,既可以定义HTML标签,又可以定义Java代码,造成了以下问题:
1.书写麻烦:特别是复杂的页面
2阅读麻烦
3.复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE…
4.占内存和磁盘:JSP会自动生成java和.class文件占磁盘
运行的是.class文件占内存
5.调试困难:出错后,需要找到自动生成的.java文件进行调试
6.不利于团队协作:前端人员不会Java,后端人员不精HTML7…
7.2
EL表达式
Expression Language表达式语言,用于简化JSP页面内的Java代码
主要功能:获取数据
语法:
${expression}${brands}︰获取域中存储的key为brands的数据
JavaWeb中的四大域对象:
- page:当前页面有效
- request:当前请求有效
- session:当前会话有效
- application:当前应用有效
el表达式获取数据,会依次从这4个域中寻找,直到找到为止
JSTL 快速入门
1.导入坐标
<dependency>
<groupld>jstl</groupld>
<artifactld>jstl</artifactld>
<version>1.2</version>
</dependency>
<dependency>
<groupld>taglibs</groupld>
<artifactld>standard</artifactld>
<version>1.1.2</version>
</dependency>
2.在JSP页面上引入JSTL标签库
<%@taglib prefix="c" uri="http://java.sun.com/jspljstl/core"%>
3.使用
<c:if>
<c:forEach>:相当于for循环
items:被遍历的容器
var:遍历产生的临时变量
MVC模式
MVC是一种分层开发的模式,其中:
M: Model,业务模型,处理业务
V: View,视图,界面展示
C: Controller,控制器,处理请求,调用模型和视图
- 数据访问层:对数据库的CRUD基本操作
- 业务逻辑层:对业务逻辑进行封装,组合数据访问层层中基本功能,形成复杂的业
务逻辑功能 - 表现层:接收请求,封装数据,调用业务逻辑层,响应数据
准备环境118
创建新的模块 brand_demo,引入坐标
创建三层架构的包结构
数据库表tb_brand
实体类 Brand
MyBatis 基础环境
.Mybatis-config
. xmlBrandMapper. xml.
Br andMapper接口
<resultMap>
是写在xml文件里面吗
如何配合注解使用
是的,<resultMap>标签是写在MyBatis的映射文件(通常是以.xml为扩展名的文件)中的。
要配合注解使用<resultMap>标签,可以在注解中引用映射文件中定义的<resultMap>标签。
首先,在映射文件中定义<resultMap>标签:
```xml
<!-- mybatis-mapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="userResultMap" type="com.example.model.User">
<id property="id" column="user_id" />
<result property="username" column="username" />
<result property="email" column="email" />
<result property="phone" column="phone" />
<result property="address" column="address" />
</resultMap>
<!-- 其他的SQL语句和映射规则 -->
</mapper>
然后,在注解中使用@ResultMap注解引用上述的<resultMap>
标签:
// UserMapper.java
@Select("SELECT * FROM users")
@ResultMap("com.example.mapper.UserMapper.userResultMap")
List<User> getUsers();
在这个例子中,@ResultMap注解引用了映射文件中id为"userResultMap"的<resultMap>
标签。它告诉MyBatis使用这个结果映射来将查询结果映射到User对象上。
通过这种方式,可以将注解和映射文件中定义的<resultMap>
标签结合起来使用,以获取更灵活的映射配置方式。
7.3
会话跟踪技术
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据
HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享
实现方式:
1.客户端会话跟踪技术:Cookie
2.服务端会话跟踪技术: Session
–Cookie基本使用
创建
1. 创建Cookie对象,设置数据
Coqkie cookie = new Cookie("key" ,"value");
2.发送Cookie到客户端:使用response对象
response.addCookie(cookie);
获取
3.获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();
4.遍历数组,获取每一个Cookie对象: for5.使用Cookie对象方法获取数据
cookie.getName();
cookie.getValue();
Cookie的实现是基于HTTP协议的
响应头: set-cookie
请求头: cookie
Cookie存活时间
默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
setMaxAge(int seconds):设置Cookie存活时间
1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
2负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
3.零:删除对应Cookie
使用:
Session
1.获取Session对象
HttpSession session = request.getSession();2. Session对象功能:
void setAttribute(String name, Object o):存储数据到session域中Object getAttribute(String name):根据key,获取值
void gemoveAttribute(String name):根据key,删除该键值对
Session钝化、活化:
服务器重启后,Session中的数据是否还在?
钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
活化:再次启动服务器后,从文件中加载数据到Session中
小结
Cookie和Session都是来完成一次会话内多次请求间数据共享的区别:
存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
安全性:Cookie 不安全,Session安全
数据大小: Cookie 最大3KB,Session无大小限制·
存储时间:Cookie可以长期存储,Session默认30分钟
服务器性能:Cookie不占服务器资源,Session占用服务器资源
7.5
Filter
概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,
比如:权限控制、统一编码处理、敏感字符处理等
7.6
Listener
概念: Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
监听器可以监听就是在application,session,tequest
三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件
Listener分类: JavaWeb中提供了8个监听器
AJAX
概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XMLAJAX作用:
1. 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据
使用了AJAX和服务器进行通信,就可以使用HTML+AJAX来替换JSP页面了
2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术
如∶搜索联想、用户名是否可用校验,等等.
1.编写AjaxServlet,并使用response输出字符串
2.创建XMLHttpRequest对象:用于和服务器交换数据
var xmlhttp;
if (window.XMLHttpRequest){
// code for lE7+, Firefox, Chrome, Opera, Safarixmlhttp = new XMLHttpRequest();
}else {
//code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
3.向服务器发送请求
xmlhttp.open("GET","url");
xmlhttp.send();//发送请求
4.获取服务器响应数据
xmlhttp.onreadystatechange = function (){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
alert(xmlhttp.responseText);
}
}
JSON
概念: JavaScript Object Notation。JavaScript 对象表示法
由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输
JSON 数据和Java对象转换
Fastjson是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。
使用:
1.导入坐标
<dependency>
<groupld>com.alibaba</groupld>
<artifactld>fastjson</artifactld>
<version>1.2.62</version>
<ldependency>
2.Java对象转JSON
String jsonStr = JSON.toJSONString(obj);
3.JSON字符串转Java对象
User user = JSON.parseObject(jsonStr, User.class);
Vue
Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写
基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上
官网: https://cn.vuejs.org
Vue常用指令
v-bind
为HTML标签绑定属性值,如设置href , css样式等
v-model
在表单元素上创建双向数据绑定
vue生命周期
Element快速入门
1.引入Element的css、js文件和Vue.js
<script src="vue.js"></script>
<script src="element-ui/lib/index.js"></script>
<link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">
2.创建Vue核心对象
<script>
new Vue({
el:"#app"})
</script>
3.官网复制Element组件代码