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-bin\apache-maven-3.5.0-bin\Mvn_repository\mysql\mysql-connector-java\5.1.44\mysql-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 #\u663E\u793A\u65E5\u5FD7
 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     }

 

posted @ 2019-11-28 20:52  Mr.XiaoQi  阅读(183)  评论(0编辑  收藏  举报