}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
}
CommonResult
package com.common.api;
/**
-
通用返回对象
-
Created by macro on 2019/4/19.
*/
public class CommonResult {
private long code;
private String message;
private T data;
protected CommonResult() {
}
protected CommonResult(long code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
/**
-
成功返回结果
-
@param data 获取的数据
*/
public static CommonResult success(T data) {
return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
}
/**
-
成功返回结果
-
@param data 获取的数据
-
@param message 提示信息
*/
public static CommonResult success(T data, String message) {
return new CommonResult(ResultCode.SUCCESS.getCode(), message, data);
}
/**
-
失败返回结果
-
@param errorCode 错误码
*/
public static CommonResult failed(IErrorCode errorCode) {
return new CommonResult(errorCode.getCode(), errorCode.getMessage(), null);
}
/**
-
失败返回结果
-
@param message 提示信息
*/
public static CommonResult failed(String message) {
return new CommonResult(ResultCode.FAILED.getCode(), message, null);
}
/**
- 失败返回结果
*/
public static CommonResult failed() {
return failed(ResultCode.FAILED);
}
/**
- 参数验证失败返回结果
*/
public static CommonResult validateFailed() {
return failed(ResultCode.VALIDATE_FAILED);
}
/**
-
参数验证失败返回结果
-
@param message 提示信息
*/
public static CommonResult validateFailed(String message) {
return new CommonResult(ResultCode.VALIDATE_FAILED.getCode(), message, null);
}
/**
- 未登录返回结果
*/
public static CommonResult unauthorized(T data) {
return new CommonResult(ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getMessage(), data);
}
/**
- 未授权返回结果
*/
public static CommonResult forbidden(T data) {
return new CommonResult(ResultCode.FORBIDDEN.getCode(), ResultCode.FORBIDDEN.getMessage(), data);
}
public long getCode() {
return code;
}
public void setCode(long code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
IErrorCode
package com.common.api;
/**
-
封装API的错误码
-
Created by macro on 2019/4/19.
*/
public interface IErrorCode {
long getCode();
String getMessage();
}
ResultCode
package com.common.api;
/**
-
枚举了一些常用API操作码
-
Created by macro on 2019/4/19.
*/
public enum ResultCode implements IErrorCode {
SUCCESS(200, “操作成功”),
FAILED(500, “操作失败”),
VALIDATE_FAILED(404, “参数检验失败”),
UNAUTHORIZED(401, “暂未登录或token已经过期”),
FORBIDDEN(403, “没有相关权限”);
private long code;
private String message;
private ResultCode(long code, String message) {
this.code = code;
this.message = message;
}
public long getCode() {
return code;
}
public String getMessage() {
return message;
}
}
创建子工程,maven工程,作为数据层项目
=====================
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
com.java.lzw
generator
1.0-SNAPSHOT
jar
generator
generator project for lzwmall
com.java.lzw
common
1.0-SNAPSHOT
org.mybatis.generator
mybatis-generator-core
1.3.3
org.mybatis
mybatis
3.4.6
mysql
mysql-connector-java
8.0.15
generator的项目架构
CommentGenerator
package com.generator;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;
import java.util.Properties;
/**
-
自定义注释生成器
-
Created by macro on 2018/4/26.
*/
public class CommentGenerator extends DefaultCommentGenerator {
private boolean addRemarkComments = false;
private static final String EXAMPLE_SUFFIX=“Example”;
private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME=“io.swagger.annotations.ApiModelProperty”;
/**
- 设置用户配置的参数
*/
@Override
public void addConfigurationProperties(Properties properties) {
super.addConfigurationProperties(properties);
this.addRemarkComments = StringUtility.isTrue(properties.getProperty(“addRemarkComments”));
}
/**
- 给字段添加注释
*/
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
String remarks = introspectedColumn.getRemarks();
//根据参数和备注信息判断是否添加备注信息
if(addRemarkComments&&StringUtility.stringHasValue(remarks)){
// addFieldJavaDoc(field, remarks);
//数据库中特殊字符需要转义
if(remarks.contains(“”")){
remarks = remarks.replace(“”“,”'");
}
//给model的字段添加swagger注解
field.addJavaDocLine(“@ApiModelProperty(value = “”+remarks+”“)”);
}
}
/**
- 给model的字段添加注释
*/
private void addFieldJavaDoc(Field field, String remarks) {
//文档注释开始
field.addJavaDocLine(“/**”);
//获取数据库字段的备注信息
String[] remarkLines = remarks.split(System.getProperty(“line.separator”));
for(String remarkLine:remarkLines){
field.addJavaDocLine(" * "+remarkLine);
}
addJavadocTag(field, false);
field.addJavaDocLine(" */");
}
@Override
public void addJavaFileComment(CompilationUnit compilationUnit) {
super.addJavaFileComment(compilationUnit);
//只在model中添加swagger注解类的导入
if(!compilationUnit.isJavaInterface()&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){
compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
}
}
}
Generator
package com.generator;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
-
用于生产MBG的代码
-
Created by macro on 2018/4/26.
*/
public class Generator {
public static void main(String[] args) throws Exception {
//MBG 执行过程中的警告信息
List warnings = new ArrayList();
//当生成的代码重复时,覆盖原代码
boolean overwrite = true;
//读取我们的 MBG 配置文件
InputStream is = Generator.class.getResourceAsStream(“/generatorConfig.xml”);
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码
myBatisGenerator.generate(null);
//输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}
generator.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=123456
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?><jdbcConnection driverClass=“${jdbc.driverClass}”
connectionURL=“${jdbc.connectionURL}”
userId=“${jdbc.userId}”
password=“${jdbc.password}”>
<javaClientGenerator type=“XMLMAPPER” targetPackage=“com.generator.mapper”
targetProject=“generator\src\main\java”/>
如果你不想连接我的数据库,可以将generator.properties中的数据连接改为你自己的,到时运行Generator中的main方法,生成你自己的数据文件
创建一个Springboot子工程,作为门户,网站前台给用户看的,修改pom.xml
==========================================
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
com.java.lzw
poral
1.0-SNAPSHOT
jar
poral
poral project for lzwmall
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
true
com.java.lzw
lzwmall
1.0-SNAPSHOT
…/
com.java.lzw
generator
1.0-SNAPSHOT
net.logstash.logback
logstash-logback-encoder
4.8
org.springframework.boot
spring-boot-maven-plugin
poral的项目架构
config中的MyBatisConfig
package com.java.lzw.poral.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
-
MyBatis配置类
-
Created by macro on 2019/4/8.
*/
@Configuration
@EnableTransactionManagement
@MapperScan({“com.generator.mapper”,“com.java.lzw.poral.dao”})//第一个参数对应generator项目的mapper接口,第二个参数对应本项目自定义的dao(mapper)层接口
public class MyBatisConfig {
}
config中的SwaggerConfig
package com.java.lzw.poral.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(“com.java.lzw.poral.controller”))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(“商城前台系统”)
.description(“商城前台系统”)
.contact(“lzw”)
.version(“1.0”)
.build();
}
}
controller中的DemoController
package com.java.lzw.poral.controller;
import com.generator.model.OmsOrder;
import com.java.lzw.poral.service.OmsOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Api(description = “测试接口”)
@Controller
@RequestMapping(“/demoController”)
public class DemoController {
@Autowired
private OmsOrderService omsOrderService;
@ApiOperation(“测试”)
@RequestMapping(value = “/mail”, method = RequestMethod.GET)
@ResponseBody
public List sendMail() {
List orderList = omsOrderService.getOrderInfo();
return orderList;
}
}
dao层是你自定义的mapper接口,我这边只是做一个测试先没有写
service层的OmsOrderService
package com.java.lzw.poral.service;
import com.generator.model.OmsOrder;
import java.util.List;
public interface OmsOrderService {
List getOrderInfo();
}
service.impl层的
package com.java.lzw.poral.service.impl;
import com.generator.mapper.OmsOrderMapper;
最后总结
ActiveMQ+Kafka+RabbitMQ学习笔记PDF
关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦
er")
public class DemoController {
@Autowired
private OmsOrderService omsOrderService;
@ApiOperation(“测试”)
@RequestMapping(value = “/mail”, method = RequestMethod.GET)
@ResponseBody
public List sendMail() {
List orderList = omsOrderService.getOrderInfo();
return orderList;
}
}
dao层是你自定义的mapper接口,我这边只是做一个测试先没有写
service层的OmsOrderService
package com.java.lzw.poral.service;
import com.generator.model.OmsOrder;
import java.util.List;
public interface OmsOrderService {
List getOrderInfo();
}
service.impl层的
package com.java.lzw.poral.service.impl;
import com.generator.mapper.OmsOrderMapper;
最后总结
ActiveMQ+Kafka+RabbitMQ学习笔记PDF
[外链图片转存中…(img-sT1vWuXm-1714382328146)]
[外链图片转存中…(img-KBUSHCyA-1714382328147)]
[外链图片转存中…(img-nKOjRYLr-1714382328147)]
[外链图片转存中…(img-lzPF79Na-1714382328147)]
关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦