16.从零开始学springboot-整合mybatisPlus-多数据源-代码生成器

Neo4j Desktop新手必看:3分钟搞定CSV数据导入(附常见报错解决方案) 本文详细介绍了在Neo4j Desktop中高效导入CSV数据的三种主流方法,包括图形化界面操作、命令行批量导入和Python驱动编程导入,并提供了常见报错解决方案和性能优化技巧,帮助新手快速构建知识图谱。 阅读详情

前言

前几个案例一直只有一个固定的数据源,但是实际开发中我们常常会有多个数据库(分库分表存放业务场景&主从场景),所以本次来做个这样的尝试。
另外,我们此次使用mybatis-plus插件来更方便的进行数据操作。

几个概念

多模块(maven聚合):
我们之前的demo都是一个项目一个文件,但是实际生产场景中,这种方式还是比较少见的,正常一个项目都或或多或少的关联另一个项目,比如开发了一套api项目,这套api肯定会有对应的web项目,app项目等等,那么如何在创建项目时就能体现这种依赖关系呢?maven聚合应运而生。你可以简单的理解为有这么一个父项目,能管理所以依赖它的子项目,当父项目改动编译时,对应的所有子项目都会编译重新打包

mybatis-plus:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis -plus则是在MyBatis 上的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

多数据源:
简而言之,同时连接多个数据库

项目构建

博主使用的是IDEA开发,所以建议大家都使用IDEA。

创建父项目

1.png

2.png

删除src目录,因为父项目不写代码

创建子项目

右键选择父项目
3.png

4.png

5.png

6.png

至此基本的项目结构已经建立,但是实际上demo和web-api的"父子关系"还没有建立,我们需要简单的修改下pom.xml
SpringBootDemo/pom.xml:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <packaging>pom</packaging>
    <modules>
        <module>sbmp-multidb</module>
    </modules>

7.png

sbmp-multidb/pom.xml更改parent:

    <parent>
        <groupId>com.mrcoder</groupId>
        <artifactId>SpringBootDemo</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

8.png

Tips

那么问题来了,既然所谓的依赖是加载包,那么若我们在父pom.xml中加入一个依赖包,那么子模块会自动继承这个依赖么?
这就引出了maven 关于pom依赖管理的知识。请查看 http://wrsee.com/articles/80

添加依赖

以上完成了多模块的配置,下面我们添加子模块pom.xml依赖

完整依赖:

<?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>


    <parent>
        <groupId>com.mrcoder</groupId>
        <artifactId>SpringBootDemo</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>


    <groupId>com.mrcoder</groupId>
    <artifactId>sbmp-multidb</artifactId>
    <version>0.0.1</version>
    <name>sbmp-multidb</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <spring.boot.version>2.1.0.RELEASE</spring.boot.version>
        <mysql.version>8.0.12</mysql.version>
        <mybatisplus.version>3.0.7.1</mybatisplus.version>
        <dynamic-datasource.version>2.5.0</dynamic-datasource.version>
        <lombok.version>1.18.2</lombok.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- lombok简化类 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>${lombok.version}</version>
        </dependency>
        <!-- 多数据源 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>${dynamic-datasource.version}</version>
        </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <!-- mybatis-plus代码生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

9.png

10.png

添加配置

application.yml:

spring:
  datasource:
    dynamic:
      primary: db1   #设置默认的数据源
      datasource:
        db1:
          username: root
          password: 123456
          url: jdbc:mysql://192.168.145.131:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
          driver-class-name: com.mysql.cj.jdbc.Driver
        db2:
          username: root
          password: 123456
          url: jdbc:mysql://192.168.145.131:3306/test2?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
          driver-class-name: com.mysql.cj.jdbc.Driver
      mp-enabled: true
logging:
  level:
    com.xkcoding.multi.datasource.mybatis: debug

建库

建立test、test2数据库
test库建表:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for multi_user
-- ----------------------------
DROP TABLE IF EXISTS `multi_user`;
CREATE TABLE `multi_user` (
  `id` bigint(64) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(30) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of multi_user
-- ----------------------------
INSERT INTO `multi_user` VALUES ('1', '主库添加222', '20');

test2库建表:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for multi_user
-- ----------------------------
DROP TABLE IF EXISTS `multi_user`;
CREATE TABLE `multi_user` (
  `id` bigint(64) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(30) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of multi_user
-- ----------------------------
INSERT INTO `multi_user` VALUES ('1103566261448732674', '主库添加', '20');
INSERT INTO `multi_user` VALUES ('1103566303475658753', '主库添加', '20');
INSERT INTO `multi_user` VALUES ('1103566435235524610', '主库添加', '20');

mybatis-plus代码生成器的使用

以上我们成功创建了一个多模块的项目,父项目为SpringBootDemo,子项目为sbmp-multidb
接下来,我们完善各"层"代码,考虑到手动一个个创建类文件和包太麻烦,这边我们使用一个偷懒工具,mybatis-plus-generator来自动生成相关的包和类文件(和mubatis-generator类似的功能)。

我们先右键新增一个名叫generator的package,里面新增一个MysqlGenerator的类文件,
11.png

12.png

generator/MysqlGenerator:

package com.mrcoder.sbmpmultidb.generator;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * <p>
 * mysql 代码生成器演示例子
 * </p>
 */
public class MysqlGenerator {

    /**
     * <p>
     * 读取控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

    /**
     * RUN THIS
     */
    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/sbmp-multidb/src/main/java");
        gc.setAuthor("mrcoder");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://192.168.145.131:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模块名"));
        pc.setParent("com.mrcoder");
        mpg.setPackageInfo(pc);

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输入文件名称
                return projectPath + "/sbmp-multidb/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //strategy.setSuperEntityClass("com.mrcoder.sbmpmultidb.BaseEntity");
        strategy.setEntityLombokModel(true);
        //strategy.setSuperControllerClass("com.mrcoder.sbmpmultidb.BaseController");
        strategy.setInclude(scanner("表名"));
        strategy.setSuperEntityColumns("id");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }

}

相关的注释已经加上了,自行阅读,或者直接去看官方文档~,根据实际情况酌情修改。

这边我们直接运行代码生成器,点击绿色的小箭头
13.png

运行时会让你填写模块名和数据表名,
14.png

模块名写子模块的名称即可,这边不写子模块名填写其它名字的话则会自动创建一个子模块并将文件生成进去。
数据表名如实填写即可

目录结构

15.png

如图,标红部分为代码生成器自动生成的代码,只需小小的完善即可使用。

controller和service/impl还是需要手动创建的。

完善

我们创建controller和service/impl的package,补充代码

controller/MultiUserController:

package com.mrcoder.sbmpmultidb.controller;


import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.mrcoder.sbmpmultidb.service.IMultiUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
@Controller
@RestController
@RequestMapping("/sbmpmultidb/multi-user")
public class MultiUserController {
    @Autowired
    private IMultiUserService userService;

    @RequestMapping("/id")
    public MultiUser id(){
        MultiUser user = userService.getById(1);
        return user;
    }

    @RequestMapping("/list")
    public List<MultiUser> list() {
        List<MultiUser> userList = userService.list();
        return userList;
    }

    @RequestMapping("add")
    public String add(){
        MultiUser userMaster = MultiUser.builder().name("主库添加").age(20).build();
        userService.addUser(userMaster);
        return "add success";
    }

    @RequestMapping("update")
    public String update(){

        MultiUser userMaster = MultiUser.builder().id(1L).name("主库添加222").age(20).build();
        userService.updateById(userMaster);
        return "update success";
    }
}

entity/MultiUser:

package com.mrcoder.sbmpmultidb.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @author mrcoder
 * @since 2019-02-26
 */
@Data
@TableName("multi_user")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MultiUser implements Serializable {
    private static final long serialVersionUID = -1923859222295750467L;
    //private static final long serialVersionUID = 1L;

    @TableId(type = IdType.ID_WORKER)
    private Long id;

    private String name;

    private Integer age;

}

mapper/MultiUserMapper:

package com.mrcoder.sbmpmultidb.mapper;

import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
public interface MultiUserMapper extends BaseMapper<MultiUser> {

}

service/IMultiUserService:

package com.mrcoder.sbmpmultidb.service;

import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
public interface IMultiUserService extends IService<MultiUser> {
    void addUser(MultiUser user);
}

service/impl/MultiUserServiceImpl:

package com.mrcoder.sbmpmultidb.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.mrcoder.sbmpmultidb.mapper.MultiUserMapper;
import com.mrcoder.sbmpmultidb.service.IMultiUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
@Service
@DS("db1")
public class MultiUserServiceImpl extends ServiceImpl<MultiUserMapper, MultiUser> implements IMultiUserService {
    @DS("db2")
    @Override
    public void addUser(MultiUser user) {
        baseMapper.insert(user);
    }
}

最后我们在入口文件中加入扫描操作:

SbmpMultidbApplication:

package com.mrcoder.sbmpmultidb;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.mrcoder.sbmpmultidb.mapper")
public class SbmpMultidbApplication {

    public static void main(String[] args) {
        SpringApplication.run(SbmpMultidbApplication.class, args);
    }

}

运行

16.png

项目地址

https://github.com/MrCoderStack/SpringBootDemo/tree/master/sbmp-multidb

https://gitee.com/MrCoderStack/MrCoderStackBlog/tree/master/sbmp-multidb

请关注我的订阅号

订阅号.png

【WRF数据介绍第二期】气象驱动场数据介绍及下载 阅读详情

相关推荐

VS2022错误列表高效处理:从复制到Excel表格的完整指南

本文详细介绍了在Visual Studio 2022中高效处理错误列表的实用技巧,重点讲解了如何将错误信息一键复制并粘贴到Excel表格中。通过基础操作、自定义视图、筛选功能及常见问题解决方案,帮助开发者将杂乱的编译错误整理成清晰、可排序、可筛选的数据表,极大提升了团队协作、错误分析和项目管理的效率。

weixin_28837817的博客 358

Mybatis-Plus详解

Mybatis-Plus是一个Mybatis(opens new window)的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发。无侵入:只做增强不做改变,引入它不会对现有工程产生影响。 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作。 强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求。支持Lambda形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需

互联网底层民工的博客 7万+

Vmware虚拟机一打开就蓝屏解决方法

Vmware虚拟机一打开就蓝屏解决方法 问题: 一打开Vmware虚拟机就蓝屏,如下图所示: 解决方法1: 启用和关闭windows功能(对话框)——>虚拟机平台(选项打对勾,默认没勾选)——>确定后重启——>再进应该就好了。 解决方法2: ①.查看电脑中的Hyper-V服务是否关闭 1.打开控制面板-程序-程序和功能 2.双击启用或关闭Windows功能 3.把Hyper-V前面的勾去掉 如果后期发下没有反应,或者电脑本身Hyper-V的服务没有打开,可以先打开在关闭,试

m0_55901666的博客 26万+

MyBatis-Plus_04 代码生成器、多数据源(主从)、MyBatisX插件

MyBatis-Plus_04 代码生成器、多数据源(主从)、MyBatisX插件

weixin_52536274的博客 579

滚动时域优化方法

滚动时域优化(Receding Horizon Optimization, RHO),也被广泛称为模型预测控制(Model Predictive Control, MPC),是一种用于动态系统优化和控制的。其核心思想是“在每个当前时刻k,控制器只考虑未来一个(称为“预测时域”或“优化时域”,长度N)内的系统行为。(通过测量或估计得到)。(描述状态如何随输入和干扰变化)。(如果有,可能基于历史数据或假设)。在这个有限的未来时域[k, k+N-1]上,求解一个。这个优化问题的目标是找到一个。

m0_69522810的博客 2289

基于Spring Boot在线远程考试系统的设计与实现

结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。

ITbiyesheji的博客 1215

mybatis-plus代码生成器

MyBatis-Plus 代码生成器是一个自动化工具,用于快速生成。

m0_74140204的博客 6067

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

【SpringBoot】mybaitsPlus的多数据源配置

mybatis_plus库的product表移动到mybatis_plus_1库,这样每个库一张表,通过一个测试用例 分别获取用户数据与商品数据,如果获取到说明多库模拟成功。我们创建两个库,分别为: mybatis_plus(以前的库不动)与mybatis_plus_1 (新建),将。2、如果我们实现读写分离,将写操作方法加上主库数据源,读操作方法加上从库数据源,自动切换,是不是就能实现读写分离?目前我们就来模拟一个纯粹多库的一个场景,其他场景类似。当为true时,就严格@DS中的数据源,没有就报错。

m0_62645012的博客 1952

SOC-ATF 安全启动BL2流程分析(2)

Bl2的启动流程与bl1类似,主要区别是bl2的初始化流程比bl1更简单,但其可能需要加载更多的镜像,如bl31、bl32和bl33。由于bl2可以运行于el3或s-el1,它们的入口函数和处理流程都有所区别,为了简化分析我们选取比较常见的s-el1方式,以下为其总体执行流程:上图仅供参考,实际看一下代码结构:上面截图展示了 链接汇编文件,bl2_el3.ld.S 是指bl2 运行于el3;bl2.ld.S 是实现bl2运行于s-el1 .

z20230508的博客 1387

那些年对支付宝的研究[整理]

支付宝功能强大.他内部各个功能间的跳转是通过Uri 实现的.而使用window.location.href 即可.跟浏览器一样的协议.很方便 H5启动支付宝: alipays://platformapi/startapp?appId=20000067&url=网址 alipays://platformapi/startapp?appId=20000691&url=网址 ali...

技术专研 8914

MyBatisPlus详解

MyBatisPlus详解 为简化Mybatis而生,偷懒神器~

Zero摄氏度的博客 1万+

Unity最强动作战斗框架?Combat System Framework 深度解析

Combat System Framework 并不是一个简单的角色控制器,而是一套完整的动作游戏战斗开发框架。它借鉴了现代 AAA 游戏常见的架构思想,以 Gameplay Tag 为核心,结合 ScriptableObject 数据驱动设计,将技能、属性、Buff、伤害、武器、动画通知等系统有机整合在一起。同时,配套的可视化动画时间轴、Root Motion 工具和实时预览窗口,大幅优化了动作开发流程。当然,这套框架也有一定的学习门槛。

2403_88403568的博客 679

【Spring】SpringBoot整合MybatisPlus的基本应用

(简称 MP)是一个。

2201_76027234的博客 2049

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring Boot整合MyBatis-Plus与Druid:构建高效多数据源方案

在Java企业级应用开发中,数据库连接管理与持久层操作是核心基础。连接池技术通过复用数据库连接,有效解决了频繁创建和销毁连接带来的性能开销问题,而ORM框架则通过对象关系映射简化了数据访问层的开发。Druid作为一款功能强大的数据库连接池,不仅提供了高性能的连接管理,其内置的监控功能(如SQL执行时间分布统计)更是运维和性能调优的利器。MyBatis-Plus在MyBatis基础上进行了深度增强,通过通用Mapper和条件构造器等特性,大幅提升了CRUD操作的开发效率。将两者结合,能够为应用提供稳定、高效且

weixin_31421613的博客 237

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Mybatis-Plus 详解

官⽹:或介绍(简称MP)是⼀个MyBatis的增强⼯具,在MyBatis的基础上只做增强不做改变,-为简化开发、提⾼效率⽽⽣。

qq_52922453的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MyBatis-Plus(详细)

下面采用的是 SpringBoot 框架: **注意:**尽量不要同时导入mybatis 和 mybatis_plus,避免版本差异 配置(连接数据库) 在 application.yml 配置文件中添加 MySQL 数据库的相关配置: 在 spring boot 启动类中添加 @MapperScan 注解,扫描Mapper文件夹: 在对应的 mapper 上面添加 @Mapper 注解,并继承 BaseMapper 类: 配置日志(可选) 所有的SQL都是不可见的,所以在后台是希望看到SQL是怎么

TryMyBestToDo_的博客 9188

MybatisPlus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生(提供了快速使用mybatis的方式)。或说明目前我们使用MP自带的分页插件可以很友好的实现分页查询操作,但是如果一些查询需要我们自定义SQL,那该如何实现分页查询操作呢?实现流程自定义接口中直接传入Page分页对象即可;import com/*** @Description 定义mapper接口/**

m0_62943934的博客 4513

(一)mybatis-plus详细介绍

简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具, 是国内人员开发的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD 操作:内置通用 Mapper...

qq_39235296的博客 1612

MyBatis-Plus 框架详解

MyBatis-Plus 是一个 MyBatis 的插件,在 MyBatis 的基础上进行了功能扩展和增强。自动生成 MyBatis 的 mapper 接口以及对应的实现类。提供了一些通用的 CRUD 方法,如插入、更新、删除、查询等。支持 Lambda 表达式查询。提供了分页查询的功能。支持主键自动生成。提供了代码生成器,可以快速生成代码。

兴趣是最好的老师,勤能补拙 5868

MyBatis-Plus详解

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

chat_bot的博客 1万+

MyBatis-Plus

MyBatis-Plus(简称 MP) 是⼀个 MyBatis 的增强工具,MyBatis是基于jdbc的封装,MyBatis-Plus在 MyBatis 的基础上只做增强不做改变,为简化开发,提高效率而生。润物无声: 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。效率至上: 只需简单配置,即可快速进行单表 CRUD 操作,从而节省大量时间。丰富功能: 代码生成、自动分页、逻辑删除、自动填充、拦截器等功能⼀应俱全。

MissedID_的博客 5080

Mybatis-Plus 详解(速成版)

Mybatis 在Spring系列开发项目中占据重要的地位,但有一款框架提供的功能比他更强,那就是MyBatis Plus,但他与Mybatis 有何不同,又如何使用呢,本文目的意在拥有Mybatis框架的使用基础上,如何学习并过度到Mybatis-Plus。

ZHI_YUE的博客 4761

演示:MyBatis Plus 写业务代码,确实一把梭!

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~...

芋艿V 1654

MyBatis-Plus(实用篇)

Wrapper:条件构造抽象类,最顶端父类AbstractWrapper:用于查询条件封装,生成sql的where条件QueryWrapper:查询条件封装UpdateWrapper:update条件封装AbstractLambdaWrapper:使用Lambda语法LambdaQueryWrapper:用于Lambda语法使用的查询WrapperLambdaUpdateWrapper:用于Lambda语法更新WrapperUserMapper中定义接口方法。

从基础到源码解析的学习记录 2万+
上一篇: 9.从零开始学springboot-包管理神器-maven私库的安装和使用
下一篇: 17.从零开始学springboot-整合mybatisPlus-druid多源案例
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值