`

项目搭建记录

阅读更多
#JPA findAll方法,如何将Entity 转为 Dto
#rest风格,新增和更新,区别post,put
#mysql中id的自动生成
#API安全
#如果加上,创建时间和更新时间。  那么在响应操作时,应主动触发修改该字段
#如果加上,是否有效。  那么在查询时,应主动过滤无效
#时间格式转化
#配置SwaggerUI为默认入口
#返回值格式考虑
#异常处理
#ddl默认用utf-8
#swaggerUI时间格式修改
#修改数据状态时,首先check是否存在
#集成redis
#考虑不用Dto,直接通过jsonIgnore或者其他方式过滤掉隐藏属性
------------------------------------------------------------------
*列表分页
*查询条件处理
*熟悉JPA的使用
调用示例
数据初始化
调出Druid面板
更新保存&添加保存,考虑调用方式
-----------------------------------------------------
    <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <springfox.version>2.7.0</springfox.version>
        <!-- skip maven unit test -->
        <maven.test.skip>true</maven.test.skip>
    </properties>

<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR4</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>${commons-lang3.version}</version>
      </dependency>
       <!-- druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
        <!--JPA-->
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.6</version>
        </dependency>
        <!-- MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox.version}</version>
        </dependency>

        <!--json support LocalDate-->
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-parameter-names</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jdk8</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
        </dependency>

        <!--eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

    </dependencies>

    <build>
        <finalName>xxx-api-petStore</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>api.xxx.com.petstore.PetStoreAPIApplication</mainClass>
                    <classifier>exec</classifier>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
            </plugin>
        </plugins>
    </build>
</project>


# server
server:
  port: 9124
# spring
spring:
#profiles
  profiles:
    active: dev
#jackson
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss

#datasource
  datasource:
    # driver config
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    # connection pool config
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    filters: stat,wall,log4j
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#jpa
  jpa:
    database-platform: api.xxx.com.petstore.config.MySQL5DialectUTF8
#redis
  redis:
    pool:
      max-idle: 8
      min-idle: 0
      max-active: 8
      max-wait: -1

#mybatis
mybatis:
  type-aliases-package: api.xxx.com.petstore.entity
  mapper-locations: classpath*:/sqlMapperXml/*.xml
  configuration:
    map-underscore-to-camel-case: true
    use-generated-keys: true
    default-fetch-size: 100
    default-statement-timeout: 25000
    cache-enabled: true
    aggressive-lazy-loading: true
    lazy-loading-enabled: false



spring:
#datasource
  datasource:
    url: jdbc:mysql://192.168.0.105:3306/db_petstore?useUnicode=yes&characterEncoding=UTF-8
    username: xxx
    password: xxx
#jpa
  jpa:
#    hibernate:
#      ddl-auto: create
    show-sql: true
#redis
  redis:
    database: 4
    host: 192.168.0.123
    password: xxx
#    host: 127.0.0.1
    port: 6379
#mybatis
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<!-- 使用 mvn mybatis-generator:generate -->
<generatorConfiguration>
    <properties resource="application-dev.yml"/>
    <classPathEntry location="E://maven_repository/mysql/mysql-connector-java/5.1.42/mysql-connector-java-5.1.42.jar" />
    <context id="tables" targetRuntime="MyBatis3" defaultModelType="flat">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://192.168.0.103:3306/db_petstore?useUnicode=yes&amp;characterEncoding=UTF-8"
            userId="xxx"
            password="xxx">
        </jdbcConnection>
        <javaModelGenerator targetPackage="api.xxx.com.petstore.vo"
                            targetProject="src/main/java">
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="sqlMapperXml"
                         targetProject="src/main/resources">
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="api.xxx.com.petstore.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- schema:指定dao文件所属分类文件夹| doaminObjectName:指定生成对象名  -->
        <table schema="" tableName="sales_order" domainObjectName="SalesOrder" selectByExampleQueryId="false"
               enableCountByExample="false"
               enableDeleteByExample="false"
               enableUpdateByExample="false"
               enableSelectByExample="false">
            <generatedKey column="id" sqlStatement="assigned" identity="true"/>
        </table>
    </context>
</generatorConfiguration>


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <contextName>logback</contextName>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/data/logs/restapi-petstore/restapi-petstore.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- keep 90 days' worth of history -->
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
            <!--<maxFileSize>10MB</maxFileSize>-->
        <!--</triggeringPolicy>-->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} H:${HOSTNAME} - SC:%X{optionalParam} %msg%n</pattern>
            <charset>UTF-8</charset>
            <immediateFlush>true</immediateFlush>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="file" />
    </root>
   
</configuration>

==========================

@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name="system-uuid",strategy = "uuid")
    @Column(name = "id", length = 32)
    private String id;

    @CreatedDate
    @JsonFormat(pattern = DateUtils.FORMAT_DATE_TIME)
    private Date createdDate;

    @LastModifiedDate
    @JsonFormat(pattern = DateUtils.FORMAT_DATE_TIME)
    private Date modifiedDate;

    @Column(name = "is_active")
    @JsonIgnore
    private boolean isActive = true;
}


=================================================
configs of java file
=================================================
public class MySQL5DialectUTF8 extends MySQL5InnoDBDialect {

    @Override
    public String getTableTypeString() {
        return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
    }
}

@Configuration
@EnableJpaAuditing
@EnableTransactionManagement
@EnableSpringDataWebSupport
@MapperScan("api.xxx.com.petstore.mapper")
public class AppConfig {

    @Bean
    public PageHelper pageHelper() {
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        p.setProperty("dialect", "mysql");
        p.setProperty("supportMethodsArguments", "true");
        p.setProperty("autoRuntimeDialect", "true");
        p.setProperty("offsetAsPageNum", "true");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        p.setProperty("returnPageInfo", "always");
        p.setProperty("params", "count=countSql");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    @SuppressWarnings("deprecation")
    public Docket petStoreApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(petStoreApiInfo())
                .useDefaultResponseMessages(false)
                .select()
                .apis( input -> {
                    Class<?> declaringClass = input.declaringClass();
                    String pkg = declaringClass.getPackage().getName();
                    if(!pkg.matches("api.xxx.com.petstore.*")) //非本项目,排除
                        return false;
                    if (declaringClass == BasicErrorController.class)// 排除
                        return false;
                    if(declaringClass.isAnnotationPresent(RestController.class)) // 被注解的类
                        return true;
                    if(input.isAnnotatedWith(ResponseBody.class)) // 被注解的方法
                        return true;
                    return false;
                })
                .build();
    }

    private ApiInfo petStoreApiInfo() {
        return new ApiInfoBuilder()
                .title("xxx后台API")
                .description("xxx后台接口支持")
                .version("1.0")
                .contact(new Contact("xxxChengdu RD", "http://xxx.com", "cd@xxx.com"))
                .build();
    }
}


@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addRedirectViewController("/", "/swagger-ui.html");
    }
}



分享到:
评论

相关推荐

    Net5.0 项目搭建.docx

    在.NET 5项目搭建过程中,理解项目结构、依赖管理以及配置文件的使用至关重要,它们构成了应用程序的基础架构。随着项目的进展,你可能还需要考虑单元测试、错误处理、日志记录等高级话题,以确保项目的稳定性和可...

    SpringBoot多模块项目框架搭建过程解析

    SpringBoot 多模块项目框架搭建过程解析 SpringBoot 多模块项目框架搭建过程解析是指使用 SpringBoot 框架来搭建多模块项目的过程。该过程主要涉及到项目结构的设计、模块之间的依赖关系、配置文件的设置等方面。在...

    ssm项目框架搭建(springmvc+spring+mybatis)

    SSM项目框架搭建,即Spring MVC、Spring和MyBatis三者的集成,是Java Web开发中常见的技术栈。这三个框架的结合提供了强大的功能,能够帮助开发者高效地构建可维护、可扩展的Web应用。 首先,Spring MVC是Spring...

    搭建微服务项目.doc

    搭建微服务项目 在本资源中,我们将讨论搭建微服务项目的详细过程,包括搭建Eureka、Feign、公共模块等微服务架构的各个组件。微服务架构是一种软件架构风格,它将应用程序拆分成多个小型独立的服务,各服务可以...

    crm项目框架搭建和功能设计

    在这个项目中,我们基于SSH框架进行了CRM项目的框架搭建和功能设计。SSH框架,即Struts、Spring、Hibernate三个开源组件的组合,是Java Web开发中的常用框架。 1. Struts:这是一个MVC(Model-View-Controller)...

    Python项目事件记录系统源码.zip

    Python项目事件记录系统 内部项目较多,但管理较为混乱。各个干系人之间也不了解其余项目干系人对项目的推进情况。 功能设计 有人员管理,能够新增人员 能够修改人员 有权限管理,控制谁能新增项目,谁能管理项目,...

    springBoot项目搭建Demo.7z

    SpringBoot旨在简化Spring应用的初始搭建以及开发过程。它默认配置了很多常见功能,如嵌入式Tomcat服务器、自动配置Spring beans、健康检查端点等。开发者只需要通过`@SpringBootApplication`注解即可启动一个Spring...

    书城项目搭建

    【书城项目搭建】是一个基于J2EE技术的电子商务平台,主要涵盖了前端用户界面和后台管理系统两大部分。项目首先从导入原型开始,创建一个名为`goods`的Web项目,将包含前端页面的webroot和src目录复制到项目中,并...

    从零开始搭建一个react项目开发

    这个文件记录了项目的元数据,包括项目名称、版本号、作者、依赖项等信息。 二、安装依赖项 在生成package.json文件后,需要安装各种依赖项,包括React、React Dom、Webpack、Babel等。这些依赖项是 React 项目的...

    S2SH项目搭建

    【S2SH项目搭建】是关于使用Struts2、Spring和Hibernate这三大开源框架整合构建Web应用程序的过程。这个项目搭建涉及的技术栈广泛,涵盖了前端控制器、业务层管理和数据持久化等多个层面,对于初学者和开发者来说,...

    乐优项目搭建.rar

    "乐优项目搭建.rar"是一个压缩包文件,其主要目的是提供一个基础的项目构建框架。在IT行业中,项目搭建是开发过程的初期阶段,它涉及到环境配置、项目结构设计、依赖管理等多个方面。这里,我们将深入探讨这个"乐优...

    Idea搭建EJB架构Demo项目源代码

    【标题】"Idea搭建EJB架构Demo项目源代码"涉及的是使用IntelliJ IDEA(简称Idea)这个强大的Java集成开发环境来构建一个基于EJB(Enterprise JavaBeans)架构的示例项目。EJB是Java EE(企业版)平台的核心部分,...

    从零搭建SSM项目

    **四、SSM项目搭建步骤** 1. **环境准备**:安装JDK、Maven、IDE(如IntelliJ IDEA)、MySQL数据库等。 2. **创建Maven项目**:使用Maven的pom.xml文件管理项目依赖。 3. **引入SSM依赖**:在pom.xml中添加Spring、...

    Android项目页面框架搭建.rar

    在这个名为"Android项目页面框架搭建.rar"的压缩包中,我们看到的是一款基于Android Studio的算卦应用的源代码。这个项目不仅提供了完整的代码结构,还可以直接运行,对于学习或快速搭建类似应用的开发者来说,是一...

    ElementUI项目搭建示例.zip

    ElementUI项目搭建示例是一个基于Vue.js框架的前端开发项目,它使用了ElementUI作为主要的用户界面组件库。这个项目旨在提供一个基础的结构,帮助开发者快速地启动一个新的Vue项目,利用ElementUI进行界面设计和开发...

    Koa项目搭建过程详细记录

    Koa项目搭建过程详细记录 本篇文章主要介绍了Koa项目搭建过程的详细记录,从项目搭建到常用中间件的介绍,再到路由控制的开发。下面是详细的知识点记录: 一、Koa项目搭建 Koa项目搭建过程可以使用koa-generator...

    ssm基于注解的项目搭建

    在“ssm基于注解的项目搭建”中,我们主要会涉及到以下几个关键知识点: 1. **Spring框架**:Spring是Java企业级应用的核心框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,通过管理对象的生命周期和...

    004项目搭建对应源代码

    【标题】"004项目搭建对应源代码" 涉及的是一个具体的软件或插件开发项目,可能是一个教学序列的一部分,旨在帮助学习者理解如何构建和组织一个项目的源代码结构。在软件开发中,良好的项目搭建是至关重要的,因为它...

Global site tag (gtag.js) - Google Analytics