spring boot 2.1学习笔记【七】SpringBoot 2集成MySQL,Mybatis

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请注明出处. 博主博客地址是 http://blog.csdn.net/liubenlong007 https://blog.csdn.net/fgyibupi/article/details/86163953

springboot系列学习笔记全部文章请移步值博主专栏**: spring boot 2.X/spring cloud Greenwich
由于是一系列文章,所以后面的文章可能会使用到前面文章的项目。springboot系列代码全部上传至GitHub:https://github.com/liubenlong/springboot2_demo
本系列环境:Java11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;

上一篇介绍了使用springdataJPA, 这一篇介绍一些mybatis

环境介绍:
MySQL驱动:8.X
使用pagehelper分页
使用druid连接池(1.5.X默认Tomcat连接池,2.X默认是hikari连接池)
使用mybatis-generator插件

引入依赖

我这里使用的都是最新的版本。需要以下依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

添加mybatis插件:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin><!-- mybatis generator 自动生成代码插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
        </plugins>
    </build>

配置druid连接池、mybatis、及pagehelper,参数的含义注释已经写了,更加详细的用法请自行阅读官方文档

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 特别注意:java 9以后需要将com.mysql.jdbc.Driver  改为  com.mysql.cj.jdbc.Driver即可
      # 否则报错:Loading class `com.mysql.jdbc.Driver'. This is deprecated.
      driver-class-name: com.mysql.cj.jdbc.Driver
      #基本属性
      url: jdbc:mysql://127.0.0.1:3306/test?charset=utf8mb4&useSSL=false
      username: ****
      password: ****
      #配置初始化大小/最小/最大[仅用于测试,生成环境需要修改哦]
      initial-size: 5
      min-idle: 5
      max-active: 20
      #获取连接等待超时时间
      max-wait: 60000
      #间隔多久进行一次检测,检测需要关闭的空闲连接
      time-between-eviction-runs-millis: 60000
      #一个连接在池中最小生存的时间
      min-evictable-idle-time-millis: 300000
      #指定获取连接时连接校验的sql查询语句
      validation-query: SELECT 'x'
      #验证连接的有效性
      test-while-idle: true
      #获取连接时候验证,会影响性能(不建议true)
      test-on-borrow: false
      #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
      pool-prepared-statements: false
      max-pool-prepared-statement-per-connection-size: 20

mybatis:
  mapper-locations: classpath:mapping/*.xml

#pagehelper
pagehelper:
  helperDialect: mysql
  #  分页参数合理化,默认false禁用 .启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
  #  用合理化时,如果pageNum<1或pageNum>pages会返回空数据
  reasonable: true
  supportMethodsArguments: true
  # 设置为true时,使用RowBounds分页会进行count查询 .默认=false
  rowBoundsWithCount: true

在src/main/resources/generator目录下新建generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry location="D:/localRepository/mysql/mysql-connector-java/8.0.13/mysql-connector-java-8.0.13.jar"/>

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/test?charset=utf8mb4&amp;useSSL=false" userId="****"
                        password="****">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="stu" domainObjectName="Stu" enableCountByExample="true" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="true"></table>
    </context>
</generatorConfiguration>

双击执行mybatis-generator:generate生成mapper及实体类。
在这里插入图片描述
执行完毕后,整个项目目录结构为:
在这里插入图片描述

编写StuService

package com.example.service;

import com.example.mapper.StuMapper;
import com.example.model.Stu;
import com.example.model.StuExample;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Slf4j
public class StuService {
    @Autowired
    private StuMapper stuMapper;

    public List<Stu> findAll(){
        return stuMapper.selectByExample(null);
    }

    public List<Stu> selectByExample(){
        StuExample stuExample = new StuExample();
        stuExample.createCriteria().andAgeEqualTo(12);//条件查询
        stuExample.setOrderByClause("name");//排序
        return stuMapper.selectByExample(stuExample);
    }

    /**
     * PageHelper分页
     * @return
     */
    public PageInfo<Stu> selectByExampleWithPage(int pageNum, int pageSize){
        PageHelper.startPage(pageNum, pageSize);
        StuExample stuExample = new StuExample();
        stuExample.createCriteria().andAgeEqualTo(12);//条件查询
        stuExample.setOrderByClause("name");//排序
        List<Stu> stus = stuMapper.selectByExample(stuExample);
        PageInfo<Stu> pageInfo = new PageInfo<>(stus);
        return pageInfo;
    }

    public int modify(int id , String address){
        Stu stu = stuMapper.selectByPrimaryKey(id);
        stu.setAddress(address);
        return stuMapper.updateByPrimaryKeySelective(stu);
    }
    public int save(){
        Stu stu = new Stu();
        stu.setName("周杰伦");
        stu.setAge(30);
        return stuMapper.insert(stu);
    }
}

编写controller:

package com.example.comtroller;

import com.example.model.Stu;
import com.example.service.StuService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@Slf4j
public class StuController {
    @Autowired
    private StuService stuService;

    @GetMapping("/findAll")
    public List<Stu> findAll() {
        return stuService.findAll();
    }

    @GetMapping("/selectByExample")
    public List<Stu> selectByExample() {
        return stuService.selectByExample();
    }

    @GetMapping("/selectByExampleWithPage")
    public PageInfo<Stu> selectByExampleWithPage(int pageNum, int pageSize) {
        return stuService.selectByExampleWithPage(pageNum, pageSize);
    }

    /**
     * 测试修改,并且使用restful风格
     *
     * @param id
     * @param address
     * @return
     */
    @PutMapping("/modify/{id}")
    public int modify(@PathVariable("id") int id, @RequestParam("address") String address) {
        return stuService.modify(id, address);
    }

    @GetMapping("/save")
    public int save() {
        return stuService.save();
    }
}

请读者自定运行程序观察结果。

注意事项

generatorConfig.xml下图URL的配置注意xmlbuzhich9i& 需要写成&amp;
在这里插入图片描述

MySQL8.X版本的驱动需要使用com.mysql.cj.jdbc.Driver; 老的com.mysql.jdbc.Driver 废弃了。

springboot系列学习笔记全部文章请移步值博主专栏**: spring boot 2.X/spring cloud Greenwich
由于是一系列文章,所以后面的文章可能会使用到前面文章的项目。springboot系列代码全部上传至GitHub:https://github.com/liubenlong/springboot2_demo
本系列环境:Java11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;

展开阅读全文

没有更多推荐了,返回首页