目录
1 、SpringMVC简单的参数传值
/**
* URL:http://localhost:8090/mvc?name="李四"
*
* @return
*/
@GetMapping("/mvc")
public Object testDemo(String name) {
return "参数名称:" + name;
}
对象接受数据
/**
* URL:http://localhost:8090/mvc?name="李四"&age=18&sex="女"
* 说明: 如果使用对象的方式进行接收,则必须有Setxx方法.
* @return
*/
@GetMapping("/mvc")
public Object testDemo(User user){
return "参数名称:"+user;
}
对象的引用赋值(几乎用不到)
SQL日志展现:
#SQL日志显示
logging:
level:
com.jt.mapper: debug
2 、vuedemo案例
2.1 、入门案例--事件绑定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello 入门案例</title>
</head>
<body>
<!-- 使用步骤:
1.导入js.文件
2.准备根标签
3.创建vue对象,实现挂载
4.定义属性实现动态数据取值
知识补充: new Vue({}) 函数式编程
-->
<div id="app">
<h1>双向数据绑定测试</h1>
<!-- {{插值表达式}} -->
<h3>{{ hello }}</h3>
<h3>{{ number }}</h3>
<button v-on:click="addNum" >点我增加</button>
</div>
<!-- 引入js -->
<!--
var 无作用域 全局变量
let 有作用域
const 定义常量
-->
<script src="../js/vue.js"></script>
<script type="text/javascript">
const app = new Vue({
//element 元素
el: "#app",
data: {
hello: "helloVue",
number:100
},
methods:{
addNum(){
this.number ++
}
}
})
</script>
</body>
</html>
2.2 、循环案例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>循环结构数据</title>
</head>
<body>
<div id="app">
<!-- 插值表达式如果渲染不完全会展现{{}} -->
<span v-for="item in hobby">{{item}}</span>
<!-- 使用v-text优化属性 -->
<span v-for="item in hobby" v-text="item"></span>
<!-- 展现数组下标 -->
<span v-for="(item,index) in hobby" v-text="index"></span>
<!-- 循环遍历数组对象 :key用来区分遍历的节点信息 -->
<div v-for="item in users" :key="item.id">
<span v-text="item.id"></span>
<span v-text="item.name"></span>
</div>
<!-- 遍历对象 获取对象的key-value-index索引 -->
<div v-for="(key,value,index) in user">
<span v-text="key"></span>
<span v-text="value"></span>
<span v-text="index"></span>
</div>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el : "#app",
data : {
hobby: ['吃','喝','玩','乐'],
users: [{
id: 100,
name: '王昭君'
},{
id: 101,
name: '安琪拉'
}],
user: {
id: 1,
name: '张三',
age: 18
}
}
})
</script>
</body>
</html>
2.3 、vue生命周期函数
生命周期函数是vue针对与用户提供的扩展的功能,如果我们编辑了生命周期函数,则vue对象自动调动执行,无需手动调动。
种类:(一共八类)
1.初始化阶段:beforeCreate created beforeMount mounted(vue对象真正实例化)
2.vue对象的使用/修改阶段: beforeUpdate updated
3.vue对象销毁阶段:beforeDestroy destroyed
解析八个种类:
beforeCreate 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
解析:vue对象被js刚解析之后,实例化成功内部的属性都是空。
created 在实例创建完成后被立即调用
解析:VUE对象开始加载其中的属性和属性的值,当加载完成,对象实例化成功!!! 仅限于创建不执行业务操作。
beforeMount 在挂载开始之前被调用:相关的 render 函数首次被调用
解析:对象中的el:"#app" ,通过app指定的ID,将指定的区域交给vue对象进行管理。
mounted 实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。
解析:当对象创建完成之后,并且指定区域开始 “渲染”,将区域中的标签/表达式进行解析加载. 当数据加载成功之后,这时mounted执行完成.这时用户可以看到解析后的页面。
beforeUpdate 数据更新时调用,发生在虚拟 DOM 打补丁之前
updated 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
beforeDestroy 实例销毁之前调用。在这一步,实例仍然完全可用
destroyed 实例销毁后调用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试vue生命周期函数</title>
</head>
<body>
<div id="app">
<h3 v-text="msg"></h3>
<button @click="destroy">销毁</button>
</div>
<!--引入js函数类库 -->
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el : "#app",
data : {
msg: "vue生命周期"
},
//在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
beforeCreate(){
console.log("beforeCreate")
},
//在实例创建完成后被立即调用
created(){
console.log("created")
},
//在挂载开始之前被调用:相关的 render 函数首次被调用。
beforeMount(){
console.log("beforeMount")
},
//实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。
mounted(){
console.log("mounted")
},
//数据更新时调用,发生在虚拟 DOM 打补丁之前
beforeUpdate(){
console.log("beforeUpdate")
},
//由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
updated(){
console.log("updated")
},
//实例销毁之前调用。在这一步,实例仍然完全可用
beforeDestroy(){
console.log("beforeDestroy")
},
//实例销毁后调用。
destroyed(){
console.log("destroyed")
},
methods:{
destroy(){
this.$destroy()
}
}
})
</script>
</body>
</html>
2.4 、前后端调用Axios
2.4.1 、Ajax
Ajax特点:局部刷新,异步访问(请求)
同步说明:
特点:一个线程依次加载执行,如果数据没有加载完成则其他数据处于等待的状态.
异步说明:
Ajax 为啥可以异步?(设计原理:Ajax 引擎 )
Ajax引擎:
- 用户发起请求,交给Ajax引擎进行处理, 用户可以执行其它的操作.
- Ajax引擎接收到用户请求之后, 发起Http请求访问目标服务器.
- 后台服务器将数据返回给Ajax引擎.
- Ajax引擎 将最终获取的数据 通过回调函数的方式 交给用户处理.
package com.jt.controller;
import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@CrossOrigin
@RestController
@RequestMapping("/axios")
public class AxiosController {
@Autowired
private UserService userService;
@GetMapping("findUserById")
public User findUserById(Integer id){
return userService.findUserById(id);
}
/**
* 根据age和sex查询数据
* URL地址:http://localhost:8090/axios/findUserByAS?age=18&sex=%E5%A5%B3
* 请求类型: get
* 参数: age/sex
* 返回值: list<User>
*/
@GetMapping("/findUserByAS")
public List<User> findUserByAS(User user){
return userService.findUserByAS(user) ;
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>ajax</h1>
<script src="../js/axios.js"></script>
<script>
/**
* 作业1
* url地址: http://localhost:8090/axios/findUserById?id=1
* 参数: id=1
* 返回值: console.log输出
*/
let url1 = "http://localhost:8080/axios/findUserById?id=1"
axios.get(url1)
.then(function(promise){
console.log(promise.data)
})
// let url="http://locahost:8080/getUser"
// axios.get(url)
// .then(function(promise){
// console.log(promise.data)
// })
// let url1="http://locahost:8080/findUserById?id=1"
// axios.get(url1)
// .then(function(promise){
// console.log(promise.data)
// })
/**
* 作业2: 根据age/sex查询用户信息
* url地址: http://localhost:8090/axios/findUserByAS
* 参数: id=1
* 返回值: console.log输出
* 知识点: 根据对象传递参数时,使用params关键字
*/
let url2="http://localhost:8080/axios/findUserByAS"
let user = {age : 18, sex : "女"}
axios.get(url2,{params : user}).then(function(promise){
console.log(promise.data)
})
</script>
</body>
</html>
3 、vue客户端
下载版本符合的node.js,查询版本
检查npm版本
切换npm库
npm config set registry https://registry.npm.taobao.org
检查镜像配置
npm config list
下载vue客户端(如果下载出现error尽量多下几次)
npm install -g @vue/cli --force
启动vue客户端
vue ui
创建vue项目
选择手动的预设
选择ESLint+ StandardConfig
项目创建完成
导入一个项目:
运行项目:
执行APP:
最终展示页面: