java程序员怎么创建自己的网站:第四章:做个网站引入广告赚点小钱(1)

}

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

image.png

  • RabbitMQ实战指南

image.png

  • 手写RocketMQ笔记

image.png

  • 手写“Kafka笔记”

image

关于分布式,限流+缓存+缓存,这三大技术(包含: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)]

  • RabbitMQ实战指南

[外链图片转存中…(img-KBUSHCyA-1714382328147)]

  • 手写RocketMQ笔记

[外链图片转存中…(img-nKOjRYLr-1714382328147)]

  • 手写“Kafka笔记”

[外链图片转存中…(img-lzPF79Na-1714382328147)]

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值