CGB2107-Day08-前后端项目实现

CGB2107-Day08-前后端项目实现

1. Axios 学习(重点知识)

1.1 Axios-GET/DELETE

1.1.1 请求方式说明
  1. http://localhost:8090/findUser?id=xxx&name=xxx
  2. 利用对象的方式进行数据封装 axios.get(url,{params: 封装的对象})
  3. RestFul的参数提交方式.
1.1.2 Axios-GET-RestFul
1.1.2.1 编辑页面JS
/* 
				案例三: 利用restFul实现数据获取
				需求:  根据name/sex查询数据
				模板字符串: 语法ES7的写法 一对反引号进行数据拼接,通过${} 获取变量
			 */	 
			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)
				 })

1.1.2.2 URL请求路径

在这里插入图片描述

1.1.2.3 编辑AxiosController
/**
     * 业务说明: 接收restFul请求
     * URL:http://localhost:8090/axios/user/${name}/${sex}
     * 参数: name/sex
     * 结果: List<User>
     */
    @GetMapping("/user/{name}/{sex}")
    public List<User> findUserByNS(User user){

        return userService.findUserByNS(user);
    }
1234567891011
1.1.2.4 编辑AxiosService

1.UserService接口

 List<User> findUserByNS(User user);

2.UserServiceImpl实现类

 @Override
    public List<User> findUserByNS(User user) {
        return userMapper.findUserByNS(user);
    }
1.1.2.5 编辑UserMapper
@Select("select * from demo_user where name=#{name} and sex=#{sex}")
List<User> findUserByNS(User user);

1.2 Axios-POST/PUT

1.2.1 编辑JS
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Post请求练习</title>
	</head>
	<body>
		<h1>Ajax项目前测试-POST</h1>
		<!-- 导入js jar包 -->
		<script src="../js/axios.js"></script>
		<script>
			
			/**
			 * 业务: 实现post请求入库操作 实现入库用户
			 * 知识点: 
			 * 		1.post请求中的参数 axios.post(url,user)
			 * 
			 */
			let url = "http://localhost:8090/axios/saveUser"
			let user = {
				name: "国庆快乐",
				age: 72,
				sex: "女"
			}
			axios.post(url,user)
				 .then(function(promise){
					 console.log(promise.data)
				 })
			
		</script>
	</body>
</html>
1.2.2 检查请求路径

参数在http协议中传输时,变成了json串.
在这里插入图片描述

1.2.3 编辑AxiosController
 /**
     * 业务:实现用户的新增
     * URL: http://localhost:8090/axios/saveUser
     * 参数: {"name":"国庆快乐","age":72,"sex":"女"} JSON串
     * 返回值: String 新增成功
     * 知识点: post请求传递对象时,传递的数据是一个json串.不能直接为User对象赋值.
     * 解决方案:
     *        1.对象转化为JSON  @ResponseBody
     *        2.JSON转化为对象  @RequestBody
     *
     */
    @PostMapping("/saveUser")
    public String saveUser(@RequestBody User user){
        System.out.println(user);
        userService.saveUser(user);
        return "用户入库成功!!!";
    }
1.2.4 编辑AxiosService
//框架整合mybatis之后,数据自动提交.
    @Override
    public void saveUser(User user) {
        userMapper.saveUser(user);
    }
12345
1.2.5 编辑AxiosMapper
    @Insert("insert into demo_user value(null,#{name},#{age},#{sex})")
    void saveUser(User user);
1.2.6 Axios简化操作
1.2.6.1 指定请求的前缀

说明: 由于项目中会有大量的Ajax请求,如果每个请求将路径写全,则较为繁琐.不方便扩展
例子:
1.http://www.jd.com/axios/saveUser
2.http://localhost:8090/axios/getUser

解决方案:

/* 指定公共的请求前缀 */
			axios.defaults.baseURL = "http://localhost:8090"
			
			axios.post("/axios/saveUser",user)
				 .then(function(promise){
					 console.log(promise.data)
				 })
1.2.6.2 async-await 关键字
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>简化</title>
	</head>
	<body>
		<h1>async-await写法</h1>
		<!-- 导入js jar包 -->
		<script src="../js/axios.js"></script>
		<script>
			//1.指定请求前缀
			axios.defaults.baseURL = "http://localhost:8090"
			
			/**
			 * 需求: 要求ajax请求在一行完成!
			 * 解决方案: async-await
			 * 语法说明:
			 * 		1.async 必须标识函数方法
			 * 		2.await 必须标识ajax请求
			 *  实际意义:
			 * 		解决了ajax中的头号难题, "回调地狱"问题
			 */
			
			//1.定义函数
			async function getUser(){
				let promise = await axios.get("/getUser")
				console.log(promise.data)
				
				//解构赋值 固定写法 死记硬背
				let {data: result} = await axios.get("/getUser")
				console.log(result)
			}
			
			//2.调用函数
			getUser()
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>简化</title>
	</head>
	<body>
		<h1>async-await写法</h1>
		<!-- 导入js jar包 -->
		<script src="../js/axios.js"></script>
		<script>
			//1.指定请求前缀
			axios.defaults.baseURL = "http://localhost:8090"
			
			/**
			 * 需求: 要求ajax请求在一行完成!
			 * 解决方案: async-await
			 * 语法说明:
			 * 		1.async 必须标识函数方法
			 * 		2.await 必须标识ajax请求
			 *  实际意义:
			 * 		解决了ajax中的头号难题, "回调地狱"问题
			 */
			
			//1.定义函数
			async function getUser(){
				let promise = await axios.get("/getUser")
				console.log(promise.data)
				
				//解构赋值 固定写法 死记硬背
				let {data: result} = await axios.get("/getUser")
				console.log(result)
			}
			
			//2.调用函数
			getUser()
		</script>
	</body>
</html>

1.3 前后端项目调用案例

1.3.1 案例功能说明

在这里插入图片描述

1.3.2 用户列表展现
1.3.2.1 需求说明

要求:用户只要一访问页面,就要发起Ajax请求,访问后端服务器获取用户列表数据.

1.3.2.2 编辑页面
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>用户列表展现案例</title>
	</head>
	<body>
		<div id="app">
			<div align="center">
				<h3 align="center">用户新增</h3><br>
				<p>
					用户名称: <input type="text" name="name"/>
					用户年龄: <input type="text" name="age"/>
					用户性别: <input type="text" name="sex"/>
					<button>新增</button>
				</p>
			</div>
			<hr />
			<div align="center">
				<h3 align="center">用户修改操作</h3><br>
				<p>
						用户ID号: <input type="text" name="id" disabled/>
						用户名称: <input type="text" name="name"/>
						用户年龄: <input type="text" name="age"/>
						用户性别: <input type="text" name="sex"/>
						<button>修改</button>
				</p>
			</div>
			<h1 align="center">用户列表展现案例</h1>
			<table align="center" border="1px" width="80%">
				<tr align="center">
					<td>ID编号</td>
					<td>姓名</td>
					<td>年龄</td>
					<td>性别</td>
					<td>操作</td>
				</tr>
				<tr align="center" v-for="user in userList">
					<td v-text="user.id"></td>
					<td v-text="user.name"></td>
					<td v-text="user.age"></td>
					<td v-text="user.sex"></td>
					<td>
						<button>修改</button>
						<button>删除</button>
					</td>
				</tr>
				
			</table>
		</div>
		
		<script src="../js/axios.js"></script>
		<script src="../js/vue.js"></script>
		<script>
			//为axios执行前缀
			axios.defaults.baseURL="http://localhost:8090"

			const app = new Vue({
				el: "#app",
				data: {
					//3.定义数据列表
					userList: []
				},
				methods: {
					//2.定义获取列表数据的函数
					async getUserList(){
						let {data: result} = await axios.get("/axios/findAll")
						//console.log(result)
						//将ajax返回值传递给Vue
						this.userList = result
					}
				},
				mounted(){
					//1利用生命周期函数调用getUser函数
					this.getUserList()
				}
			})
			
		</script>
	</body>
</html>
1.3.2.3 编辑AxiosController
/**
     * 需求:获取user全部列表
     * URL: /axios/findAll
     * 参数: 没有
     * 返回值: List<User>
     */
    @GetMapping("/findAll")
    public List<User> findAll(){

        return userService.findAll();
    }
1.3.2.4 页面效果展现

在这里插入图片描述

1.3.3 用户新增
1.3.3.1 编辑页面html
<div align="center">
				<h3 align="center">用户新增</h3><br>
				<p>
					<!-- 看到input框架 第一时间想到双向数据绑定 -->
					用户名称: <input type="text" name="name" v-model="addUser.name"/>
					用户年龄: <input type="text" name="age"  v-model="addUser.age" />
					用户性别: <input type="text" name="sex"  v-model="addUser.sex" />
					<button @click="addUserBtn">新增</button>
				</p>
			</div>
  1. JS封装属性
    在这里插入图片描述
  2. JS方法实现
    在这里插入图片描述
1.3.4 用户修改
1.3.4.1 数据回显
  1. 编辑按钮点击事件
    在这里插入图片描述
  2. 定义更新对象
    在这里插入图片描述
1.3.4.2 数据更新
  1. 添加修改点击事件
    在这里插入图片描述
  2. 编辑修改函数
    在这里插入图片描述
1.3.5 修改后端实现
1.3.5.1 编辑AxiosController
 /**
     * 业务: 实现用户更新
     * URL: /axios/updateUser
     * 参数: json串
     * 返回值: 提示信息
     */
    @PutMapping("updateUser")
    public String updateUser(@RequestBody User user){

        userService.updateUser(user);
        return "更新操作成功!";
    }
1.3.5.2 编辑UserService

1.定义接口
在这里插入图片描述

2.编辑实现类

 @Override
    public void updateUser(User user) {

        userMapper.updateUser(user);
    }
12345
1.3.5.3 编辑UserMapper
 @Update("update demo_user set name=#{name},age=#{age},sex=#{sex} where id=#{id}")
 void updateUser(User user);
12

2. 京淘项目前端项目搭建

2.1 node.js 安装

说明: 根据博客文章安装node.js/ui工具.最终的效果如图即可
在这里插入图片描述

2.2 导入前端项目

2.2.1 前端资源文件

注意事项: 下载的文件一定是一个zip包文件.
路径:
在这里插入图片描述

2.2.2 解压文件

将资源文件的zip包 解压到第三阶段的课程项目路径下.
在这里插入图片描述

2.2.3 导入项目

在这里插入图片描述

2.2.4 项目运行

在这里插入图片描述

项目最终效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

管程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值