整理SpringBoot+MyBatis+Druid框架demo,收藏以后用得到

457 阅读4分钟

最近自己写了一个SpringBoot+Mybatis(generator)+druid的demo

  1. mybatis+generator逆向工程生成代码
  2. pom文件 pom文件添加如下内容,引入generator插件
        <!--如果使用的mysql驱动是6.x的,那就无法生成除Insert以外的方法,使用5.x版本的就可以生成。 -->
        <!--生成的mapper中有insert以外的方法就得用5.x版本的MySQL -->
        <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.1.35</version>
                </dependency>
                <dependency>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-core</artifactId>
                    <version>1.3.5</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/generator/generatorConfig.xml</configurationFile>
            </configuration>
        </plugin>

当pom引入此插件成功的话,idea右侧可以看到

  1. 在resources下新建generator文件夹,在generator下新建generatorConfig.xml
<context id="DB2Tables"    targetRuntime="MyBatis3">
	 <!-- 对于生成的pojo类,添加toString方法 -->
    <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
    <commentGenerator>
        <property name="suppressDate" value="true"/>
        <!-- 配置生成注释,默认注释已经修改-->
        <property name="suppressAllComments" value="true"/>
        <!-- 设置编码为UTF-8 -->
        <property name="javaFileEncoding" value="UTF-8" />
    </commentGenerator>

    <!--数据库链接地址账号密码-->
    <jdbcConnection driverClass="${jdbc.driverClassName}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}">
    </jdbcConnection>
    <javaTypeResolver>
        <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>

    <!--生成Model类存放位置-->
    <javaModelGenerator targetPackage="com.qlu.cloud.pojo" targetProject="src/main/java">
        <property name="enableSubPackages" value="true"/>
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>

    <!--生成映射文件存放位置-->
    <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
        <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>

    <!--生成Dao类存放位置-->
    <!--
    客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
    type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
    type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
    type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
    -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.qlu.cloud.mapper" targetProject="src/main/java">
        <property name="enableSubPackages" value="true"/>
    </javaClientGenerator>

	<!-- 手动设置数据库表,根据数据库表来生成对应的pojo、mapper -->
    <table tableName="dir" domainObjectName="Directory" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    <table tableName="recode" domainObjectName="Recode" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    <table tableName="file" domainObjectName="File" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
3. 运行插件 ![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c6eb4f96c2b4496e80ff16f94d1f671d~tplv-k3u1fbpfcp-zoom-1.image)
  1. 生成以下代码

  2. application.perperties中的配置

  3. mybatis的配置

mybatis实体类的包路径

mybatis.typeAliasesPackage=com.qlu.cloud.pojo

mybatis的dao层方法的实现xml

mybatis.mapper-locations: classpath:mapper/*.xml 2. druid的配置

连接数据库的设置,SpringBoot会自动扫描这些

连接数据库的驱动名字,自6.x版本就换了名字

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/hadoop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username = root spring.datasource.password = root

初始化时建立物理连接的个数

spring.datasource.druid.initial-size=5

最大连接池数量

spring.datasource.druid.max-active=30

最小连接池数量

spring.datasource.druid.min-idle=5

获取连接时最大等待时间,单位毫秒

spring.datasource.druid.max-wait=60000

配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

spring.datasource.druid.time-between-eviction-runs-millis=60000

连接保持空闲而不被驱逐的最小时间

spring.datasource.druid.min-evictable-idle-time-millis=300000

用来检测连接是否有效的sql,要求是一个查询语句

spring.datasource.druid.validation-query=SELECT 1 FROM DUAL

建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

spring.datasource.druid.test-while-idle=true

申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

spring.datasource.druid.test-on-borrow=false

归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

spring.datasource.druid.test-on-return=false

是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。

spring.datasource.druid.pool-prepared-statements=true

要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。

spring.datasource.druid.max-pool-prepared-statement-per-connection-size=50

配置监控统计拦截的filters,去掉后监控界面sql无法统计

spring.datasource.druid.filters=stat,wall

通过connectProperties属性来打开mergeSql功能;慢SQL记录

spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

合并多个DruidDataSource的监控数据

spring.datasource.druid.use-global-data-source-stat=true

druid连接池监控

spring.datasource.druid.stat-view-servlet.login-username=admin spring.datasource.druid.stat-view-servlet.login-password=123

排除一些静态资源,以提高效率

spring.datasource.druid.web-stat-filter.exclusions=.js,.gif,.jpg,.png,.css,.ico,/druid/* 3. thymeleaf的配置 thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。它可以完全替代 JSP 。

thymeleaf的使用

application.propertites中的配置

spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML spring.thymeleaf.encoding=utf-8 spring.thymeleaf.cache=false pom文件中

org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-thymeleaf == thymeleaf下的return “start”;即为跳转到start.html界面,前提是这个文件在配置文件下配置的/templates/下,他的意思是动态。==
  1. 执行 接下来就可以写controller层来执行函数了

package com.qlu.cloud.controller;

import com.qlu.cloud.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;

@Controller @RequestMapping("a") public class demoController { /** * auto scan配置 * 在编辑情况下,无法找不到对应的bean * 于是提示找不到对应bean的错误。 * 常见于mybatis的mapper * * 解决办法:降低Autowired检测的级别,将Severity的级别由之前的error改成warning或其它可以忽略的级别。 */ @Autowired private UserMapper userMapper; @RequestMapping("show") public String show(Model model){ model.addAttribute("info",userMapper.selectByPrimaryKey(1)); return "start"; } } 其实controller层的注解我是采用了之前SSM框架的写法,其实这里有一个注解@RestController,它=@Controller+@ResponseBody,表示返回的是json

这里我们用model返回了一个类,然后跳转到了start.html界面,在start.html界面展示数据 start.html在/templates/下,它的内容为

Title
</tr>
序号 风机编号 报警时间 30s内温度高于80度次数

最最重要的一点 因为之前再写Mapper的时候(也就是DAO层是生成的,生成的Mapper类中没有使用@Mapper注解,但是每个Mapper中的类要加一个@Mapper注解也很麻烦),所以我们要在启动类上加一个@MapperScan(“com.qlu.cloud.mapper”)来声明@Mapper所在的包即可,启动类一般叫项目名+Application

然后运行项目即可。

实用插件 devtools热部署 每次改完都要重新停止应用,再重新启动很烦~但springboot有个叫热部署的东西,就是说在项目中修改代码可以不用重新停止应用再重新启动,可以自动重启,这里我们用的是devtools

  1. pom文件中添加以下内容

    org.springframework.boot spring-boot-devtools provided true
  2. 勾选setting->Build,Execution,Deployment->Compiler->Build project automatically

  3. Ctrl+Shift+Alt+/ -> 选择Registry… -> 勾选compiler.automake.allow.when.app.running

  4. 重启项目即可

最后附上完整的pom文件

4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.1.RELEASE com.qlu cloud 0.0.1-SNAPSHOT cloud Demo project for Spring Boot

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.6</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- 每次改完都要重新停止应用,再重新启动很烦~但springboot有个叫热部署的东西,就是说在项目中修改代码可以不用重新停止应用再重新启动,可以自动重启,这里我们用的是devtools-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>provided</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.2.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- 页面跳转-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- druid数据库连接池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.9</version>
    </dependency>
</dependencies>

<build>
    <plugins>
       <!-- Spring Boot包含一个Maven插件,可以将项目打包为可执行jar。-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- mybatis代码生成插件 -->
        <!--MG的插件-->
        <!--如果使用的mysql驱动是6.x的,那就无法生成,使用5.x版本的就可以生成。 -->
        <!--生成的mapper中有insert以外的方法就得用5.x版本的MySQL -->
        <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.1.35</version>
                </dependency>
                <dependency>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-core</artifactId>
                    <version>1.3.5</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/generator/generatorConfig.xml</configurationFile>
            </configuration>
        </plugin>


    </plugins>
</build>

关注公众号:Java架构师联盟,每日更细技术好文