zoukankan      html  css  js  c++  java
  • 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     }

    查询结果

    谢谢观看!!!

  • 相关阅读:
    利用SOLR搭建企业搜索平台 之——Solr索引基本操作
    利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml
    利用SOLR搭建企业搜索平台 之——模式配置Schema.xml
    利用SOLR搭建企业搜索平台 之——solr的查询语法
    利用SOLR搭建企业搜索平台 之——MultiCore
    利用SOLR搭建企业搜索平台 之——配置文件
    利用SOLR搭建企业搜索平台 之——运行solr
    iOS masonry设置控件的优先级
    iOS label通过内容获取高度
    iOS textField的一些奇怪问题
  • 原文地址:https://www.cnblogs.com/ly-0919/p/11948843.html
Copyright © 2011-2022 走看看