精华内容
下载资源
问答
  • 很多人好奇maven用的好好的为什么切换到gradle? Spring Boot 团队给出的主要原因是,迁移至 Gradle 可以减少构建项目所花费的时间。 而 Gradle 的宗旨是减少构建工作量,它可以根据需要构建任何有变化的地方或者...

    前言

    很多人好奇maven用的好好的为什么切换到gradle?
    Spring Boot 团队给出的主要原因是,迁移至 Gradle 可以减少构建项目所花费的时间
    而 Gradle 的宗旨是减少构建工作量,它可以根据需要构建任何有变化的地方或者并行构建。当然,Spring Boot 团队也花了很多时间来尝试用 Maven 进行 并行构建,但因为构建 Spring Boot 项目的复杂性,最终失败了。
    另外,Spring Boot 团队也看到了在其他 Spring 项目中使用 Gradle 以及并行构建所带来的提升,并且还可以使用 Gradle 在一些第三方项目上的构建缓存,这些优势都促使 Gradle 带到构建 Spring Boot 项目中来。
    以下是springboot 官方给的maven构建时间对比:
    在这里插入图片描述
    Spring Boot 官方也给出了数据,一次完整的 Maven 项目构建一般需要一个小时或者以上,而在过去的 4 周时间内,使用 Gradle 构建的平均时间只用了 9 分 22 秒!!!

    对现有项目的已影响

    很多小伙伴可能要说,既然springboot的趋势是想切换的到gradle来,那么我目前手中的项目是用maven构建的,有何影响?
    虽然官方已经支持gradle了,但是目前使用的maven构建项目仍然可以继续使用,没有任何影响。但小编鼓励大家尝试下gradle,或许你会像当初从eclipse转idea一样,爱上gradle了。

    springboot 使用gradle步骤

    一. 安装gradle:

    gradle -v
    

    二. idea 新建gradle项目

    1. 新建gradle项目:
      在这里插入图片描述
    2. 点击finish
      在这里插入图片描述
    3. 点击idea 默认识别的帮助:OK(idea自动下载构建)
      在这里插入图片描述
      在这里插入图片描述
    展开全文
  • idel maven创建springboot

    2020-07-18 11:20:52
    最近在从新学习spring的注解,打算用IDEA创建一个springboot的简单项目,下面来记录一下创建过程 1.创建过程百度了一下,有两种方式,第一种是maven创建,第二种是spring Initializr 先说第二种方式,因为我的网络...

     

    最近在从新学习spring的注解,打算用IDEA创建一个springboot的简单项目,下面来记录一下创建过程

    1.创建过程百度了一下,有两种方式,第一种是maven创建,第二种是spring Initializr 

    先说第二种方式,因为我的网络比较慢,而且本地JDK环境是7,所以直接放弃掉了

    下面直接说第一种方式

     1.1创建项目

     

    第三步

    第四步

    这个就算是把项目创建成功啦,然后进入项目

    先别着急进入项目,首先把maven先配置好,maven配置不好的话,很容易变成springboot从入门到放弃

    maven不建议使用3.6.2以上的,我的IDEA是2018.3.2的刚开始使用的maven是3.6.3,版本不兼容,一直报错,调整了半天不报错了,但是

    SpringApplication.run(StartProject.class,args);

    这行代码一直报红,提示找不到包,当时差点直接放弃了

    我把maven版本换成了3.5.4之后就没这个问题

    接下来就是网上比较常见的pom.xml设置,以及启动类

     

    接下来就是启动成功的截图啦啦啦啦

    对了,忘了说启动的方式,启动的方式比较简单,直接右键Run就行啦

    展开全文
  • 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Spring MVC+Mybatis),但是发现配置实在过于复杂,好多东西配置起来麻烦,虽然最终是配置出来了,但是还是感觉开发速度跟...同时我也不愿意放弃SpringMVC强大的

    转载:http://www.tuicool.com/articles/nimYfea

    前言

    最近做回后台开发,重新抓起以前学过的SSM(Spring+Spring MVC+Mybatis),但是发现配置实在过于复杂,好多东西配置起来麻烦,虽然最终是配置出来了,但是还是感觉开发速度跟不上,本来打算切换到jfianl,但是后来发现需要用的几个框架不支持jfianl,如Swagger2(根据代码中的注解生成接口文档和测试页面,非常的方便);同时我也不愿意放弃SpringMVC强大的验证参数模块,jfianl中好像只能手动验证(当然我对jfianl只处于简单的开发,并不是特别熟),而SpringMVC中,直接就能通过注解来确定哪些参数是必须的,哪些不是必须的,这对于写接口的人来说,方便了很多,所以决定还是使用Spring家族的东西,下面先一一介绍下本文的主角们

    Spring boot

    spring-boot是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者

    多年以来, Spring IO 平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理。在2013年的 SpringOne 2GX 会议上,Pivotal的CTO Adrian Colyer回应了这些批评,并且特别提到该平台将来的目标之一就是实现免XML配置的开发体验。Boot所实现的功能超出了这个任务的描述,开发人员不仅不再需要编写XML,而且在一些场景中甚至不需要编写繁琐的import语句。在对外公开的beta版本刚刚发布之时,Boot描述了如何使用该框架在140个字符内实现可运行的web应用,从而获得了极大的关注度,该样例发表在 tweet 上

    当然上面又是我抄过来的,因为我觉得要我去介绍一个框架是什么的时候,我只会说我的理解,但是我的理解不能让大家知道它的背景,所以抄了上面那段,那么下面就是我理解的Spring boot是个什么东西

    无需繁琐配置的Spring集合包Spring boot本身并不是什么新的框架,它可以说只是Spring大家族的一个集合包,当然这个集合包吧基础的配置都给我配置好了,我们无需再进行繁琐的xml配置,甚至是都不用配置web.xml,因为spring boot内部自己集成了一个tomcat,直接通过run的方式就能启动,打包也一样,都可以不用部署tomcat了,当然是针对小项目,大项目肯定是要对中间件进行一些优化的

    Mybatis

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。当然我个人更倾向用注解,因为实在是不怎么喜欢配置xml,尤其是eclipse经常因为xml的一些问题卡主,导致编译要等xml验证通过后才能编译,而我用Mybatis最主要的地方就是因为不用像JDBC那样自己一个属性一个属性来赋值

    Druid

    Druid是一个JDBC组件,它包括三部分:

    DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。

    DruidDataSource 高效可管理的数据库连接池。

    SQLParser

    Druid可以做什么?

    1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

    2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

    3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

    4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

    扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

    其实说简单点Druid就是一个 功能强大,性能优秀的数据库连接池 ,是由阿里巴巴的大牛们开发的,除了性能好之外,我最喜欢的就是它的监控功能了,连github上的说明都是“为监控而生的数据库连接池!”

    Swagger2

    关于 Swagger的介绍和非代码搭建 ,在之前的文章已经说过了,不过这里的Swagger2只是版本号为2而已,很多核心的东西都没怎么变化,当然如果不用和代码封装在一起,也可以参考 Swagger的介绍和非代码搭建 ,不过本文主要讲述在代码中集成,所以不再过多描述

    mybatis-generator

    mybatis-generator是用来根据数据自动生成实体bean和一些常规查询语句的插件,有了这个就不用再一个一个实体bean来写了,而且普通的查询也可以使用自动生成sql语句查询出来

    开始搭建

    一、创建项目

    首先创建一个maven项目,当然最好创建maven-archetype-webapp,原因无他,主要是因为很多时候我还是需要把项目部署到优化过配置的tomcat获取其他容器中,当然也可以创建普通的maven项目

    二、添加依赖

    <!-- Springboot -->  
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <!-- Springboot 热部署 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
            <!-- Swagger API文档 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.2.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.2.2</version>
            </dependency>
            <!-- Mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
            <!-- druid阿里巴巴数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.26</version>
            </dependency>
            <!-- MySql数据库驱动 -->
            <dependency>
                <groupId> mysql</groupId>
                <artifactId> mysql-connector-java</artifactId>
                <version> 5.0.5</version>
            </dependency>

    其中spring-boot-devtools不是必须,只是如果你想在运行的时候,修改了代码能自动更新,而不用手动重启,就需要加上

    三、添加Applcation类

    这个就是程序的入口类了,代码如下

    package wang.raye.springboot;
    
    import org.mybatis.spring.annotation.MapperScan;  
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;  
    import org.springframework.boot.web.servlet.ServletComponentScan;  
    import org.springframework.boot.web.support.SpringBootServletInitializer;
    
    /**
     * 
     * 
     * @author Raye
     * @since 2016年10月9日22:22:31
     */
    @MapperScan("wang.raye.springboot.model.mapper")
    @SpringBootApplication
    @ServletComponentScan
    public class Application extends SpringBootServletInitializer {  
        public static void main(String[] args) {
            SpringApplication.run(Application.class);
    
        }
    
    }

    想要运行项目时可以直接运行此类就可以,如你所见,其中有main方法,所以可以直接运行

    下面说说3个注解的含义

    @MapperScan("wang.raye.springboot.model.mapper"),扫描wang.raye.springboot.model.mapper下面的mapper接口,其中mapper下面的接口是由mybatis-generator自动生成的,会在后面细说,现在就先知道是个什么东西就行了 @SpringBootApplication 很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的 @SpringBootApplication 选择。该 @SpringBootApplication 注解等价于以默认属性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan

    @ServletComponentScan有此注解后,项目中如果需要使用java原生的servlet和filter,可以在类中使用注解实现,主要是配置Druid监控时需要用到

    四、创建配置文件

    虽然spring boot可以不用配置xml,但是也并不是完全不需要配置文件,当然不用配置文件也能跑起来,只是有配置文件我们可以配置很多东西,只是不用像以前xml那么麻烦,首先需要在resource文件夹下面创建application.yml文件

    server:  
      port: 80
    spring:  
      application:
        name: admin-managee
      datasource:
        url: jdbc:mysql://192.168.157.133:3306/springboot
        username: raye
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
              max-active: 20
              initial-size: 1
              min-idle: 3
              max-wait: 60000
              time-between-eviction-runs-millis: 60000
              min-evictable-idle-time-millis: 300000
              test-while-idle: true
              test-on-borrow: false
              test-on-return: false
    
    
    debug: true

    相信这个文件很容易看懂,首先server:下面的port:80这个是定义了运行的端口,之前说过spring boot内置了tomcat服务器,所以如果要使用内置的tomcat并且不想用8080端口,就需要在这里配置

    下面就是datasource的配置,这样不写进代码有个好处,那就是如果是给客户用的程序,可以很方便的修改数据库配置,而不用重新编译,当然如果你是打包jar我估计是要重新编译的,如果是war,那么就可以解压出来直接修改application.yml而不用重新编译了

    而debug:true就是说明当时是调试状态,这样就会输出很多log

    五、创建Druid数据源配置类

    package wang.raye.springboot.config;
    
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.springframework.boot.bind.RelaxedPropertyResolver;  
    import org.springframework.context.EnvironmentAware;  
    import org.springframework.context.annotation.Bean;  
    import org.springframework.context.annotation.Configuration;  
    import org.springframework.core.env.Environment;  
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    import com.alibaba.druid.pool.DruidDataSource;  
    @Configuration  
    @EnableTransactionManagement 
    /**
     * Druid的DataResource配置类
     * @author Raye
     * @since 2016年10月7日14:14:18
     */
    public class DruidDataSourceConfig  implements EnvironmentAware {
    
        private RelaxedPropertyResolver propertyResolver;
    
        public void setEnvironment(Environment env) {
            this.propertyResolver = new RelaxedPropertyResolver(env, "spring.datasource.");
        }
    
        @Bean
        public DataSource dataSource() {
            System.out.println("注入druid!!!");
            DruidDataSource datasource = new DruidDataSource();
            datasource.setUrl(propertyResolver.getProperty("url"));
            datasource.setDriverClassName(propertyResolver.getProperty("driver-class-name"));
            datasource.setUsername(propertyResolver.getProperty("username"));
            datasource.setPassword(propertyResolver.getProperty("password"));
            datasource.setInitialSize(Integer.valueOf(propertyResolver.getProperty("initial-size")));
            datasource.setMinIdle(Integer.valueOf(propertyResolver.getProperty("min-idle")));
            datasource.setMaxWait(Long.valueOf(propertyResolver.getProperty("max-wait")));
            datasource.setMaxActive(Integer.valueOf(propertyResolver.getProperty("max-active")));
            datasource.setMinEvictableIdleTimeMillis(Long.valueOf(propertyResolver.getProperty("min-evictable-idle-time-millis")));
            try {
                datasource.setFilters("stat,wall");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return datasource;
        }
    }

    主要是创建一个druid的DruidDataSource 返回并告诉spring boot这是一个bean

    六、创建Druid的监控servlet和filter

    创建监控Servlet

    package wang.raye.springboot.config;
    
    import javax.servlet.annotation.WebInitParam;  
    import javax.servlet.annotation.WebServlet;
    
    import com.alibaba.druid.support.http.StatViewServlet;
    
    /**
     * Druid的Servlet
     * @author Raye
     * @since 2016年10月7日14:13:39
     */
    @SuppressWarnings("serial")
    @WebServlet(urlPatterns = "/druid/*", 
    initParams={  
            @WebInitParam(name="allow",value="127.0.0.1,192.168.1.126"),// IP白名单 (没有配置或者为空,则允许所有访问)
            @WebInitParam(name="deny",value="192.168.1.111"),// IP黑名单 (存在共同时,deny优先于allow)
            @WebInitParam(name="loginUsername",value="Raye"),// 用户名
            @WebInitParam(name="loginPassword",value="123456"),// 密码
            @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
    })
    public class DruidStatViewServlet extends StatViewServlet {
    
    
    }

    @WebServlet表明这是一个Servlet,[email protected]

    创建filter
    package wang.raye.springboot.config;
    
    import javax.servlet.annotation.WebFilter;  
    import javax.servlet.annotation.WebInitParam;
    
    import com.alibaba.druid.support.http.WebStatFilter;
    
    @WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
    initParams={  
        @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
    })
    /**
     * Druid拦截器,用于查看Druid监控
     * @author Raye
     * @since 201610714:59:27
     */
    public class DruidStatFilter extends WebStatFilter {
    
    }

    同样 @WebFilter 表明此类是一个拦截器

    创建好之后,我们访问 http://localhost/druid/index.html,会自动跳到http://localhost/druid/login.html登录页面,登录进去会出现以下界面

    七、配置mybatis

    其实mybatis之前就已经配置好了,就是 Application 类的 @MapperScan("wang.raye.springboot.model.mapper") 注解,这个注解说明了要扫描的mybatis的mapper接口包,当然如果是用xml的话应该还需要其他配置,不过我个人并不喜欢用xml的方式,所以也没有怎么研究

    八、配置mybatis-generator

    配置MyBatis-generator自动生成实体bean,首先需要在pom.xml中添加相关插件依赖,注: 我是用插件的方式来生成实体bean 的,

    <build>  
            <finalName>springboot</finalName>
            <plugins>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.5</version>
                    <dependencies>
                        <!--数据库驱动 -->
                        <dependency>
                            <groupId> mysql</groupId>
                            <artifactId> mysql-connector-java</artifactId>
                            <version> 5.0.5</version>
                        </dependency>
                        <dependency>
                            <groupId>org.mybatis</groupId>
                            <artifactId>mybatis-spring</artifactId>
                            <version>1.2.2</version>
                        </dependency>
    
                        <dependency>
                            <groupId>org.mybatis</groupId>
                            <artifactId>mybatis</artifactId>
                            <version>3.2.4</version>
                        </dependency>
    
    
                    </dependencies>
                    <executions>
                        <execution>
                            <id>Generate MyBatis Artifacts</id>
                            <phase>package</phase>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <!--允许移动生成的文件 -->
                        <verbose>true</verbose>
                        <!-- 是否覆盖 -->
                        <overwrite>true</overwrite>
                        <!-- 自动生成的配置 -->
                        <configurationFile>
                            src/main/resources/mybatis-generator.xml</configurationFile>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <encoding>UTF-8</encoding>
                        <source>1.5</source>
                        <target>1.5</target>
                    </configuration>
                </plugin>
            </plugins>
    
        </build>

    其中除了 springboot 是pom.xml默认的节点外,其他都是配置Mybatis-generator的,当然还有顶部的

    <properties>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <entity.target.dir>src/main/java/</entity.target.dir>
        <dao.resources.dir>src/main/resources/</dao.resources.dir>
    </properties>

    这个是用来在 mybatis-generator.xml 中需要使用的

    下面开始配置mybatis-generator.xml首先在resource文件夹下面创建mybatis-generator.xml文件,然后添加如下配置

    <?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">
    
    <generatorConfiguration>
    
        <context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
            <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
                <property name="searchString" value="[e|E]xample$" />
                <property name="replaceString" value="Criteria" />
            </plugin>
    
        <commentGenerator>
            <property name="suppressDate" value="true" />
        </commentGenerator>
    
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://192.168.157.133:3306/springboot" userId="root"
            password="1993316">
        </jdbcConnection>
    
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
    
        <!-- generate Model -->
        <javaModelGenerator targetPackage="wang.raye.springboot.model"
            targetProject="${entity.target.dir}">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
    
    
    
        <!-- 自动生成xml(但是好像一直没有生成功,反正也不用xml) -->
        <sqlMapGenerator  targetPackage="wang.raye.springboot.model.mapper"
            targetProject="${dao.resources.dir}">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
    
        <!-- 自动生成mapper接口, 可以是 ANNOTATEDMAPPER(注解), XMLMAPPER(xml), MIXEDMAPPER(不知道) -->
        <javaClientGenerator type="ANNOTATEDMAPPER"
            targetPackage="wang.raye.springboot.model.mapper" implementationPackage="wang.raye.springboot.model.mapper.impl"
            targetProject="${entity.target.dir}">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
    
        <table tableName="user" domainObjectName="User" ></table>
        </context>
    </generatorConfiguration>

    其实需要自己修改数据库配置,因为插件不会读取spring boot中的数据库配置,所以需要在mybatis-generator.xml中配置好数据库,同时也需要修改自己的包名

    table节点中的tableName是指在数据库中的表名,domainObjectName是只生成的实体bean的类名,当然domainObjectName可以不用配置,会默认生成,当然如果有特殊需要可以配置

    配置Swagger2

    package wang.raye.springboot;
    
    import org.springframework.context.annotation.Bean;  
    import org.springframework.context.annotation.Configuration;
    
    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;  
    import wang.raye.springboot.model.User;
    
    /**
     * SwaggerConfig
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        /**
         * 可以定义多个组,比如本类中定义把test和demo区分开了 (访问页面就可以看到效果了)
         *
         */
        @Bean
        public Docket testApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("wang.raye.springboot"))
                    .paths(PathSelectors.any()).build();
        }
    
        private ApiInfo apiInfo() {
            ApiInfo apiInfo = new ApiInfo("SpringBoot学习demo", // 大标题
                    "Spring boot + swagger + mybatis + druid", // 小标题
                    "1.0", // 版本
                    "NO terms of service", "[email protected]

    ", // 作者 "RayeBlog", // 链接显示文字 "http://www.raye.wang/"// 网站链接 ); return apiInfo; } }

    相信看代码很容易看懂,我就不多说了

    编写demo

    至此,环境配置都配置好了,然后我创建一个简单的接口来添加用户,首先看看我的表结构

    DROP TABLE IF EXISTS `user`;  
    CREATE TABLE `user` (  
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(30) NOT NULL,
      `psw` varchar(40) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

    因为只是做演示,所以非常简单,然后看我生成的User.java

    package wang.raye.springboot.model;
    
    public class User {
    
        private Integer id;
    
        private String username;
        private String psw;
    
        public Integer getId() {
            return id;
        }
    
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username == null ? null : username.trim();
        }
    
        public String getPsw() {
            return psw;
        }
    
        public void setPsw(String psw) {
            this.psw = psw == null ? null : psw.trim();
        }
    }

    当然我是删除了很多自动生成的注释,因为看着太烦,不适合在博客上展示,然后看看UserMapper.java

    package wang.raye.springboot.model.mapper;
    
    import java.util.List;  
    import org.apache.ibatis.annotations.Delete;  
    import org.apache.ibatis.annotations.DeleteProvider;  
    import org.apache.ibatis.annotations.Insert;  
    import org.apache.ibatis.annotations.InsertProvider;  
    import org.apache.ibatis.annotations.Param;  
    import org.apache.ibatis.annotations.Result;  
    import org.apache.ibatis.annotations.Results;  
    import org.apache.ibatis.annotations.Select;  
    import org.apache.ibatis.annotations.SelectProvider;  
    import org.apache.ibatis.annotations.Update;  
    import org.apache.ibatis.annotations.UpdateProvider;  
    import org.apache.ibatis.type.JdbcType;  
    import wang.raye.springboot.model.User;  
    import wang.raye.springboot.model.UserCriteria;
    
    public interface UserMapper {
    
        @SelectProvider(type=UserSqlProvider.class, method="countByExample")
        long countByExample(UserCriteria example);
    
        @DeleteProvider(type=UserSqlProvider.class, method="deleteByExample")
        int deleteByExample(UserCriteria example);
    
        @Delete({
            "delete from user",
            "where id = #{id,jdbcType=INTEGER}"
        })
        int deleteByPrimaryKey(Integer id);
    
        @Insert({
            "insert into user (id, username, ",
            "psw)",
            "values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, ",
            "#{psw,jdbcType=VARCHAR})"
        })
        int insert(User record);
    
        @InsertProvider(type=UserSqlProvider.class, method="insertSelective")
        int insertSelective(User record);
    
        @SelectProvider(type=UserSqlProvider.class, method="selectByExample")
        @Results({
            @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
            @Result(column="username", property="username", jdbcType=JdbcType.VARCHAR),
            @Result(column="psw", property="psw", jdbcType=JdbcType.VARCHAR)
        })
        List<User> selectByExample(UserCriteria example);
    
        @Select({
            "select",
            "id, username, psw",
            "from user",
            "where id = #{id,jdbcType=INTEGER}"
        })
        @Results({
            @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
            @Result(column="username", property="username", jdbcType=JdbcType.VARCHAR),
            @Result(column="psw", property="psw", jdbcType=JdbcType.VARCHAR)
        })
        User selectByPrimaryKey(Integer id);
    
    
        @UpdateProvider(type=UserSqlProvider.class, method="updateByExampleSelective")
        int updateByExampleSelective(@Param("record") User record, @Param("example") UserCriteria example);
    
    
        @UpdateProvider(type=UserSqlProvider.class, method="updateByExample")
        int updateByExample(@Param("record") User record, @Param("example") UserCriteria example);
    
    
        @UpdateProvider(type=UserSqlProvider.class, method="updateByPrimaryKeySelective")
        int updateByPrimaryKeySelective(User record);
    
        @Update({
            "update user",
            "set username = #{username,jdbcType=VARCHAR},",
              "psw = #{psw,jdbcType=VARCHAR}",
            "where id = #{id,jdbcType=INTEGER}"
        })
        int updateByPrimaryKey(User record);
    }

    同样删除了注释,当然还会自动生成UserCriteria.java 和UserSqlProvider,这2个类主要用于模板查询,用过myBatis应该都知道,就不贴出来了,主要是我们的demo中也不会用到

    一、创建UserServer接口

    package wang.raye.springboot.server;
    
    import java.util.List;
    
    import wang.raye.springboot.model.User;
    
    /**
     * 用户服务
     * @author Raye
     * @since 2016年9月21日20:57:39
     */
    public interface UserServer {  
        /**
         * 添加一个用户
         * @param user 用户对象
         * @since 2016年9月21日20:58:17
         * @return 是否添加成功
         */
        public boolean add(User user);
    }

    二、创建UserServerImpl

    package wang.raye.springboot.server.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.stereotype.Repository;
    
    import wang.raye.springboot.model.User;  
    import wang.raye.springboot.model.mapper.UserMapper;  
    import wang.raye.springboot.server.UserServer;  
    /**
     * 用户相关数据库操作实现类
     * @author Raye
     * @since 2016年10月11日19:29:02
     */
    @Repository
    public class UserServerImpl implements UserServer {  
        @Autowired
        private UserMapper mapper;
    
        public boolean add(User user) {
            return mapper.insert(user) > 0;
        }
    
        public List<User> findAll() {
            return mapper.selectByExample(null);
        }
    
    }

    三、创建UserController

    package wang.raye.springboot.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.web.bind.annotation.RequestBody;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RestController;
    
    import io.swagger.annotations.Api;  
    import io.swagger.annotations.ApiImplicitParam;  
    import io.swagger.annotations.ApiOperation;  
    import wang.raye.springboot.model.User;  
    import wang.raye.springboot.server.UserServer;
    
    @Api(value="用户相关的接口")
    @RestController
    @RequestMapping("/user")
    public class UserController {  
        @Autowired
        private UserServer server;
        /**
         * 添加用户
         * @param user 用户对象
         * @since 2016年9月21日21:01:50
         */
        @RequestMapping("/add")
        @ApiOperation(notes="添加用户",value="添加一个用户",httpMethod="POST")
    
        @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
        public String add(@RequestBody User user){
            return "hello "+server.add(user);
        }
    }

    到此一个接口就完成了,我们可以到swagger2的文件页面去测试 http://localhost/swagger-ui.htm 注意如果端口不是80需要加上端口号,点开页面中的用户相关的接口 和GET /user/add可以看到如下页面我们可以在parameters处输入

    {
      "psw": "Raye",
      "username": "123456"
    }

    点击try it out就可以测试了,当然你也可能不想用json的方式,可以使用

    @ApiImplicitParams({
        @ApiImplicitParam(name="username",paramType="query",dataType="string"),
        @ApiImplicitParam(name="psw",paramType="query",dataType="string")
    })

    代替

    @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")

    同时为了隐藏user参数,需要在SwaggerConfig类的testApi方法中添加.ignoredParameterTypes(User.class)

    @Bean
        public Docket testApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .ignoredParameterTypes(User.class)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("wang.raye.springboot"))
                    .paths(PathSelectors.any()).build();
        }

    测试界面就会变为

    结尾

    好了,到这里一个Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境就搭建完成了,欢迎大家留言交流,另外附上本项目

    demo oschina地址

    demo github地址

    展开全文
  • 1.创建Maven工程 -->直接创建Spring工程 2.添加SpringBoot的起步依赖 3.编写SpringBoot引导类–>IDEA已自动配置好 4.编写Controller 注意:在引导类SpringBootApplication同级包或者子级包中创建才能运行 5...

    简单概述

    在这里插入图片描述

    入门案例

    1.代码实现

    1.创建Maven工程 -->直接创建Spring工程

    2.添加SpringBoot的起步依赖
    在这里插入图片描述

    3.编写SpringBoot引导类–>IDEA已自动配置好
    在这里插入图片描述

    4.编写Controller
    注意:在引导类SpringBootApplication同级包或者子级包中创建才能运行
    在这里插入图片描述
    5.测试
    在这里插入图片描述

    2.快速入门解析

    2.1.SpringBoot代码解析

    在这里插入图片描述

    2.2.SpringBoot工程热部署

    在这里插入图片描述

    原理分析

    在这里插入图片描述

    1.起步依赖

    1.1.分析spring-boot-starter-parent

    一部分坐标的版本、依赖管理、插件管理已经定义好,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了。所以起步依赖的作用就是进行依赖的传递

    1.2.分析spring-boot-starter-web

    spring-boot-starter-web就是将web开发要使用的
    spring-web、spring-webmvc等坐标进行了“打包”,这样我们的工程只要引入spring-boot-starter-web起步依赖的坐标就可以进行web开发了,同样体现了依赖传递的作用

    2.自动配置

    在这里插入图片描述

    在这里插入图片描述

    配置文件

    1.SpringBoot配置文件类型

    在这里插入图片描述

    2.配置文件与配置类的属性映射方式

    在这里插入图片描述

    整合其他技术

    在这里插入图片描述

    整合Redis
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 推荐阅读(点击即可跳转阅读)1.SpringBoot内容聚合2.面试题内容聚合3.设计模式内容聚合4.Mybatis内容聚合5.多线程内容聚合1.maven是什么?maven是Apache下的一个纯java开发的一个开源项目,它是一款能够抽象构建过程...
  • 推荐阅读(点击即可跳转阅读)1.SpringBoot内容聚合2.面试题内容聚合3.设计模式内容聚合4.Mybatis内容聚合5.多线程内容聚合1.maven是什么?maven是Apache下的一个纯java开发的一个开源项目,它是一款能够抽象构建过程...
  • 在为期十天的Java实习中,遇到了很多困难,反正自己是都解决了,谨以此文,献给过去十天没有放弃的自己,文章内容主要包括:Tomcat环境变量配置中出现的各种坑,引入Maven以及配置Maven环境时遇到的可可爱爱的问题,...
  • 目录maven依赖Spring配置JobStore配置RAMJobStoreJDBCJobStore定义定时任务其他Job状态与并发(@DisallowConcurrentExecution与@PersistJobDataAfterExecution注解)Job中断再执行(RequestsRecovery属性)监听器集群...
  • 上一篇讲到,虽然SB默认集成了很多东西很方便,但是天下没有免费...下面就来简单介绍一下怎么搭建一个SpringBoot开发环境。 先介绍一下我自己本地开发的环境的版本,分别是  Eclipse Neon 4.6.0  Maven 3.3.9  STS
  • 上一篇介绍了如何配置Maven,这一篇开始,学习入门级的SpringBoot项目。 搭建SpringBoot项目包含以下步骤: 一、创建maven项目 1.1选择File->new->other,再选择Maven Project。 1.2 勾选Create a ...
  • 看到这个数据你就会明白了通用配置maven依赖添加Spring-Web和Spring-Security依赖,使用Spring-Security是因为使用SpringBoot的Redis依赖时,必须添加Spring-Security。在新版本SpringBoot才会这样。 org.spring...
  • 上面这位Andy Wilkinson是springboot团队大佬,他在六月8号发布了一条推文,大致意思是:在Springboot2.3版本之后,我们将构建工具从maven迁移到gradle上,如果您对我们进行更改的原因和方式感兴趣,我刚刚发布了一篇...
  • IDEA搭建SpringBoot集成Jsp的辛酸历程

    万次阅读 热门讨论 2017-08-08 11:52:19
    所以就放弃了长久以来的eclipse…然后我就开始各种踩坑…踩到绝望…IDEA创建SpringBoot项目 其实用idea创建起来项目确实挺方便的…但是鉴于目录结构和eclipse有差异,也就是workspace和project的区别…需要注意 先...
  • 最近项目要使用elasticsearch,研究了一下,官方文档说7.0版本后将放弃transportCliet,故采用RestHighLevelClient方式连接,使用的版本为elasticsearch6.4.3 maven依赖 &amp;amp;amp;lt;dependency&amp;amp...
  • 最开始从某站随便找个了Springboot2教程就开始敲了,结果就一直给俺报错。 Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.3.4.RELEASE from/to nexus-aliyun ...
  • [Shiro] SpringBoot + Shiro doGetAuthorizationInfo不生效问题

    千次阅读 热门讨论 2019-01-22 16:44:07
    被这个东西折磨了好长时间, (甚至差点放弃), 把所有的地方都已经检查一万遍, 保证没有错误, 编译正常, 程序也不报错, 以下记录一下我的解决方案:   我的解决方案:  检查maven中是否导入  spring-boot-...
  • SpringBoot放弃(大多数企业同样如此)了Struts,转而代之是springMVC,不过,springboot是自动集成springMVC的,不需要任何配置,不需要任何依赖,直接使用各种控制层注解。springboot是springcloud的基础,是开启...
  • 一、项目配置 还记得刚开始学习ssm框架时,...不过还是建议大家学习SpringBoot,因为SpringBoot配置简单并且又是新推出的框架,未来发展的趋势。废话不多说,上代码! 1、项目结构 2、web.xml &l...
  • 文章目录初识SpringCloud什么是springcloudspringcloud的项目模块Eureka简介Eureka入门案例创建一个普通的springboot工程,这里就不创建父工程了,我始终觉得这样有违微服务的初衷,选择依赖如下maven依赖如下,cloud...
  • 二、springboot集成tkMybatis步骤(1)、引入TkMybatis的Maven依赖。(2)、配置对应实体类(表对应的实体)。(3)、Mapper集成tkMybatis的Mapper接口。(4)、启动类注解@MapperScan扫描Mapper接口。...
  • 前言:前段时间大约花了20天的时间学习SpringBoot,并完成了一个功能完整的信息管理网站,在此做一下记录。使用的框架/工具的版本:整体框架 SprongBoot :1.5.12Release前端框架模板:thymeleaf数据库:MySQL+Jpa...
  • ToyManage项目心的

    2018-03-07 22:24:37
    前言这是一次独立的编写项目的经历,也是第一次使用SpringBoot+Maven+Jpa+Thymeleaf去搭建一个项目,前台页面是完全基于bootstrap的样式。其中SpringBoot、Jpa和Thymeleaf都是第一次使用,所以只是第一次于第一次的...
  • 在搭建Springboot框架时,遇到一个很绝望的问题,连着搞了两天,把IDEA卸了两遍,maven卸了一遍,Tomcat差点也卸掉,就在准备放弃windows,转投Linux怀抱的时候,突然找到解决办法了,也是搞得头大, 显示的是...
  • springsecurity 单点登录

    2018-03-28 11:12:50
    我的开发环境是springboot(下面简称sb)+freemarker+maven 如大家所知道的,sb里面没有配置文件,需要通过类加载或者解析xml来配置一些东西,这也是初学sb的一个头痛点。(我当时就是,哈哈) 好的不多哔哔,直入...
  • 环境:maven 3.3.9, jdk1.8, springboot2.1.3, springcloud Greenwich。 模块:注册中心, 配置中心, gateway网关, 用户系统 等。。。。。 需求:使用http/https访问...
  • JQuery下载文件

    2020-07-27 10:24:29
    1,做报表的话,最开始我是尝试用帆软报表系统的,这东西引入到Springboot中一直没成功,参考官方的教程也不行,官方对非会员客户响应度也就那么高,所以还是暂时放弃了 2.选择直接用POI和iText插件做导出,硬编码,...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

mavenspringboot放弃

spring 订阅