从b站学习springcloud项目,现在进行总结,该总结除去了视频中出现的小错误,对有些易错的地方进行了提醒
b站链接:https://www.bilibili.com/video/av55629580?p=1
资料链接:
https://pan.baidu.com/s/1o0Aju3IydKA15Vo1pP4z5w
提取码: 21ru
上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103644807
下面的内容总结:
实现细节:
管理员页面处理订单功能实现:
1.在client/filter中新建AdminFilter.java,对于doFilter部分,它和UserFilter中的一样,可复制过来
User user = (User) session.getAttribute(“user”);
改为Admin admin = (Admin) session.getAttribute(“admin”);
if中判断 user 改为 admin
完整代码如下:
package com.southwind.filter;
import com.southwind.entity.Admin;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@Component
@WebFilter(urlPatterns = {"/main.html"}, filterName = "adminFilter")
public class AdminFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
Admin admin = (Admin) session.getAttribute("admin");
if (admin ==null){
response.sendRedirect("login.html");
}else{
filterChain.doFilter(servletRequest,servletResponse);
}
}
@Override
public void destroy() {
}
}
2.在order/repository/OrderRepository中添加代码:
public List<Order> findAll(int index, int limit);
public void updateState(long id);
public int count();
3.在order/mapping/OrderRepository.xml添加代码:
注意:id对应接口里的名字,必须一致!
<select id="findAll" resultMap="orderMap">
select id,mid,date,state from t_order where state = 0 limit #{param1},#{param2}
</select>
<select id="updateState" parameterType="long">
update t_order set state = 1 where id =#{id}
</select>
<select id="count" resultType="int">
select count(*) from t_order where state = 0
</select>
4.在order/controller/OrderHandler中添加代码:
@GetMapping("/findAll/{index}/{limit}")
public OrderVO findAll(@PathVariable("index")int index, @PathVariable("limit")int limit){
OrderVO orderVO = new OrderVO();
orderVO.setMsg("");
orderVO.setCount(orderRepository.count());
orderVO.setData(orderRepository.findAll(index, limit));
return orderVO;
}
@GetMapping("/update/{id}")
public void update(@PathVariable("id")long id){
orderRepository.updateState(id);
}
测试 重启 order 和 client
5.进入 http://localhost:8010/order/findAll/0/10
想把30的state由0改成1:
打开postman 进入 put http://localhost:8010/order/update/30
修改成功!
6.将user/repositoryUserRepository复制至order/repository中
将user/mapping/UserRepository.xml复制至order/mapping中,但是只保留findById的代码,其他删除
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.UserRepository">
<select id="findById" parameterType="long" resultType="User">
select * from t_user where id = #{id}
</select>
</mapper>
7.同时对order/mapping/MenuRepository.xml也精简一下,只保留resultMap 和 findById:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.MenuRepository">
<resultMap id="menuMap" type="menu">
<id column="id" property = "id"></id>
<result column="name" property="name"></result>
<result column="price" property="price"></result>
<result column="flavor" property="flavor"></result>
<association property="type" select="com.southwind.repository.TypeRepository.findById" column="tid"></association>
</resultMap><!-- association 中的column是传入字段 -->
<select id="findById" parameterType="long" resultMap="menuMap">
select * from t_menu where id = #{id}
</select>
</mapper>
8.对order/repository/MenuRepository也精简,只留findById:
package com.southwind.repository;
import com.southwind.entity.Menu;
public interface MenuRepository {
public Menu findById(long id);
}
9.order/repository/TypeRepository只留findById功能
package com.southwind.repository;
import com.southwind.entity.Type;
public interface TypeRepository {
public Type findById(long id);
}
order/mapping/TypeRepository.xml只留findById:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.TypeRepository">
<select id="findById" parameterType="long" resultType="Type">
select * from t_type where id = #{id}
</select>
</mapper>
10.在order/repository/UserRepository只留findById:
package com.southwind.repository;
import com.southwind.entity.User;
public interface UserRepository {
public User findById(long id);
}
11.看到client/static/order_handler.html中数据的类型,所以要去修改order/mapping/OrderRepository.xml中findAll的代码,添加< association>:
<select id="findAll" resultMap="orderMap">
select id,mid,uid,date,state from t_order where state = 0 limit #{param1},#{param2}
</select>
<association property="user" select="com.southwind.repository.UserRepository.findById" column="uid"></association>
完整代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.OrderRepository">
<resultMap id="orderMap" type="Order">
<id column="id" property="id"></id>
<result column="date" property="date"></result>
<result column="state" property="state"></result>
<association property="menu" select="com.southwind.repository.MenuRepository.findById" column="mid"></association>
<association property="user" select="com.southwind.repository.UserRepository.findById" column="uid"></association>
</resultMap>
<insert id="save" parameterType="Order">
insert into t_order(uid,mid,aid,date,state) values(#{user.id},#{menu.id},#{admin.id}, #{date},0)
</insert>
<select id="findAllByUid" resultMap="orderMap">
select id,mid,date,state from t_order where uid = #{param3} limit #{param1},#{param2}
</select>
<select id="countByUid" parameterType="long" resultType="int">
select count(*) from t_order where uid=#{id}
</select>
<select id="findAll" resultMap="orderMap">
select id,mid,uid,date,state from t_order where state = 0 limit #{param1},#{param2}
</select>
<select id="updateState" parameterType="long">
update t_order set state = 1 where id =#{id}
</select>
<select id="count" resultType="int">
select count(*) from t_order where state = 0
</select>
</mapper>
测试
12. 进入 http://localhost:8010/order/findAll/0/10
可以看到其数据类型与之前的不一样
去消费者client中页面实现
13.在client/feign/OrderFeign中添加代码:
@GetMapping("/order/findAll/{index}/{limit}")
public OrderVO findAll(@PathVariable("index")int index, @PathVariable("limit")int limit);
@GetMapping("/order/updateState/{id}")
public void updateState(@PathVariable("id")long id);
同时去order/Orderandler中将update改为updateState:
@PutMapping("/updateState/{id}")
public void updateState(@PathVariable("id")long id){
orderRepository.updateState(id);
}
14.在client/controller/OrderHandler中添加代码:
注意findAll的@ResponseBody不可省!他它的作用是返回数据,而不是视图
@GetMapping("/findAll")
@ResponseBody
public OrderVO findAll(@RequestParam("page")int page, @RequestParam("limit")int limit){
int index = (page - 1)*limit;
return orderFeign.findAll(index, limit);
}
@GetMapping("/updateState/{id}")
public String updateState(@PathVariable("id")long id){
orderFeign.updateState(id);
return "redirect:/menu/redirect/order_handler";
}
15.在client/static/order_handler.html中把第23行的 url:’/order/findAllByState’
改为url:’/order/findAll’
16.在client/static/order_handler.html的第65行
window.location.href="/order/updateState/"+data.id+"/1";
改为 window.location.href="/order/updateState/"+data.id;
检查 重启client 和 order
1.进入 http://localhost:8030/login.html 登录admin1后:
点击 “ 处理订单 ” 后:
这里的订单是未派送的菜!
管理员在得知已送达后点击右面的已派送就可以了
点击最后张三订单的已派送
修改成功!
上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103644807