SpringBoot整合Mybatis高级用法

概要

这篇文章主要讲述的是SpringBoot整合Mybatis时的几个快速开发小技巧,能让我们在开发项目时达到尽量少写SQL语句或最好不写SQL语句的快速开发效果

SpringBoot整合Druid

SpringBoot整合tk.mybatis(封装了Mybatis)

使用Mybatis的Maven插件生成代码

SpringBoot整合PageHelper(快速分页查寻)

SpringBoot整合Druid

概述

Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和 SQL 解析器组成。该项目主要是为了扩展 JDBC 的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计 SQL 信息、SQL 性能收集、SQL 注入检查、SQL 翻译等,程序员可以通过定制来实现自己需要的功能。

Druid 是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid 已经在阿里巴巴部署了超过 600 个应用,经过多年生产环境大规模部署的严苛考验。Druid 是阿里巴巴开发的号称为监控而生的数据库连接池!

引入依赖

pom.xml文件中引入druid-spring-boot-starter的依赖


        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.10version>
        dependency>

引入数据库连接依赖

<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <scope>runtimescope>
dependency>

配置 application.yml

application.xml 中配置数据库连接

spring:
  datasource:
    druid:
      url: jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
      username: root
      password: 123456
      initial-size: 1
      min-idle: 1
      max-active: 20
      test-on-borrow: true
      driver-class-name: com.mysql.jdbc.Driver

SpringBoot整合tk.mybatis

概述

tk.mybatis是MyBatis框架的基础上提供了很多工具,让开发更加高效

引入依赖

pom.xml文件中引入mapper-spring-boot-starter依赖,该依赖会自动引入 MyBaits 相关依赖


<dependency>
    <groupId>tk.mybatisgroupId>
    <artifactId>mapper-spring-boot-starterartifactId>
    <version>2.1.5version>
dependency>

配置application.yml

配置myBatis

mybatis:
    type-aliases-package: 实体类的存放路径,如:com.springboot.mybatisplus.entity
    mapper-locations: classpath:mapper/*.xml

创建一个通用的父级接口

主要作用是让 DAO 层的接口继承该接口,以达到使用 tk.mybatis 的目的

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

/**
 * 自己的 Mapper
 * 特别注意,该接口不能被扫描到,否则会出错
 * 

Title: MyMapper

*/
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> { }

这边需要注意的是Mapper不是mybatis中的mapper(org.apache.ibatis.annotations.Mapper),而是tk.mybatis.mapper.common.Mapper中的。

使用Mybatis的Maven插件生成代码

概述

我们无需手动编写 实体类、DAO、XML 配置文件,只需要使用 MyBatis 提供的一个Maven插件就可以自动生成所需的各种文件便能够满足基本的业务需求,如果业务比较复杂只需要修改相关文件即可。

配置插件

pom.xml 文件中增加mybatis-generator-maven-plugin 插件

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-maven-pluginartifactId>
            <version>1.3.5version>
            <configuration>
                <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xmlconfigurationFile>
                <overwrite>trueoverwrite>
                <verbose>trueverbose>
            configuration>
            <dependencies>
                <dependency>
                    <groupId>mysqlgroupId>
                    <artifactId>mysql-connector-javaartifactId>
                    <version>${mysql.version}version>
                dependency>
                <dependency>
                    <groupId>tk.mybatisgroupId>
                    <artifactId>mapperartifactId>
                    <version>3.4.4version>
                dependency>
            dependencies>
        plugin>
    plugins>
build>
  • configurationFile:自动生成所需的配置文件路径

自动生成的配置

src/main/resources/generator/目录下创建generatorConfig.xml 配置文件:




<generatorConfiguration>
    
    <properties resource="jdbc.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.MyMapper"/>
        plugin>

        
        <jdbcConnection
                driverClass="${jdbc.driverClass}"
                connectionURL="${jdbc.connectionURL}"
                userId="${jdbc.username}"
                password="${jdbc.password}">
        jdbcConnection>

        
        <javaModelGenerator targetPackage="com.springboot.mybatisplus.entity" targetProject="src/main/java"/>

        
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>

        
        <javaClientGenerator
                targetPackage="com.springboot.mybatisplus.mapper"
                targetProject="src/main/java"
                type="XMLMAPPER"/>

        
        <table catalog="myshop" tableName="%">
            
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        table>
    context>
generatorConfiguration>

配置数据源

src/main/resources目录下创建jdbc.properties数据源配置:

# MySQL 8.x: com.mysql.cj.jdbc.Driver
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://ip:port/dbname?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456

一切准备工作完成后,点击最右边的Maven图标

SpringBoot整合Mybatis高级用法_第1张图片

成功之后会在控制台里显示

SpringBoot整合Mybatis高级用法_第2张图片

同时,会在左边目录栏里显示所生成的代码

SpringBoot整合Mybatis高级用法_第3张图片

SpringBoot整合PageHelper

概述

PageHelper 是 Mybatis 的分页插件,支持多数据库、多数据源。可以简化数据库的分页查询操作,整合过程也极其简单,只需引入依赖即可。

引入依赖

pom.xml文件中引入pagehelper-spring-boot-starter依赖

<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelper-spring-boot-starterartifactId>
    <version>1.2.10version>
dependency>

这里我就在测试类里进行简单的测试,代码如下:

package com.springboot.mybatisplus;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.springboot.mybatisplus.entity.TbItem;
import com.springboot.mybatisplus.entity.TbUser;
import com.springboot.mybatisplus.mapper.TbItemMapper;
import com.springboot.mybatisplus.mapper.TbUserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootMybatisPlusApplication.class)
@Transactional
@Rollback
public class SpringbootMybatisPlusApplicationTests {

    @Autowired
    private TbItemMapper tbItemMapper;
    
    /**
     * 测试分页查询
     */
    @Test
    public void testPage() {
        // PageHelper 使用非常简单,只需要设置页码和每页显示条数即可
        PageHelper.startPage(1, 10);

        // 设置分页查询条件
        Example example = new Example(TbItem.class);
        PageInfo<TbItem> pageInfo = new PageInfo<>(tbItemMapper.selectByExample(example));

        // 获取查询结果
        List<TbItem> tbItems = pageInfo.getList();
        for (TbItem tbItem : tbItems) {
            System.out.println(tbItem.getTitle());
        }
    }
}

你可能感兴趣的:(Java)