项目学习《第二天》

今天上午决定先分析每个包下面的类的作用及类中的方法的作用。(主要是这个代码的注释太少了!!

controller

UserController
在这里插入图片描述
DashboardController
在这里插入图片描述
DeliveryController
在这里插入图片描述
ItemCategoryController
在这里插入图片描述
ItemController
在这里插入图片描述
OrderController

在这里插入图片描述
ReItemController
在这里插入图片描述
ShippingController
在这里插入图片描述
StockManage
在这里插入图片描述

controller层分析结束
欠缺的知识:分页显示、导出excel还有一些功能实现的细节
决定删除及修改的:上传图片的功能先删除吧,以及统一一下类名

aspect

WebLogAspect
在这里插入图片描述
只学了log4j记录日志,自己写的时候看看可不可以改成用log4j记录日志
通过使用AOP的方式计算并打印各种方法的耗时日志,有利于后续的代码优化

filter

SQLInjectionFilterSevlet
在这里插入图片描述
这里是作者提到的一个优化,没明白,到时候再进一步研究
通过拦截器实现反SQL注入,防止用户输入SQL敏感字符串

mapper

在这里插入图片描述
配置版mabatis我感觉很麻烦,我会换成注解版的。

缓存和工具等用到了再拿出来分析

接下来先把实体类写了以及配置文件。

配置文件application.yml

spring:

  #database
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/sjx?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

  #thymeleaf
  thymeleaf:
    prefix: classpath:/templates/
    mode: HTML5
    encoding: UTF-8
    content-type: text/html
    cache: false #开发时关闭缓存,不然没法看到实时页面
    suffix: .html

  #http
  http:
    multipart:
      max-file-size: 10Mb
      max-request-size: 100Mb

  #mail
  mail:
    host: smtp.exmail.qq.com
    username: [email protected]
    password: test
    from: [email protected]


#druid
druid:
  url: jdbc:mysql://127.0.0.1:3306/sjx?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
  username: root
  password: root
  driver-class-name: com.mysql.jdbc.Driver


#redis
redis:
  host: 127.0.0.1
  port: 6379
  timeout: 10
  pollMaxTotal: 1000
  pollMaxIdle: 500
  poolMaxWait: 500

#mybatis 先配置出来 到时候看用不用
#mybatis:
#  config-location: classpath:/mybatis-config.xml
#  mapper-locations: classpath:/mapper/*Mapper.xml

model


public class BaseObject {
    
    private int start;
    private int end;
    private int pageCurrent;
    private int pageSize;
    private int pageCount;
    private String orderBy;
/*用户实例 tb_user 暂时不明白为什么要继承BaseObject*/
@Data
public class User extends BaseObject{

    private int id;
    private String userName;
    private String password;
    private String realName;
    private String business;
    private String email;
    private String headPicture;
    private Date addDate;
    private Date updateDate;
    private int state;
/*tb_delivery*/
@Data
public class Delivery {

    private int id;
    private String delivery_name;
    private String delivery_code;
    private String delivery_sort;
    private String expressNo;//
/*tb_category*/
@Data
public class ItemCategory extends BaseObject{


    private int id; //类目ID
    private int parentId; //父类目ID=0时,代表的是一级的类目
    private String name; //分类名称
    private int status; //状态。可选值:1(正常),2(删除)
    private int sortOrder; //排列序号
    private int isParent; //该类目是否为父类目,1为true,0为false
    private Date created;
    private Date update;
    private String createdStr; //
    private String updatedStr; //
  /*tb_item*/
@Data
public class Item extends BaseObject {
    private int id;
    private String title;
    private String sellPoint; //商品卖点
    private int price;
    private int num; //库存数量
    private String barcode; //商品条形码
    private String image;
    private int cid; //所属类目,叶子类目
    private int status; //状态 1-正常,2-下架,3-删除
    private Date created;
    private Date updated;
    private String createdStr; //
    private String updatedStr; //
    private String categoryName; //
    private Integer minPrice;  //
    private Integer maxPrice;  //
    private Integer minNum;  //
    private Integer maxNum;  //
/*tb_order*/
@Data
public class Order extends BaseObject{
    private String orderId; //订单id
    private String payment; //实付金额
    private int paymentType; //支付类型,1、在线支付,2、货到付款
    private String postFee; //邮费
    private int status; //状态:1、未付款,2、已付款,3、未发货,4、已发货,5、交易成功,6、交易关闭
    private Date createTime; //订单创建时间
    private Date updateTime; //订单更新时间
    private Date paymentTime; //付款时间
    private Date consignTime; //发货时间
    private Date endTime; //交易完成时间
    private Date closeTime; //交易关闭时间
    private String shippingName; //物流名称
    private String shippingCode; //物流单号
    private Long userId; //用户id
    private String buyerMessage; //买家留言
    private String buyerNick; //买家昵称
    private Integer buyerRate; //买家是否已经评价
    private Integer refundStatus; //退货状态
    private String refundReason; //退货原因
    private int isRefund; //是否退货
    private String itemId; //商品id
    private String itemTitle;  //标题
    private Long totalFee; //总价
    private int num; //库存数量
    private String refundStatusStr; //
    private Date minOrderTime; //
    private Date maxOrderTime; //
    private String statusStr; //
    private String minOrderTimeStr; //
    private String maxOrderTimeStr; //
    private String paymentTypeStr; //
    private String buyerRateStr; //
    private String dateStr1; //
    private String dateStr2; //
    private String dateStr3; //
    private String dateStr4; //
    private String dateStr5; //
/*tb_order_item*/
@Data
public class OrderItem extends BaseObject{

    private String id;
    private String itemId; //商品id
    private String orderId; //订单id
    private int num; //商品购买数量
    private String title; //商品标题
    private Long price; //商品单价
    private Long totalFee; //商品总金额
    private String picPath; //商品图片地址
}
/*tb_order_shipping*/
@Data
public class OrderShipping  extends BaseObject{

    private String orderId; //订单ID
    private String receiverName; //收货人全名 
    private String receiverPhone; //固定电话
    private String receiverMoblie; //移动电话
    private String receiverState; //省份
    private String receiverCity; //城市
    private String receiverDistrict; //区/县
    private String receiverAddress; //收货地址
    private String receiverZip; //邮政编码
    private Date created;
    private Date updated;

}
/*tb_re_item*/
@Data
public class ReItem extends BaseObject {
    private int id; //商品id,同时也是商品编号
    private String title; //商品标题
    private String sellPoint; //商品卖点
    private int price; //商品价格
    private int num; //库存数量
    private String barcode; //商品条形码
    private String image; //商品图片
    private int cid; //所属类目,叶子类目
    private int status; //商品状态,1-正常,2-下架,3-删除
    private Date recovered; //回收时间
    private String recoveredStr; //

}
@Data
public class Month {

    private int Jan;
    private int Feb;
    private int Mar;
    private int Apr;
    private int May;
    private int Jun;
    private int Jul;
    private int Aug;
    private int Sep;
    private int Oct;
    private int Nov;
    private int Dec;
@Data
public class Express {
    
    private int id;
    private String time;
    private String context;
    private String location;
/*统计类*/
@Data
public class Stats {
    
    private long mIncome; //月收入
    private String incomePer; //月收入环比
    private int mOrderNum; //月订单数
    private String orderNumper; //月订单数环比
    private int mOrderRefund; //月退单
    private String mOrderRefundper; //月退单环比
    private int pv; //访问量

以上写完了配置文件以及实体类。

接下来把login页面功能看懂自己写一遍。

首先是登录功能:

mapper接口存放sql语句

/*user表SQL语句*/
@Mapper
@Repository
public interface UserMapper {

    @Select("select * from tb_user where userName=#{userName} and password=#{password} and state=1")
    User selectByNameAndPwd(User user);

    @Insert("insert into tb_user(id,userName,password,realName,business,email,headPicture,addDate,updateDate,state) values (null,#{userName},#{password},null,null,#{email},null,#{addDate},#{updateDate},1)")

    int insert(User user);

    @Update("update tb_user set password=#{password},email=#{email},realName=#{realName},business=#{business},updateDate=#{updateDate} where userName=#{userName}")
    int update(User user);

    @Select("select 1 from tb_user where userName=#{userName}")
    int selectIsName(User user);

    @Select("select password from tb_user where userName=#{userName} and email=#{email}")
    String selectPwdByName(User user);

}

UserService接口存放user业务操作

/*user业务操作*/
public interface UserService {
    
    User selectByNameAndPwd(User user);

    int insert(User user);

    int update(User user);

    int selectIsName(User user);

    String selectPwdByName(User user);
}

UserServiceImpl类实现user表接口具体业务逻辑

/*user表接口具体业务逻辑*/
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;

    /*查询用户密码*/
    @Override
    public User selectByNameAndPwd(User user) {
        return userMapper.selectByNameAndPwd(user);
    }

    /*添加用户*/
    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }

    /*更新用户*/
    @Override
    public int update(User user) {
        return userMapper.update(user);
    }

    /*通过用户名查询*/
    @Override
    public int selectIsName(User user) {
        return userMapper.selectIsName(user);
    }

    /*通过用户名和邮箱查询密码*/
    @Override
    public String selectPwdByName(User user) {
        return userMapper.selectPwdByName(user);
    }
}

**UserController类

登录功能实现

/*用户管理*/
@Controller
public class UserController {

    @Autowired
    UserService userService;

    @Autowired
    HttpSession httpSession;

    /*跳转登录界面*/
    @GetMapping("user/login")
    public String loginGet(Model model){
        return "login";
    }

    /*验证登录*/
    @PostMapping("user/login")
    public String loginPost(User user, Model model){
        User user1 = userService.selectByNameAndPwd(user);
        if(user1 != null){
            httpSession.setAttribute("user",user1);
            User name = (User) httpSession.getAttribute("user");
            return "redirect:dashboard";
        }else {
            model.addAttribute("error","账号或密码错误");
            return "login";
        }
    }

}

看完源代码然后自己写的,写完之后当然有问题修改再写,最后再在空白文档手敲一遍主要功能
在这里插入图片描述
login.html

<body class="gray-bg">
	<div class="middle-box text-center loginscreen animated fadeInDown">
		<div>
			<div>
				<h2 class="logo-name">YX</h2>
			</div>
			<h3>欢迎进入后台管理系统</h3>
			<!--<p>Login in. To see it in action.</p>-->
			<form class="m-t" role="form" action="login" method="post">
				<div class="form-group">
					<input type="text" class="form-control" placeholder="输入账号" name="userName" required="" />
				</div>
				<div class="form-group">
					<input type="password" class="form-control" placeholder="输入密码" name="password" required="" />
				</div>
				<button type="submit" class="btn btn-primary block full-width m-b">登  录</button>
				<a th:href="@{forget}" href="#"><small>忘记密码 ?</small></a>
				<!--<a th:href="@{register}" href="#"><small>没有账号 ?</small></a>-->
				<p class="text-muted text-center">
					<small>没有账号 ?</small>
				</p>
				<a class="btn btn-sm btn-white btn-block" th:href="@{register}" href="register.html">注  册</a>
			</form>
		</div>
	</div>

	<script th:inline="javascript">
		var error = [[${error}]];
		$(document).ready(function () {
			if(error!=null){
				 swal({
		         	title : "温馨提示",
		         	text : error
		      	});
			}
		});

	</script>
</body>

页面展示
在这里插入图片描述
注册功能实现

    /*跳转注册页面*/
    @GetMapping("user/register")
    public String registerGet(Model model){
        return "register";
    }

    /*注册*/
    @PostMapping("user/register")
    public String registerPost(User user, Model model){
        System.out.println("用户名:" + user.getUserName());
        try{
            userService.selectIsName(user);
            model.addAttribute("error", "该用户已存在");
        }catch (Exception e){
            Date date = new Date();
            user.setAddDate(date);
            user.setUpdateDate(date);
            userService.insert(user);
            System.out.println("注册成功");
            model.addAttribute("error", "注册成功");
            return "login";
        }
        return "register";
    }

完成解决一些问题然后再写的,一遍ok。
在这里插入图片描述

<body class="gray-bg">

    <div class="middle-box text-center loginscreen   animated fadeInDown">
        <div>
            <div>
                <h2 class="logo-name">YX</h2>
            </div>
            <h3>欢迎注册</h3>
            <!--<p>Create account to see it in action.</p>-->
            <form class="m-t" role="form" action="register.html" th:action="@{register}" method="post">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="userName" name="userName" required=""/>
                </div>
                <div class="form-group">
                    <input type="password" class="form-control" placeholder="password" name="password" required=""/>
                </div>
                <div class="form-group">
                    <input type="email" class="form-control" placeholder="email" name="email" required=""/>
                </div>
                <div class="form-group">
                        <div class="checkbox i-checks"><label> <input type="checkbox"/><i></i> 记住账号密码 </label></div>
                </div>
                <button type="submit" class="btn btn-primary block full-width m-b">注  册</button>

                <p class="text-muted text-center"><small>已经注册 ?</small></p>
                <a class="btn btn-sm btn-white btn-block" th:href="@{login}" href="login.html">登  录</a>
            </form>
        </div>
    </div>
    
    <script th:src="@{/js/jquery-2.1.1.js}"></script>
    <script th:src="@{/js/bootstrap.min.js}"></script>
    <script src="js/plugins/iCheck/icheck.min.js"></script>
    <script th:src="@{/js/plugins/sweetalert/sweetalert.min.js}"></script>

    <script th:inline="javascript">
        var error = [[${error}]];
        $(document).ready(function () {
            if(error!=null){
                swal({
                    title : "温馨提示",
                    text : error
                });
            }
            $('.i-checks').iCheck({
                checkboxClass: 'icheckbox_square-green',
                radioClass: 'iradio_square-green',
            });
        });

    </script>
</body>

页面展示
在这里插入图片描述
注册功能遇到两个问题注册功能遇到两个问题

1.跳转注册页面跳转不过来
在这里插入图片描述

一开始作者没写后面的th:action,login界面也没写,其实我比较好奇怎么跳转成功的。这个页面就跳转不成功,于是我加了后面的th:action,解决。
2.insert查询语句一直报错!!这个语句太长了!!写的时候一定要注意检查啊!!!我前后看的眼睛都要瞎了,陆续发现少了括号、单词拼错、少写列名等等问题……以至于花的时间有点久,以后一点多加注意!!

今天的学习就到这里啦!现在是十一点,第一天的是昨晚忘记发表了,所以今天早上发表的。今天依旧收获满满啦明天要再努力呀~

猜你喜欢

转载自blog.csdn.net/SuJxxx/article/details/89303811