首页 > 数据库 >SpringBoot整合Mybatis3 Dynamic Sql

SpringBoot整合Mybatis3 Dynamic Sql

时间:2024-04-10 14:22:25浏览次数:23  
标签:java SpringBoot Mybatis3 boot Dynamic org mybatis import select

 

 

前置条件:

CREATE TABLE `volunteer` (
  `vt_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '志愿者id',
  `vt_integral_count` int(11) DEFAULT NULL COMMENT '剩余总积分',
  `vt_avatar` varchar(255) DEFAULT NULL COMMENT '头像',
  `vt_name` varchar(255) DEFAULT NULL COMMENT '名字',
  PRIMARY KEY (`vt_id`) USING BTREE
)

 

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

maven

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>MybatisDynamicSql</artifactId>
    <version>1.0-SNAPSHOT</version>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--web -->
        <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.33</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.dynamic-sql</groupId>
            <artifactId>mybatis-dynamic-sql</artifactId>
            <version>1.1.4</version>
        </dependency>


        <!-- MyBatis 生成器 -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!--druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.6</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

 

代码目录结构

代码自动生成  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>
    <!--Mybatis Generator目前有5种运行模式,分别为:MyBatis3DynamicSql、MyBatis3Kotlin、MyBatis3、MyBatis3Simple、MyBatis3DynamicSqlV1。-->
    <context id="springboot-base" targetRuntime="MyBatis3DynamicSql">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <jdbcConnection
                connectionURL="jdbc:mysql://127.0.0.1:3307/ruoyi_vue?tinyInt1isBit=false&amp;useUnicode=true&amp;
                characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;nullCatalogMeansCurrent=true"
                driverClass="com.mysql.jdbc.Driver"
                userId="root"
                password="123456"/>

        <javaTypeResolver>
            <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer, 为 true时把JDBC DECIMAL
            和 NUMERIC 类型解析为java.math.BigDecimal -->
            <property name="forceBigDecimals" value="false" />
            <!--是否试用jdk8时间类-->
            <property name="useJSR310Types" value="false"/>
        </javaTypeResolver>

        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator
                targetPackage="com.my.entity"
                targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mybatis.mapping"
                         targetProject="src/main/resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator
                targetPackage="com.my.mapper"
                targetProject="src/main/java" type="XMLMAPPER">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!--生成全部表tableName设为%-->
        <!--<table tableName="%"/>-->

        <!-- 指定数据库表
  schema:数据库的schema,可以使用SQL通配符匹配。如果设置了该值,生成SQL的表名会变成如schema.tableName的形式。
  domainObjectName:生成对象的基本名称。如果没有指定,MBG会自动根据表名来生成名称。
  -->
        <table schema="volunteer" tableName="volunteer" domainObjectName="Volunteer"/>
    </context>
</generatorConfiguration>

 

package com.my.util;


import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MybatisGenerator {
    public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        //MBG 执行过程中的警告信息
        List<String> warnings = new ArrayList<>();
        //读取我们的 MBG 配置文件
        InputStream is = MybatisGenerator.class.getResourceAsStream("/mybatis/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();
        //当生成的代码重复时,不要覆盖原代码
        DefaultShellCallback callback = new DefaultShellCallback(false);
        //创建 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //执行生成代码
        myBatisGenerator.generate(null);
        //输出警告信息
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

 

 

接口

package com.my.controller;

import com.my.entity.Volunteer;
import com.my.mapper.VolunteerMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.dynamic.sql.SqlBuilder;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

import static com.my.mapper.volunteerDynamicSqlSupport.*;
import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
import static org.mybatis.dynamic.sql.SqlBuilder.isLike;

@RestController
@RequestMapping("/importDataDynamicSQL")
public class VotController {
    @Autowired
    //@Autowired(required = false)
    private VolunteerMapper volunteerMapper;


    /**
    查询指定列
     */
    @GetMapping("/list01")
    public List<Volunteer> list( ) {
        SelectStatementProvider select = SqlBuilder.select(vtId)
                .from(volunteer)
                .build()
                .render(RenderingStrategies.MYBATIS3);

        //List<volunteer> list = volunteerService.list1();
        return volunteerMapper.selectMany(select);
    }



    /**
       查询找所有列
        */
    @GetMapping("/list02")
    public List<Volunteer> list02( ) {
        SelectStatementProvider select = SqlBuilder.select(volunteerMapper.selectList)
                .from(volunteer)
                .build()
                .render(RenderingStrategies.MYBATIS3);

        System.out.println("=========="+select.toString());

        return volunteerMapper.selectMany(select);
    }

    /**


     * @return
     */
    @PostMapping("/list03")
    public List<Volunteer> list3(@RequestBody(required = false) Volunteer stu) {
        SelectStatementProvider select = SqlBuilder.select(volunteerMapper.selectList)
                .from(volunteer)
                .where(vtName, isLike("%" + stu.getVtName() + "%"))
                .and(vtName, isEqualTo("1"))
                //.or(sex, isEqualTo("女"))
                .orderBy(vtName)
                .build()
                .render(RenderingStrategies.MYBATIS3);
        return volunteerMapper.selectMany(select);
    }

    /**
     * 新增单条添加
     * @return
     */

    @PostMapping("/votAdd01")
    public int votAdd01(@RequestBody(required = false) Volunteer stu) {

        return volunteerMapper.insert(stu);
    }

    /**
     * 批量新增
     * @param
     * @return
     */

    @PostMapping("/votAdd02")
    public int votAdd02(@RequestBody(required = false) List<Volunteer> votList) {

        return volunteerMapper.insertMultiple(votList);
    }

    /**
     * 十万条插入性能测试
     * 批量新增
     * @param
     * @return
     */

    @PostMapping("/votAdd03")
    public String votAdd03() {
        List<Volunteer> votList =new ArrayList<>();
        Volunteer volt=new Volunteer();
        int count=10;
        for(int i=0;i<count;i++){

            volt.setVtAvatar("图片地址"+i);
            volt.setVtIntegralCount(i);
            volt.setVtName("姓名"+i);
            votList.add(volt);
        }
        LocalDateTime currentTimeStart = LocalDateTime.now();
        int addAllFlag=volunteerMapper.insertMultiple(votList);
        LocalDateTime currentTimeEND = LocalDateTime.now();


        Duration duration = Duration.between(currentTimeStart, currentTimeEND);

        return"开始时间:" +currentTimeStart +"结束时间:"+currentTimeEND +"时间差值(秒):"+duration.getSeconds();
    }
}

一个样例代码穿透示例

 

 

 

 

 参考资料:SpringBoot整合Mybatis3 Dynamic Sql(IDEA)-CSDN博客  感谢这位博主

https://mybatis.org/mybatis-dynamic-sql/docs/introduction.html 

 

 

标签:java,SpringBoot,Mybatis3,boot,Dynamic,org,mybatis,import,select
From: https://www.cnblogs.com/zhangzaizz/p/18125917

相关文章

  • Springboot 添加 WebSocket 服务
    后端WebSocketServer.java文件:packagecom.ruoyi;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Component;importorg.springframework.stereotype.Service;importjavax.websocket.*;importjavax.websocket.ser......
  • 免费分享Springboot+Vue的停车场管理系统源码,真酷啊
    今天给大家分享一套基于Springboot+Vue的停车场管理系统源码,在实际项目中可以直接复用。(免费提供,文末自取)一、系统运行图1、登陆页面2、车位管理3、车辆进出管理设计一个SpringBoot+Vue的停车场管理系统时,需要注意以下细节:1.用户权限管理:确保系统具有不......
  • docker离线部署Springboot项目
    首先先准备好项目jar包和Dockfile文件Dockfile文件配置如下:点击查看代码#拉取基础镜像FROMopenjdk:11#类似于作者MAINTAINERdpf#创建镜像目录RUNmkdir-p/htht/server/logs\/htht/server/temp\/htht/skywalking/agent#工作区WORKDIR/htht/server......
  • 基于SpringBoot+MySQL+SSM+Vue.js的宠物商城系统(附论文)
    演示视频基于SpringBoot+MySQL+SSM+Vue.js的宠物商城系统技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot文字描述基于SpringBoot+MySQL+SSM+Vue.js的宠物商城系统(附论文),用......
  • java计算机毕业设计二次元信息分享平台(附源码+springboot+开题+论文+部署)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着数字化时代的到来,二次元文化在全球范围内迅速崛起,成为年轻一代热衷的亚文化现象。二次元内容涵盖动漫、游戏、小说等多个领域,吸引了庞大的粉丝群......
  • java计算机毕业设计二手车平台交易系统(附源码+springboot+开题+论文+部署)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着经济的不断发展与人们生活水平的提高,汽车已成为人们日常生活中不可或缺的交通工具。然而,二手车市场的快速发展也带来了一系列问题,如信息不对称、......
  • 基于SSM+SpringBoot+MySQL+Element+Vue的鲜花销售商城系统(附论文)
    演示视频基于SSM+SpringBoot+MySQL+Element+Vue的鲜花销售商城系统(附论文)-源码乐园技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Element/Vue后端框架:Spring+SpringMVC+Mybatis+Element+Vue文字描述基于SSM+SpringBoot+MySQL+Element......
  • 23.Springboot常用的依赖总结_(没死之前)持续更新中~~~~~~
    2.2.5.RELEASE(注意maven对应版本)mybatis:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version></......
  • 基于Springboot+Vue的Java项目-月度员工绩效考核管理系统(附演示视频+源码+LW)
    大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。......
  • 基于java+springboot+vue实现的农产品智慧物流系统(文末源码+Lw)23-239
    摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用农产品智慧物流系统可以有效管理,使信息管......