1、新建
2、选择版本依赖
3、maven配置
4、yml文件配置
# YML文件的语法 # 1.数据结构 key-value结构 # 2.写法: key:(空格)value # 3.层级代码结构,注意缩进 !!!!! # 4.字符集 文件读取时,默认采用UTF-8编码 可以写中文 # 规则: 命名时最好指定前缀. server: port: 8080 mysql: username: root password: root
5、动态为属性赋值,JDBCController
@RestController
public class JDBCController {
//${key} Spring提供的springel表达式 简称为:spel表达式
//语法: 从spring容器内部获取key,动态为属性赋值.
@Value("${mysql.username}")
String username; // = "root|";
@Value("${mysql.password}")
String password; // = "root";
@RequestMapping("/getMsg")
public String getMsg(){
return "你好数据库:"+ username +password;
}
}
6、访问:http://localhost:8080/getMsg,页面显示
7、利用properties文件为属性赋值,mysql.properties
#默认ISO-8859-1 中文必定乱码 mysql.username2=mysql数据库 mysql.password2=你猜猜
8、通过注解为属性赋值,可以指定字符集
@RestController
@PropertySource(value="classpath:/mysql.properties", encoding = "UTF-8")
public class JDBCController {
//${key} Spring提供的springel表达式 简称为:spel表达式
//语法: 从spring容器内部获取key,动态为属性赋值.
@Value("${mysql.username}")
String username; // = "root|";
@Value("${mysql.password}")
String password; // = "root";
@RequestMapping("/getMsg")
public String getMsg(){
return "你好数据库:"+ username +password;
}
@Value("${mysql.username2}")
private String username2;
@Value("${mysql.password2}")
private String password2;
@RequestMapping("/getMsg2")
public String getMsg2(){
return "你好数据库:"+ username2 +password2;
}
}
9、访问:http://localhost:8080/getMsg2,显示
10、springboot高级用法,创建springboot项目
模板,maven
11、编辑pom.xml
4.0.0 com.jt springboot_demo21.0-SNAPSHOT 1.8 UTF-8 UTF-8 2.4.1 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin3.8.1 1.8 1.8 UTF-8 org.springframework.boot spring-boot-maven-plugin2.4.1 com.jt.SpringbootDemo1Application repackage repackage
12、yml配置文件
开发 dev: 8080端口 生产 prod: 9000端口
#指定环境的默认配置
spring:
profiles:
active: dev
---
#为环境定义名称
server:
port: 8080
spring:
config:
activate:
on-profile: dev
# 采用---的方式实现环境分割
---
server:
port: 9000
spring:
config:
activate:
on-profile: prod
13、热部署
在开发阶段,需要频繁的修改配置文件/代码
需求:要求将代码保存之后,程序自动的编译,并且完成tomcat服务的重启
个别IDEA版本可能不生效
org.springframework.boot
spring-boot-devtools
14、创建pojo
public class DemoUser implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
}
15、lombok
lombok可以为POJO实体对象,动态的生成get/set/toString/hashcode/equals等方法,无需程序员手动编辑
org.projectlombok
lombok
16、采用注解
@Data //动态生成get/set/toString/equals等方法
@Accessors(chain = true) //开启链式加载 重写set方法
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
public class DemoUser implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
//方法测试
public void add(){
DemoUser user = new DemoUser();
user.setId(100).setName("aaaa").setAge(18).setSex("女");
}
}
17、Mybatis
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.0
mysql
mysql-connector-java
18、POJO对象
@Data //动态生成get/set/toString/equals等方法
@Accessors(chain = true) //开启链式加载 重写set方法
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
public class DemoUser implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
}
19、编辑mybatis-config.xml文件
20、构建mapper接口
public interface DemoUserMapper {
//1.查询所有的表数据
public List findAll();
}
21、xml配置文件
select id,name,age,sex from demo_user
22、mybatis实现数据库查询
@Test
public void demo1() throws IOException {
//指定配置文件地址
String resource = "mybatis-config.xml";
//通过IO流 加载指定的配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//动态生成SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSession 类比 数据库链接
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取Mapper接口
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
//获取数据
List userList = demoUserMapper.findAll();
System.out.println(userList);
//关闭链接
sqlSession.close();
}
23、查询结果
24、根据ID查询数据
DemoUser findOne(int id);
25、xml映射文件
26、测试
@Test
public void testFindOne() throws IOException {
//指定配置文件地址
String resource = "mybatis-config.xml";
//通过IO流 加载指定的配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//动态生成SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取接口
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
int id = 1;
DemoUser demoUser = demoUserMapper.findOne(id);
System.out.println(demoUser);
//关闭链接
sqlSession.close();
}
27、结果
28、@BeforeEach
该注解的作用是在执行@Test方法前调用,是测试方法提供的测试API
public class TestMybatis2 {
//定义公共的属性
private SqlSessionFactory sqlSessionFactory;
@BeforeEach
public void init() throws IOException {
//1.指定资源文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testMybatis01(){
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
List list = demoUserMapper.findAll();
System.out.println(list);
sqlSession.close();
}
}
29、结果:
30、根据名称查询
@Test
public void testFindByName(){
//保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
String name = "王昭君";
//如果不能保证结果唯一,则使用List集合接收数据.
List list = demoUserMapper.findByName(name);
System.out.println(list);
sqlSession.close();
}
31、xml映射文件
32、编辑接口
ListfindByName(String name);
33、结果
34、mybatis中参数封装
@Test
public void testFindBySA(){
//保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
//编程习惯: 面向对象
DemoUser user = new DemoUser();
user.setAge(18).setSex("女");
List list = demoUserMapper.findBySA(user);
System.out.println(list);
sqlSession.close();
}
35、接口
ListfindBySA(DemoUser user);
36、xml
37、结果
38、参数封装的3种常见情景
@Test
public void testFindBySA(){
//保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
//编程习惯: 面向对象
DemoUser user = new DemoUser();
user.setAge(18).setSex("女");
List list = demoUserMapper.findBySA(user);
System.out.println(list);
sqlSession.close();
}
@Test
public void testFindBySA2(){
//保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
String sex = "女";
int age = 18;
List list = demoUserMapper.findBySA2(sex,age);
System.out.println(list);
sqlSession.close();
}
@Test
public void testFindBySA3(){
//保证每个线程都能获取一个链接
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
Map map = new HashMap<>();
map.put("sex","女");
map.put("age",18);
List list = demoUserMapper.findBySA3(map);
System.out.println(list);
sqlSession.close();
}
39、xml
40、接口
ListfindBySA(DemoUser user); List findBySA2(@Param("sex") String sex, @Param("age") Integer age); List findBySA3(Map map);
41、Mybatis常规CURD操作,新增操作
@Test
public void testSaveUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
//数据库主键自增,所以对象的ID可以为null.
DemoUser user = new DemoUser(null,"佛媛",99,"女");
int rows = demoUserMapper.saveUser(user);
if(rows > 0){
System.out.println("影响的行数:"+rows);
//事务提交
sqlSession.commit();
}
sqlSession.close();
}
42、接口
int saveUser(DemoUser user);
43、xml
insert into demo_user value (null,#{name},#{age},#{sex})
44、结果
45、查看数据库
46、Mybatis中的转义标签
xml文件中的转义字符.
> > 大于
< < 小于
& & 号
说明:如果sql中有大量的转义字符 建议使用转义标签体
语法:
47、查询age> 18 and age< 100 的用户信息
@Test
public void testSelect01(){
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
Map map = new HashMap<>();
map.put("minAge",18);
map.put("maxAge",100);
List userList = demoUserMapper.findByAge(map);
System.out.println(userList);
sqlSession.close();
}
48、接口
ListfindByAge(Map map);
49、xml
#{minAge} and age < #{maxAge}]]>
50、结果
51、Mybatis集合用法,批量删除
@Test
public void testDeleteIds(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
//将数据封装为数组
int[] ids = {232,233,234};
demoUserMapper.deleteIds(ids);
System.out.println("删除操作成功!!!");
}
52、接口
void deleteIds(int[] ids);
53、xml
delete from demo_user where id in (
#{id}
)
54、Mybatis集合用法,练习list/map的用法
@Test
public void testDeleteList(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
List list = new ArrayList();
list.add(232);
list.add(233);
list.add(234);
demoUserMapper.deleteList(list);
System.out.println("删除操作成功!!!");
}
@Test
public void testDeleteMap(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
List list = new ArrayList();
list.add(232);
list.add(233);
list.add(234);
HashMap map = new HashMap();
map.put("ids",list);
demoUserMapper.deleteMap(map);
System.out.println("删除操作成功!!!");
}
55、接口
void deleteList(List list);
void deleteMap(HashMap map);
56、xml
delete from demo_user where id in (
#{id}
)
delete from demo_user where id in (
#{id}
)
57、模糊查询
@Test
public void findLike(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
//String name = "精";
String name = "%精%";
List list = demoUserMapper.findLike(name);
System.out.println(list);
sqlSession.close();
}
58、xml
select * from demo_user where name like #{name} order by age desc
59、接口
ListfindLike(String name);
60、结果
61、批量更新操作
@Test
public void updateUser(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
Map map = new HashMap<>();
String[] array = {"小乔","大乔","王昭君"};
map.put("names",array);
map.put("age",18);
map.put("sex","女");
demoUserMapper.updateUser(map);
sqlSession.close();
}
62、xml
update demo_user set age = #{age}, sex = #{sex}
where name in (
#{name}
)
63、接口
void updateUser(Mapmap);
64、显示
65、Mybatis简化,别名包,核心配置文件
66、以后可以使用别名,代替类型的全路径
select id,name,age,sex from demo_user
67、使用别名包,如果有多个pojo
68、xml
select id,name,age,sex from demo_user
69、别名的注解定义
@Data //动态生成get/set/toString/equals等方法
@Accessors(chain = true) //开启链式加载 重写set方法
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
@Alias("DemoUser")
public class DemoUser implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
}
70、Mybatis简化,sql标签
sql重复,可以使用sql标签
1. select id,name,age,sex from demo_user where id = 1 2. select id,name,age,sex from demo_user where name = xxx
71、用法
select id,name,age,sex from demo_user
72、sql标签的说明
优势: 1.使用Sql标签可以节省xml的文件大小. 2.代码的结构相对简单. 弊端: 1.Sql只能抽取公共的Sql语句,局限性稍大. 2.如果大量的使用Sql标签,则代码的可读性差
73、Mybatis,动态sql
IF-WHERe用法
@Test
public void testFindWhere(){
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
DemoUser demoUser = new DemoUser();
demoUser.setAge(3000);
List list = demoUserMapper.findWhere(demoUser);
System.out.println(list);
sqlSession.close();
}
74、xml
select id,name,age,sex from demo_user
name = #{name}
and age=#{age}
and sex=#{sex}
75、接口
ListfindWhere(DemoUser demoUser);
76、结果
77、动态Sql-SET标签
@Test
public void testUpdateSet(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
DemoUser user = new DemoUser();
user.setId(1).setName("守山大使");
demoUserMapper.updateUser2(user);
sqlSession.close();
}
78、接口
void updateUser2(DemoUser user);
79、xml
update demo_user
name = #{name},
age = #{age},
sex = #{sex}
where
id = #{id}
80、动态Sql-choose when otherwise
@Test
public void testSelectChoose(){
SqlSession sqlSession = sqlSessionFactory.openSession(true);
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
DemoUser user = new DemoUser();
user.setSex("男");
List list = demoUserMapper.selectChoose(user);
System.out.println(list);
sqlSession.close();
}
81、xml
select * from demo_user
where
name = #{name}
sex = #{sex}
82、接口
ListselectChoose(DemoUser user);
83、结果
84、ResultMap用法
创建表dept
85、编辑Dept
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class Dept implements Serializable {
//驼峰命名规则
private Integer deptId;
private String deptName;
}
86、标签说明
resultType说明: 当结果集中的字段名称,如果与属性的名称一致时,才会实现自动的数据封装 resultMap说明: 当结果集中的字段名称,与对象中的属性不一致时,可以使用resultMap实现自定义的封装.
87、测试
@Test
public void testFindDept(){
SqlSession sqlSession = sqlSessionFactory.openSession();
DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
List list = deptMapper.findAll();
System.out.println(list);
sqlSession.close();
}
88、编辑接口DeptMapper
public interface DeptMapper {
List findAll();
}
89、xml,DeptMapper.xml
select * from dept
90、插入数据
91、核心配置文件
92、运行
93、驼峰规则映射
94、Mybatis中的缓存机制
引入缓存,可以有效降低用户访问物理设备的频次,提高用户响应速度
mybatis自身缓存 一级缓存/二级缓存
一级缓存:Mybatis默认开启一级缓存,一级缓存可以在同一个SqlSession对象中查询相同的数据,可以实现数据的共享
测试
@Test
public void cache1(){
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
List list1 = demoUserMapper.findAll();
List list2 = demoUserMapper.findAll();
List list3 = demoUserMapper.findAll();
System.out.println(list1 == list2);
sqlSession.close();
}
95、结果
96、二级缓存
二级缓存mybatis中默认也是开启的,但是需要手动标识
二级缓存可以在同一个SqlSessionFactory内部有效
二级缓存的使用
97、测试
@Test
public void cache2(){
SqlSession sqlSession = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
demoUserMapper.findAll();
//关闭一级缓存
sqlSession.close();
SqlSession sqlSession2 = sqlSessionFactory.openSession();
DemoUserMapper demoUserMapper2 = sqlSession2.getMapper(DemoUserMapper.class);
demoUserMapper2.findAll();
sqlSession2.close();
}
98、代理对象说明
JDK动态代理 特点: 1.要求被代理者必须实现(有)接口. 2.JDK代理是jdk默认提供的. CGLIB动态代理 特点: 1.不管被代理者是否有接口,都可以为其创建代理对象. 代理对象是目标对象的子类. 2.cglib需要手动导入jar包 3.spring为了创建代理对象方便,自身自动添加cglib依赖项.
99、三大框架整合
框架概述
Spring框架:Spring为了团队开发将复杂的框架进行整合,使得程序从控制到调用浑然一体,以一种统一的方式进行调用
核心:整合第三方框架
Spring框架核心机制
IOC: 控制反转: 将对象创建的权利交给Spring容器管理,由Spring容器管理对象的生命周期 DI: 依赖注入 创建对象时,如果该对象中有需要依赖的属性,Spring负责为属性赋值
@RestController
public class UserController {
@Autowired
private UserService userService;
}
AOP 面向切面编程
100、SpringMVC
该框架的主要的作用,接收用户的请求,之后完成业务处理,最终返回响应给用户
创建项目:模型,springboot项目
101、版本
102、pom.xml
4.0.0 org.springframework.boot spring-boot-starter-parent2.5.6 com.jt springboot_ssm0.0.1-SNAPSHOT springboot_ssm Demo project for Spring Boot 1.8 UTF-8 UTF-8 2.5.6 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-devtoolsorg.projectlombok lombokorg.mybatis.spring.boot mybatis-spring-boot-starter2.2.0 mysql mysql-connector-javaorg.springframework.boot spring-boot-dependencies${spring-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin3.8.1 1.8 1.8 UTF-8 org.springframework.boot spring-boot-maven-plugin2.4.1 com.jt.SpringbootDemo1Application repackage repackage
103、User
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
}
104、接口
public interface UserMapper {
//查询demo_user表中的所有数据
List findAll();
}
105、xml
select * from demo_user
106、Service接口和实现类
public interface UserService {
//查询user表中的所有的数据
List findAll();
}
@Service //将该类交给Spring容器管理
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper; //代理对象 JDK动态代理
@Override
public List findAll() {
//List userList = userMapper.findAll();
//return userList;
return userMapper.findAll();
}
}
107、Controller
@RestController //@Controller 将该类交给Spring容器管理 +//@ResponseBody 业务返回值时,将数据转化为JSON.
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getUser")
public List findUser(){
return userService.findAll();
}
}
108、核心配置application.yml
数据源配置
1. serverTimezone=GMT%2B8 指定时区 东八区 2. useUnicode=true&characterEncoding=utf8 开启使用Unicode编码,并且指定字符集utf-8 3. autoReconnect=true 断线是否重新链接. 4. &allowMultiQueries=true 是否允许批量操作
#语法: 1.key:(空格)value结构
server:
port: 8090
#整合数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
#SpringBoot整合mybatis
mybatis:
#指定别名包
type-aliases-package: com.jt.pojo
#加载指定的xml映射文件
mapper-locations: classpath:/mybatis/mappers
//@RequestMapping(value = "findUserById",method = RequestMethod.GET)
@GetMapping("findUserById") //只能接收Get请求类型
public User findUserById(Integer id){
return userService.findUserById(id);
}
114、Service接口和实现类
User findUserById(Integer id);
@Override
public User findUserById(Integer id) {
return userMapper.findUserById(id);
}
115、Mapper接口和映射文件
User findUserById(Integer id);
select * from demo_user where id = #{id}
116、访问:localhost:8090/findUserById?id=6
117、什么是Servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
概括: Servlet是java后台程序与用户交互的机制(媒介)
//http://localhost:8090/findUserByIds?id=1,3,5,6,7
@GetMapping("/findUserByIds")
public String findUserByIds(HttpServletRequest request){
String id = request.getParameter("id");//id串
String[] idStr = id.split(",");//数字数组
Integer[] intArray = new Integer[idStr.length];//多少个数字长度的Integer类型的新空数组
for (int i=0; i
118、访问:localhost:8090/findUserByIds?id=1,3,5,7,9,11
页面和控制台
119、Sql日志
#Sql日志文件打印
logging:
level:
com.jt.mapper: debug
120、SpringMVC参数传值说明,简单参数传值
@GetMapping("/mvc")
public Object testDemo(String name){
return "参数名称:"+name;
}
121、访问:localhost:8090/mvc?name="李思思"
122、对象接收数据
如果用户传递的数据有多个,则可以使用对象接收
@GetMapping("/mvc2")
public Object testDemo(User user){
return "参数名称:"+user;
}
123、访问:localhost:8090/mvc2?name="科比"&age=30&sex="男"
124、restful业务说明,UserController
@GetMapping("/user/{name}/{age}/{id}")
public Object restFul(User user){
userService.update(user);
return "数据更新成功!!!";
}
125、Service及其实现类
void update(User user);
@Override
public void update(User user) {
userMapper.update(user);
}
126、Mapper接口
//@Delete("xxxxx")
//@Insert("sql语句")
//@Select("查询操作的sql")
@Update("update demo_user set name=#{name}, age=#{age} where id=#{id}")
void update(User user);
127、访问:localhost:8090/user/张飞/33/247
页面和数据库
128、前后端调用,vue入门案例
hello 入门案例
双向数据绑定测试
{插值表达式}} -->
获取数据:{{ msg }}
129、显示
130、运行,运行到浏览器,Chrome
131、VUE生命周期函数
概念: 生命周期函数,是VUE针对与用户提供的扩展的功能.如果编辑了生命周期函数,则vue对象自动执行,无需手动调用.
生命周期函数种类:
1. 初始化阶段 beforeCreate created beforeMount mounted VUE对象正在的实例化
2. Vue对象的修改 beforeUpdate, updated
3. 对象销毁 beforeDestroy destroyed
132、案例
测试vue生命周期函数
133、页面和开发者工具
134、前后端调用Axios,Ajax
同步:一个线程依次加载执行,如果数据没有加载完成,则其他数据处于等待的状态
异步:Ajax特点:局部刷新,异步访问 Ajax为什么可以异步:Ajax的设计原理-Ajax引擎
Ajax引擎
用户发起请求,交给Ajax引擎进行处理, 用户可以执行其它的操作.
Ajax引擎接收到用户请求之后, 发起Http请求访问目标服务器.
后台服务器将数据返回给Ajax引擎.
Ajax引擎 将最终获取的数据 通过回调函数的方式 交给用户处理.
135、Axios案例练习
136、启动后台,运行页面,打开开发者工具,刷新,出现错误
137、解决跨域问题
138、显示
139、根据id查询数据
let url1 = "http://localhost:8090/axios/findUserById?id=8"
axios.get(url1)
.then(function(result){
console.log(result.data)
})
140、AxiosController
@RestController
@CrossOrigin
@RequestMapping("/axios")
public class AxiosController {
@Autowired
private UserService userService;
@GetMapping("/findUserById")
public User findUserById(Integer id){
return userService.findUserById(id);
}
141、重启后台,刷新页面,开发者工具
142、根据name和age查询数据
let url2 = "http://localhost:8090/axios/findUserByAS"
//封装对象
let user = {
age: 18,
sex: "女"
}
axios.get(url2,{params : user})
.then(function(promise){
console.log(promise.data)
})
143、AxiosController
@GetMapping("/findUserByAS")
public List findUserByAS(User user){
return userService.findUserByAS(user);
}
144、UserService及其实现类
List findUserByAS(User user);
@Override
public List findUserByAS(User user) {
return userMapper.findUserByAS(user);
}
145、Mapper接口
@Select("select * from demo_user where age=#{age} and sex=#{sex}")
List findUserByAS(User user);
146、页面展现效果
147、Axios-GET-RestFul
let name = "黑熊精"
let sex = "男"
//let url3 = "http://localhost:8090/axios/user/"+name+"/"+sex
let url3 = `http://localhost:8090/axios/user/${name}/${sex}`
axios.get(url3)
.then(function(promise){
console.log(promise.data)
})
148、AxiosController
@GetMapping("/user/{name}/{sex}")
public List findUserByNS(User user){
return userService.findUserByNS(user);
}
149、Service及其实现类
List findUserByNS(User user);
@Override
public List findUserByNS(User user) {
return userMapper.findUserByNS(user);
}
150、Mapper接口
@Select("select * from demo_user where name=#{name} and sex=#{sex}")
List findUserByNS(User user);
151、效果
152、Axios-POST/PUT



