spring boot整合mybatis

1、springboot配置数据库连接池druid

  新建spring boot项目

导入pom依赖

1 <dependency>
2             <groupId>com.alibaba</groupId>
3             <artifactId>druid-spring-boot-starter</artifactId>
4             <version>1.1.10</version>
5         </dependency>
6         <dependency>
7             <groupId>org.springframework</groupId>
8             <artifactId>spring-aspects</artifactId>
9         </dependency>

修改mysql版本

<properties>
        <java.version>1.8</java.version>
        <mysql.version>5.1.44</mysql.version>
    </properties>
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
            <scope>runtime</scope>
        </dependency>

配置application.yml文件

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

controller测试代码

 1 package com.yuan.springboot02.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 }

2、springboot整合mybatis

springboot整合mybatis逆向生成插件

相关pom依赖

<build>
        <resources>
            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>*.properties</include>
                    <include>*.xml</include>
                    <include>*.yml</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <dependencies>
                    <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

逆向生成配置文件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:Maven-folderapache-maven-3.5.0-binapache-maven-3.5.0mvn_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.yuan.springboot02.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.yuan.springboot02.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.yuan.springboot02.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中的命令

mybatis-generator:generate -e

springboot整合mybatis

使用@Repository注解,在启动类中添加@MapperScan(“xxxx”)注解,用于扫描Mapper类的包。扫描多个包:@MapperScan({”com.javaxl.springboot02.dao”,”com.javaxl.springboot02.entity”})

 //启用事物管理器

  @EnableTransactionManagement

 1 package com.yuan.springboot02;
 2 
 3 import org.mybatis.spring.annotation.MapperScan;
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 
 7 @MapperScan("com.yuan.springboot02.mapper")
 8 @SpringBootApplication
 9 public class Springboot02Application {
10 
11     public static void main(String[] args) {
12         SpringApplication.run(Springboot02Application.class, args);
13     }
14 
15 }

Test测试代码

 1 package com.yuan.springboot02.Service.impl;
 2 
 3 
 4 import com.yuan.springboot02.Service.BookService;
 5 import org.junit.jupiter.api.Test;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.boot.test.context.SpringBootTest;
 8 
 9 @SpringBootTest
10 public class BookServiceImplTest {
11 
12     @Autowired
13     private BookService bookService;
14 
15     @Test
16     public void deleteByPrimaryKey() {
17         bookService.deleteByPrimaryKey(12);
18 
19     }
20 
21     @Test
22     public void selectByPrimaryKey() {
23         System.out.println(bookService.selectByPrimaryKey(12));
24     }
25 }

查询测试

删除测试

3、springboot整合pagehelper

导入pom

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

配置application.yml文件

#pagehelper分页插件配置
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

#显示日志
logging:
  level:
    com.javaxl.springboot02.mapper: debug

BookMapper和BookMapper.xml

 1 List<Book> listPager(Book book);
 2 
 3 
 4 
 5 <select id="listPager" resultType="com.yuan.springboot02.entity.Book" parameterType="com.yuan.springboot02.entity.Book" >
 6     select
 7     <include refid="Base_Column_List" />
 8     from t_mvc_book
 9     <where>
10       <if test="bname != null and bname != ''" >
11         and bname like #{bname}
12       </if>
13     </where>
14   </select>

PagerAspect

 1 package com.yuan.springboot02.aspect;
 2 
 3 import com.github.pagehelper.PageHelper;
 4 import com.github.pagehelper.PageInfo;
 5 import com.yuan.springboot02.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  List<Book> listPager(Book book, PageBean pageBean);
2 
3 
4 
5 @Override
6     public List<Book> listPager(Book book, PageBean pageBean) {
7         return bookMapper.listPager(book);
8     }

Springboot02Application

 1 package com.yuan.springboot02;
 2 
 3 import org.mybatis.spring.annotation.MapperScan;
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 7 import org.springframework.transaction.annotation.EnableTransactionManagement;
 8 
 9 @MapperScan("com.yuan.springboot02.mapper")
10  @EnableTransactionManagement
11 @EnableAspectJAutoProxy
12  @SpringBootApplication
13  public class Springboot02Application {
14 
15      public static void main(String[] args) {
16          SpringApplication.run(Springboot02Application.class, args);
17     }
18 
19  }

测试方法

 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     }

查询结果

谢谢观看!!!

原文地址:https://www.cnblogs.com/ly-0919/p/11948843.html