ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1:springboot微信点餐之初始环境

2020-03-11 11:51:43  阅读:187  来源: 互联网

标签:COMMENT product varchar log DEFAULT 微信 点餐 NULL springboot


1:springboot微信点餐之初始环境

一、pom文件

Springboot1.5.3

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.imooc</groupId> <artifactId>sell</artifactId> <version>0.0.1-SNAPSHOT</version> <name>sell</name> <description>Demo project for Spring Boot</description>   <properties> <java.version>1.8</java.version> </properties>   <dependencies>   <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>   <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>   <!--lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency>   <!--gson依赖--> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency>   <!--mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>   <!--微信授权依赖--> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>2.7.0</version> </dependency>   <!--微信支付依赖--> <dependency> <groupId>cn.springboot</groupId> <artifactId>best-pay-sdk</artifactId> <version>1.1.0</version> </dependency>   <!--freemarker依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>   <!--redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>   <!--websocket依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>   <!--jpa依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>   </dependencies>   <build> <!--打包时的名字--> <finalName>sell</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>   </project>

二、数据库文件

Mysql8

#商品类目表 DROP TABLE IF EXISTS `product_category`; CREATE TABLE `product_category` ( `category_id` int(11) NOT NULL AUTO_INCREMENT, `category_name` varchar(64) NOT NULL COMMENT '类目名字', `category_type` int(11) NOT NULL COMMENT '类目编号', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`category_id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;   #商品主表 DROP TABLE IF EXISTS `product_info`; CREATE TABLE `product_info` ( `product_id` varchar(32) NOT NULL, `product_name` varchar(64) NOT NULL COMMENT '商品名称', `product_price` decimal(8,2) NOT NULL COMMENT '单价', `product_stock` int(11) NOT NULL COMMENT '库存', `product_description` varchar(64) DEFAULT NULL COMMENT '描述', `product_icon` varchar(512) DEFAULT NULL COMMENT '小图', `product_status` tinyint(3) DEFAULT '0' COMMENT '商品状态,0正常1下架', `category_type` int(11) NOT NULL COMMENT '类目编号', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;   #订单主表 DROP TABLE IF EXISTS `order_master`; CREATE TABLE `order_master` ( `order_id` varchar(32) NOT NULL, `buyer_name` varchar(32) NOT NULL COMMENT '买家名字', `buyer_phone` varchar(32) NOT NULL COMMENT '买家电话', `buyer_address` varchar(128) NOT NULL COMMENT '买家地址', `buyer_openid` varchar(64) NOT NULL COMMENT '买家微信openid', `order_amount` decimal(8,2) NOT NULL COMMENT '订单总金额', `order_status` tinyint(3) NOT NULL DEFAULT '0' COMMENT '订单状态, 默认为新下单', `pay_status` tinyint(3) NOT NULL DEFAULT '0' COMMENT '支付状态, 默认未支付', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`order_id`), KEY `idx_buyer_openid` (`buyer_openid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;   #订单详情表 DROP TABLE IF EXISTS `order_detail`; CREATE TABLE `order_detail` ( `detail_id` varchar(32) NOT NULL, `order_id` varchar(32) NOT NULL, `product_id` varchar(32) NOT NULL, `product_name` varchar(64) NOT NULL COMMENT '商品名称', `product_price` decimal(8,2) NOT NULL COMMENT '当前价格,单位分', `product_quantity` int(11) NOT NULL COMMENT '数量', `product_icon` varchar(512) DEFAULT NULL COMMENT '小图', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`detail_id`), KEY `idx_order_id` (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;   #卖家信息表 DROP TABLE IF EXISTS `seller_info`; CREATE TABLE `seller_info` ( `seller_id` varchar(32) NOT NULL, `username` varchar(32) NOT NULL, `password` varchar(32) NOT NULL, `openid` varchar(64) NOT NULL COMMENT '微信openid', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`seller_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='卖家信息表';

三、日志的配置使用

1:logback配置

resources目录下创建logback-spring.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?> <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --> <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --> <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> <configuration scan="true" scanPeriod="10 seconds">   <!--定义上下文--> <contextName>springboot_logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> <property name="log.path" value="D:/logs/" />   <!--输出到控制台--> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>trace</level> </filter> <encoder> <!--输出格式,调用变量--> <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] [%thread] --%mdc{client} %msg%n</pattern> <!-- 设置字符集 --> <charset>UTF-8</charset> </encoder> </appender>   <!--输出到文件--> <!-- 时间滚动输出 level为 DEBUG 日志 --> <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_debug.log</file> <!--日志文件输出格式--> <encoder> <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] [%thread] --%mdc{client} %msg%n</pattern> <charset>UTF-8</charset> <!-- 设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志归档 --> <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录debug级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>   <!-- 时间滚动输出 level为 INFO 日志 --> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_info.log</file> <!--日志文件输出格式--> <encoder> <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] [%thread] --%mdc{client} %msg%n</pattern> <charset>UTF-8</charset> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天日志归档路径以及格式 --> <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录info级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>   <!-- 时间滚动输出 level为 WARN 日志 --> <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_warn.log</file> <!--日志文件输出格式--> <encoder> <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] [%thread] --%mdc{client} %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录warn级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>     <!-- 时间滚动输出 level为 ERROR 日志 --> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在记录的日志文件的路径及文件名 --> <file>${log.path}/log_error.log</file> <!--日志文件输出格式--> <encoder> <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] [%thread] --%mdc{client} %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录ERROR级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>   <!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root>   </configuration>

2:logback的使用

第一种:

//导入的包必须是org.slf4j下的 import org.slf4j.Logger;   public class LogTest { //声明logger public Logger logger = LoggerFactory.getLogger(LogTest.class); @Test public void test1(){ logger.debug(""); logger.info("info......."); logger.error("error.......");   String name = "menghaibin"; String pwd = "123456"; //变量输出 logger.info("姓名:{},密码:{}",name,pwd); } }

第二种: 
在pom文件中加入lombok依赖

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency>

在使用日志的类上加入@Slf4j注解

import lombok.extern.slf4j.Slf4j; Slf4j public class LogTest { @Test public void test1(){ /*如果log报错,参考https://blog.csdn.net/weixin_42213903/article/details/101036090进行设置*/ String name = "menghaibin"; String pwd = "123456"; log.info("姓名:{},密码:{}",name,pwd); } }

四、lombok插件安装

Alt text

五、application初期配置

server: port: 80 #端口 context-path: /sell #项目名称路径   spring: datasource: driver-class-name: com.mysql.jdbc.Driver #数据库驱动 username: root #数据库用户名 password: 123456 #密码 url: jdbc:mysql://192.168.1.106/sell?characterEncoding=utf-8&useSSL=false #url jpa: show-sql: true #开启sql打印

六、创建全局Exception类

1:Exception类 
com\imooc\exception\SellException.java

package com.imooc.exception;   import com.imooc.vo.enums.ResultEnum; import lombok.Getter;   /** * @author: menghaibin * @create: 2020-02-10 21:53 * @description: 异常处理类 **/ Getter public class SellException extends RuntimeException{   private Integer code;   public SellException(ResultEnum resultEnum){ super(resultEnum.getMsg()); this.code = resultEnum.getCode(); }   public SellException(Integer code,String msg){ super(msg); this.code = code; } }

2:异常消息类【enums类型】 
com\imooc\vo\enums\ResultEnum.java

package com.imooc.vo.enums; import lombok.Getter;   /** * @author: menghaibin * @create: 2020-02-10 21:49 * @description: 异常处理枚举类 **/ Getter public enum ResultEnum {   SUCCESS(0,"成功"), PARAM_ERROR(1,"参数不正确"), PRODUCT_NOT_EXIST(10,"商品不存在"), PRODUCT_STOCK_ERROR(11,"库存不正确"), ORDER_NOT_EXIST(12,"订单不存在"), ORDERDETAIL_NOT_EXIST(13,"订单详细不存在"), ORDER_STATUS_ERROR(14,"订单状态不正确"), ORDER_UPDATE_ERROR(15,"订单更新失败"), ORDER_DETAIL_EMPTY(16,"订单详细为空"), ORDER_PAY_STATUS_ERROR(17,"订单支付状态不正确"), CART_EMPTY(18,"购物车不能为空"), ORDER_OWNER_ERROR(19,"该订单不属于当前用户"), WXPAY_ERROR(20,"微信支付异步通知金额校验不通过"), CATEGORY_NOT_EXIST(21,"类目不存在"), LOGIN_FAIL(22,"登录验证失败 没有这个用户"), LOGOUT_SUCCESS(23,"登出成功"), ; private Integer code; private String msg;   ResultEnum(Integer code, String msg) { this.code = code; this.msg = msg; } }

标签:COMMENT,product,varchar,log,DEFAULT,微信,点餐,NULL,springboot
来源: https://www.cnblogs.com/jinrf/p/12461369.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有