zoukankan      html  css  js  c++  java
  • springboot整合mybatis

    springboot配置数据库连接池druid

    新建springboot项目

    druid学习地址

    https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

    所需pom依赖

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      4     <modelVersion>4.0.0</modelVersion>
      5     <parent>
      6         <groupId>org.springframework.boot</groupId>
      7         <artifactId>spring-boot-starter-parent</artifactId>
      8         <version>2.2.1.RELEASE</version>
      9         <relativePath/> <!-- lookup parent from repository -->
     10     </parent>
     11     <groupId>com.javaqi</groupId>
     12     <artifactId>springboot002</artifactId>
     13     <version>0.0.1-SNAPSHOT</version>
     14     <name>springboot002</name>
     15     <description>Demo project for Spring Boot</description>
     16 
     17     <properties>
     18         <java.version>1.8</java.version>
     19         <mysql.version>5.1.44</mysql.version>
     20     </properties>
     21 
     22     <dependencies>
     23         <dependency>
     24             <groupId>org.springframework.boot</groupId>
     25             <artifactId>spring-boot-starter-jdbc</artifactId>
     26         </dependency>
     27         <dependency>
     28             <groupId>org.springframework.boot</groupId>
     29             <artifactId>spring-boot-starter-thymeleaf</artifactId>
     30         </dependency>
     31         <dependency>
     32             <groupId>org.springframework.boot</groupId>
     33             <artifactId>spring-boot-starter-web</artifactId>
     34         </dependency>
     35         <dependency>
     36             <groupId>org.mybatis.spring.boot</groupId>
     37             <artifactId>mybatis-spring-boot-starter</artifactId>
     38             <version>2.1.1</version>
     39         </dependency>
     40 
     41         <dependency>
     42             <groupId>mysql</groupId>
     43             <artifactId>mysql-connector-java</artifactId>
     44             <version>${mysql.version}</version>
     45             <scope>runtime</scope>
     46         </dependency>
     47         <dependency>
     48             <groupId>org.projectlombok</groupId>
     49             <artifactId>lombok</artifactId>
     50             <optional>true</optional>
     51         </dependency>
     52         <dependency>
     53             <groupId>org.springframework.boot</groupId>
     54             <artifactId>spring-boot-starter-test</artifactId>
     55             <scope>test</scope>
     56             <exclusions>
     57                 <exclusion>
     58                     <groupId>org.junit.vintage</groupId>
     59                     <artifactId>junit-vintage-engine</artifactId>
     60                 </exclusion>
     61             </exclusions>
     62         </dependency>
     63 
     64         <dependency>
     65             <groupId>com.alibaba</groupId>
     66             <artifactId>druid-spring-boot-starter</artifactId>
     67             <version>1.1.10</version>
     68         </dependency>
     69         <dependency>
     70             <groupId>org.springframework</groupId>
     71             <artifactId>spring-aspects</artifactId>
     72         </dependency>
     73 
     74         <dependency>
     75             <groupId>com.github.pagehelper</groupId>
     76             <artifactId>pagehelper-spring-boot-starter</artifactId>
     77             <version>1.2.3</version>
     78         </dependency>
     79 
     80     </dependencies>
     81 
     82     <build>
     83         <resources>
     84             <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
     85             <resource>
     86                 <directory>src/main/java</directory>
     87                 <includes>
     88                     <include>**/*.xml</include>
     89                 </includes>
     90             </resource>
     91             <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
     92             <resource>
     93                 <directory>src/main/resources</directory>
     94                 <includes>
     95                     <include>*.properties</include>
     96                     <include>*.xml</include>
     97                     <include>*.yml</include>
     98                 </includes>
     99             </resource>
    100         </resources>
    101         <plugins>
    102             <plugin>
    103                 <groupId>org.mybatis.generator</groupId>
    104                 <artifactId>mybatis-generator-maven-plugin</artifactId>
    105                 <version>1.3.2</version>
    106                 <dependencies>
    107                     <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
    108                     <dependency>
    109                         <groupId>mysql</groupId>
    110                         <artifactId>mysql-connector-java</artifactId>
    111                         <version>${mysql.version}</version>
    112                     </dependency>
    113                 </dependencies>
    114                 <configuration>
    115                     <overwrite>true</overwrite>
    116                 </configuration>
    117             </plugin>
    118             <plugin>
    119                 <groupId>org.springframework.boot</groupId>
    120                 <artifactId>spring-boot-maven-plugin</artifactId>
    121             </plugin>
    122         </plugins>
    123     </build>
    124 
    125 </project>

    配置application.yml

    springboot默认数据源是org.apache.tomcat.jdbc.pool.DataSource

     1 spring:
     2   datasource:
     3     #1.JDBC
     4     type: com.alibaba.druid.pool.DruidDataSource
     5     driver-class-name: com.mysql.jdbc.Driver
     6     url: jdbc:mysql://localhost:3306/xufanqi?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
     7     username: root
     8     password: 123
     9     druid:
    10       #2.连接池配置
    11       #初始化连接池的连接数量 大小,最小,最大
    12       initial-size: 5
    13       min-idle: 5
    14       max-active: 20
    15       #配置获取连接等待超时的时间
    16       max-wait: 60000
    17        #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    18       time-between-eviction-runs-millis: 60000
    19       # 配置一个连接在池中最小生存的时间,单位是毫秒
    20       min-evictable-idle-time-millis: 30000
    21       validation-query: SELECT 1 FROM DUAL
    22       test-while-idle: true
    23       test-on-borrow: true
    24       test-on-return: false
    25       # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开
    26       pool-prepared-statements: true
    27       max-pool-prepared-statement-per-connection-size: 20
    28       # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    29       filter:
    30         stat:
    31           merge-sql: true
    32           slow-sql-millis: 5000
    33       #3.基础监控配置
    34       web-stat-filter:
    35         enabled: true
    36         url-pattern: /*
    37         #设置不统计哪些URL
    38         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
    39         session-stat-enable: true
    40         session-stat-max-count: 100
    41       stat-view-servlet:
    42         enabled: true
    43         url-pattern: /druid/*
    44         reset-enable: true
    45         #设置监控页面的登录名和密码
    46         login-username: admin
    47         login-password: admin
    48         allow: 127.0.0.1
    49         #deny: 192.168.1.100

    启动SpringBoot项目访问druid  http://localhost:tomcat端口号/项目名称/druid/

    测试

    HelloController 
     1 package com.javaqi.springboot002.controller;
     2 
     3 import org.springframework.web.bind.annotation.RequestMapping;
     4 import org.springframework.web.bind.annotation.RestController;
     5 
     6 @RestController
     7 @RequestMapping("/demo")
     8 public class HelloController {
     9 
    10     @RequestMapping("/say1")
    11     public String say1(){
    12         return "说活1";
    13     }
    14 
    15     @RequestMapping("/say2")
    16     public String say2(){
    17         try {
    18             Thread.sleep(2000);
    19         } catch (InterruptedException e) {
    20             e.printStackTrace();
    21         }
    22         return "说活2";
    23     }
    24 
    25     @RequestMapping("/say3")
    26     public String say3(){
    27         try {
    28             Thread.sleep(5000);
    29         } catch (InterruptedException e) {
    30             e.printStackTrace();
    31         }
    32         return "说活3";
    33     }
    34 
    35 }

    springboot整合mybatis 

    相关pom依赖

     1 <resources>
     2     <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
     3     <resource>
     4         <directory>src/main/java</directory>
     5         <includes>
     6             <include>**/*.xml</include>
     7         </includes>
     8     </resource>
     9     <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
    10     <resource>
    11         <directory>src/main/resources</directory>
    12         <includes>
    13             <include>*.properties</include>
    14             <include>*.xml</include>
    15             <include>*.yml</include>
    16         </includes>
    17     </resource>
    18 </resources>
    19 
    20 <plugin>
    21     <groupId>org.mybatis.generator</groupId>
    22     <artifactId>mybatis-generator-maven-plugin</artifactId>
    23     <version>1.3.2</version>
    24     <dependencies>
    25         <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
    26         <dependency>
    27             <groupId>mysql</groupId>
    28             <artifactId>mysql-connector-java</artifactId>
    29             <version>${mysql.version}</version>
    30         </dependency>
    31     </dependencies>
    32     <configuration>
    33         <overwrite>true</overwrite>
    34     </configuration>
    35 </plugin>

    逆向生成配置文件generatorConfig.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     3         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
     4 <generatorConfiguration>
     5     <!-- 引入配置文件 -->
     6     <properties resource="jdbc.properties"/>
     7 
     8     <!--指定数据库jdbc驱动jar包的位置-->
     9     <classPathEntry location="D:apache-maven-3.5.0-binapache-maven-3.5.0-binMvn_repositorymysqlmysql-connector-java5.1.44mysql-connector-java-5.1.44.jar"/>
    10 
    11     <!-- 一个数据库一个context -->
    12     <context id="infoGuardian">
    13         <!-- 注释 -->
    14         <commentGenerator>
    15             <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
    16             <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
    17         </commentGenerator>
    18 
    19         <!-- jdbc连接 -->
    20         <jdbcConnection driverClass="${jdbc.driver}"
    21                         connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    22 
    23         <!-- 类型转换 -->
    24         <javaTypeResolver>
    25             <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
    26             <property name="forceBigDecimals" value="false"/>
    27         </javaTypeResolver>
    28 
    29         <!-- 01 指定javaBean生成的位置 -->
    30         <!-- targetPackage:指定生成的model生成所在的包名 -->
    31         <!-- targetProject:指定在该项目下所在的路径  -->
    32         <javaModelGenerator targetPackage="com.javaqi.springboot002.entity"
    33                             targetProject="src/main/java">
    34             <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
    35             <property name="enableSubPackages" value="false"/>
    36             <!-- 是否对model添加构造函数 -->
    37             <property name="constructorBased" value="true"/>
    38             <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
    39             <property name="trimStrings" value="false"/>
    40             <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
    41             <property name="immutable" value="false"/>
    42         </javaModelGenerator>
    43 
    44         <!-- 02 指定sql映射文件生成的位置 -->
    45         <sqlMapGenerator targetPackage="com.javaqi.springboot002.mapper"
    46                          targetProject="src/main/java">
    47             <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
    48             <property name="enableSubPackages" value="false"/>
    49         </sqlMapGenerator>
    50 
    51         <!-- 03 生成XxxMapper接口 -->
    52         <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
    53         <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
    54         <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
    55         <javaClientGenerator targetPackage="com.javaqi.springboot002.mapper"
    56                              targetProject="src/main/java" type="XMLMAPPER">
    57             <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
    58             <property name="enableSubPackages" value="false"/>
    59         </javaClientGenerator>
    60 
    61         <!-- 配置表信息 -->
    62         <!-- schema即为数据库名 -->
    63         <!-- tableName为对应的数据库表 -->
    64         <!-- domainObjectName是要生成的实体类 -->
    65         <!-- enable*ByExample是否生成 example类 -->
    66 
    67         <table schema="" tableName="t_mvc_book" domainObjectName="Book"
    68                enableCountByExample="false" enableDeleteByExample="false"
    69                enableSelectByExample="false" enableUpdateByExample="false">
    70             <property name="useActualColumnNames" value="true" />
    71         </table>
    72 
    73 
    74     </context>
    75 </generatorConfiguration>

    逆向生成集成到maven中的命令

    启用事物管理器

    使用@Repository注解,在启动类中添加@MapperScan(“xxxx”)注解,用于扫描Mapper类的包。扫描多个包:

    测试

     1 package com.javaqi.springboot002.Service.impl;
     2 
     3 
     4 import com.javaqi.springboot002.Service.BookService;
     5 import com.javaqi.springboot002.entity.Book;
     6 import com.javaqi.springboot002.util.PageBean;
     7 import org.junit.jupiter.api.Test;
     8 import org.springframework.beans.factory.annotation.Autowired;
     9 import org.springframework.boot.test.context.SpringBootTest;
    10 
    11 /**
    12  * @author XuFanQi
    13  * @site
    14  * @company
    15  * @create 2019-11-28 16:46
    16  */
    17 @SpringBootTest
    18 public class BookServiceImplTest {
    19     @Autowired
    20     private BookService bookService;
    21 
    22     @Test
    23     public void deleteByPrimaryKey() {
    24         bookService.deleteByPrimaryKey(21);
    25 
    26     }
    27 
    28     @Test
    29     public void selectByPrimaryKey() {
    30         System.out.println(bookService.selectByPrimaryKey(25));
    31     }
    32 
    33 
    34 }

    查询

    springboot整合pagehelper

    相关pom依赖

    1 <dependency>
    2             <groupId>com.github.pagehelper</groupId>
    3             <artifactId>pagehelper-spring-boot-starter</artifactId>
    4             <version>1.2.3</version>
    5         </dependency>

    配置application.yml文件

     1 pagehelper:
     2   helperDialect: mysql
     3   reasonable: true
     4   supportMethodsArguments: true
     5   params: count=countSql
     6 
     7 #u663Eu793Au65E5u5FD7
     8 logging:
     9   level:
    10     com.javaxu.springboot002.mapper: debug

    相关代码

    BookMapper.xml

    PagerAspect.java

     1 package com.javaqi.springboot002.aspect;
     2 
     3 import com.github.pagehelper.PageHelper;
     4 import com.github.pagehelper.PageInfo;
     5 import com.javaqi.springboot002.util.PageBean;
     6 import org.aspectj.lang.ProceedingJoinPoint;
     7 import org.aspectj.lang.annotation.Around;
     8 import org.aspectj.lang.annotation.Aspect;
     9 import org.springframework.stereotype.Component;
    10 
    11 import java.util.List;
    12 
    13 @Component
    14 @Aspect
    15 public class PagerAspect {
    16 
    17     @Around("execution(* *..*Service.*Pager(..))")
    18     public Object invoke(ProceedingJoinPoint args) throws Throwable{
    19         Object[] params = args.getArgs();
    20         PageBean pageBean = null;
    21         for (Object param : params) {
    22             if(param instanceof PageBean){
    23                 pageBean = (PageBean) param;
    24                 break;
    25             }
    26         }
    27 
    28         if (pageBean !=null && pageBean.isPagination())
    29         PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    30 
    31         Object proceed = args.proceed(params);
    32 
    33         if (pageBean !=null && pageBean.isPagination()){
    34             PageInfo pageInfo = new PageInfo((List)proceed);
    35             pageBean.setTotal(pageInfo.getTotal()+"");
    36         }
    37         return proceed;
    38     }
    39 }

    service层

    测试

     1    @Test
     2     public void listPager() {
     3         Book book = new Book();
     4         book.setBname("%圣墟%");
     5         PageBean pageBean = new PageBean();
     6         pageBean.setPage(2);
     7         for (Book book1 : bookService.listPager(book, pageBean)) {
     8             System.out.println(book1);
     9         }
    10     }

  • 相关阅读:
    Handler一般处理程序的应用--随机图片生成
    一个内外网部署sharepoint的配置
    不使用SQL Server Management Studio备份数据库的方法
    根据模板生成网页
    一个简单的将Oracle生产库定期备份到备份库的方法
    c#序列化与反序列化
    The Java Reliable Multicast Service:A Reliable Multicast Library
    Video capture using JMF
    转:关于Jxta的Advertisement
    Practical JXTA II
  • 原文地址:https://www.cnblogs.com/xcn123/p/11953669.html
Copyright © 2011-2022 走看看