MyBatis-Plus速成指南:通用枚举 多数据源

news2025/2/5 5:52:01

通用枚举:

  1. 概述:
    1. 表中有些字段值是固定的,例如性别(男或女),此时我们可以使用 MyBatis-Plus 的通用枚举来实现
  2. 数据库表添加字段:
  3. 创建通用枚举类型:
    @Getter
    public enum SexEnum {
        MALE(1, "男"),
        FEMALE(2, "女");
    
        @EnumValue
        private Integer sex;
        private String sexName;
    
        SexEnum(Integer sex, String sexName) {
            this.sex = sex;
            this.sexName = sexName;
        }
    }
  4. 配置扫描通用枚举:
    # 配置MyBatis日志
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      global-config:
        db-config:
          #配置 MyBatis-Plus 操作表的前缀
          table-prefix: t_
          #配置 MyBatis-Plus 的主键策略
          id-type: auto
          #配置扫描通用枚举
      type-enums-package: com.springboot.mybatisplus.enums
  5. 测试:
    //枚举使用:
    @Test
    public void testSexEnum(){
        User user = new User();
        user.setName("张三");
        user.setAge(20);
    
        //设置性别信息为枚举项,会将 @EnumValue 注解所标识的属性值存储到数据库
        user.setSex(SexEnum.MALE);
        userMapper.insert(user);
    }

代码生成器:

  1. 引入依赖:
    <!--代码生成器依赖-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.31</version>
    </dependency>
  2. 快速生成:
    public class FastAutoGeneratorTest {
        public static void main(String[] args) {
            FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus","root","root")
                    .globalConfig(builder -> {
                        //设置作者
                        builder.author("root")
                                .enableSwagger()    //开启 swagger 模式
                                .fileOverride()     //覆盖已生成文件
                                .outputDir("D://mybatis_lus");  //指定输出路径
                    })
                    .packageConfig(builder -> {
                        builder.parent("com.springboot")   //设置父包名
                                .moduleName("mybatisplus")  //设置父包名
                                //设置 mapperxml 生成路径
                                .pathInfo(Collections.singletonMap(OutputFile.mapperXml,"D://mybatis_lus"));
                    })
                    .strategyConfig(builder -> {
                        builder.addInclude("t_user")    //设置需要生成的表名
                                .addTablePrefix("t_","c_");     //设置过滤表前缀
                    })
                    //使用Freemarker 引擎模板,默认的是 velocity 引擎模板
                    .templateEngine(new FreemarkerTemplateEngine()) 
                    .execute();
        }
    }

多数据源:

  1. 简介:
    1. 适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等
  2. 模拟多库:
    1. 创建两个库,分别为:mybatis_plus(以前的库不动) 与 mybatis_plus_1,将 mybatis_plus 库的 product 表移动到 mybatis_plus-1 库,这样每个库一张表,通过测试用例分别获取用户数据和商品数据,如果获取成功,说明多库模拟成功
  3. 创建数据库及表:
    1. 创建数据库 mybatis_plus_1 和表 product
      CREATE DATABASE `mybatis_plus_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; use `mybatis_plus_1`;
      CREATE TABLE product
      (
      id BIGINT(20) NOT NULL COMMENT '主键ID',
      name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称 ',
      price INT(11) DEFAULT 0 COMMENT '价格 ',
      version INT(11) DEFAULT 0 COMMENT '乐观锁版本号 ',
      PRIMARY KEY (id));
    2. 添加测试数据
      INSERT INTO product (id, NAME, price) VALUES (1, '外星人笔记本 ', 100);
    3. 删除 mybatis_plus 库中 product 表:
      use mybatis_plus;
      DROP TABLE IF EXISTS product;
  4. 引入依赖:
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        <version>3.5.0</version>
    </dependency>
  5. 配置多数据源:
    1. 说明:把之前的数据库连接注释掉
      #多数据源
      spring:
        datasource:
          dynamic:
            #设置默认的数据库源或者数据源组,默认值即为 master
            primary: master
            #严格匹配数据源,默认 false, true 为匹配到指定数据源时抛异常
            strict: false
            datasource:
              master:
                url: jdbc:mysql://localhost:3306/mybatis_plus
                driver-class-name: com.mysql.jdbc.Driver
                username: root
                password: root
              slave_1:
                url: jdbc:mysql://localhost:3306/mybatis_plus_1
                driver-class-name: com.mysql.jdbc.Driver
                username: root
                password: root
  6. 创建用户 service:
    public interface UserService extends IService<User> {
    
    }
    @Service
    @DS("master")   //指定所操作的数据源
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    
    }
  7. 创建商品 service:
    public interface ProductService extends IService<Package> {
    }
    @Service
    @DS("slave_1")
    public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> {
    }
  8. 测试:
    @Autowired
    private UserService userService;
    @Autowired
    private ProductService productService;
    
    @Test
    public void testDynamicDate(){
        System.out.println(userService.getById(1L));
        System.out.println(productService.getById(1L));
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2292149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android项目中使用Eclipse导出jar文件

2014年3月24日 天气晴朗 关于打包Android组件肯定是有用到的&#xff0c;比如开发了一个模块&#xff0c;为了更好的复用&#xff0c;我们可能会将它打包成jar文件方便其他项目引用。这个很好理解&#xff0c;也很简单。网上有一堆关于用Eclipse将Android项目打包成jar文件的&…

网络安全学习 day4

防火墙的安全策略 规则--策略 条件 --- 检查报文的依据&#xff0c;防火墙将报文中携带的信息与条件逐一进行对比&#xff0c; 以此来判断报文是否是 匹配的 。不同的匹配条件之间属于 “ 与 ” 关系&#xff1b;相同的匹配条件中不同的参数信息之间的关系为 “ 或 ” 关系。…

智慧园区综合管理系统如何实现多个维度的高效管理与安全风险控制

内容概要 在当前快速发展的城市环境中&#xff0c;智慧园区综合管理系统正在成为各类园区管理的重要工具&#xff0c;无论是工业园、产业园、物流园&#xff0c;还是写字楼与公寓&#xff0c;都在积极寻求如何提升管理效率和保障安全。通过快鲸智慧园区管理系统&#xff0c;用…

【协议详解】卫星通信5G IoT NTN SIB33-NB 信令详解

一、SIB33信令概述 在5G非地面网络&#xff08;NTN&#xff09;中&#xff0c;卫星的高速移动性和广域覆盖特性使得地面设备&#xff08;UE&#xff09;需要频繁切换卫星以维持连接。SIB32提供了UE预测当前服务的卫星覆盖信息&#xff0c;SystemInformationBlockType33&#x…

《LLM大语言模型深度探索与实践:构建智能应用的新范式,融合代理与数据库的高级整合》

文章目录 Langchain的定义Langchain的组成三个核心组件实现整个核心组成部分 为什么要使用LangchainLangchain的底层原理Langchain实战操作LangSmithLangChain调用LLM安装openAI库-国内镜像源代码运行结果小结 使用Langchain的提示模板部署Langchain程序安装langserve代码请求格…

【Envi遥感图像处理】010:归一化植被指数NDVI计算方法

文章目录 一、NDVI简介二、NDVI计算方法1. NDVI工具2. 波段运算三、注意事项1. 计算结果为一片黑2. 计算结果超出范围一、NDVI简介 归一化植被指数,是反映农作物长势和营养信息的重要参数之一,应用于遥感影像。NDVI是通过植被在近红外波段(NIR)和红光波段(R)的反射率差异…

优选算法合集————双指针(专题二)

好久都没给大家带来算法专题啦&#xff0c;今天给大家带来滑动窗口专题的训练 题目一&#xff1a;长度最小的子数组 题目描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …

基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

糖化之前,为什么要进行麦芽粉碎?

糖化的目的是将麦芽中的淀粉转化为可发酵性的糖分&#xff0c;而糖化之前&#xff0c;进行麦芽粉碎是确保糖化效果的关键步骤。本文天泰将阐述麦芽粉碎的重要性及其对酿造过程的影响。 一、麦芽粉碎的目的 增加酶的作用面积&#xff1a;麦芽中的淀粉和蛋白质等物质需要通过酶…

PAT甲级1052、Linked LIst Sorting

题目 A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, you are supposed to sort the stru…

半导体器件与物理篇6 MESFET

金属-半导体接触 MESFET与MOSFET的相同点&#xff1a;它们的电压电流特性相似。都有源漏栅三极&#xff0c;强反型&#xff0c;漏极加正向电压&#xff0c;也会经历线性区、夹断点、饱和区三个阶段。 MESFET与MOSFET的不同点&#xff1a;在器件的栅电极部分&#xff0c;MESFE…

deepseek 本地化部署和小模型微调

安装ollama 因为本人gpu卡的机器系统是centos 7, 直接使用ollama会报 所以ollama使用镜像方式进行部署&#xff0c; 拉取镜像ollama/ollama 启动命令 docker run -d --privileged -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama 查看ollama 是否启动…

socket实现HTTP请求,参考HttpURLConnection源码解析

背景 有台服务器&#xff0c;网卡绑定有2个ip地址&#xff0c;分别为&#xff1a; A&#xff1a;192.168.111.201 B&#xff1a;192.168.111.202 在这台服务器请求目标地址 C&#xff1a;192.168.111.203 时必须使用B作为源地址才能访问目标地址C&#xff0c;在这台服务器默认…

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...

三、 实现&#xff1b; 三&#xff0e;三、编写应用程序&#xff1b; 此文主要是实现应用的主要编码工作。 1、 分层&#xff1b; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示&#xff1b;Helper主要是链接UI和数据库操作的中间层&#xff1b;DAL为对数据库的操…

Java BIO详解

一、简介 1.1 BIO概述 BIO&#xff08;Blocking I/O&#xff09;&#xff0c;即同步阻塞IO&#xff08;传统IO&#xff09;。 BIO 全称是 Blocking IO&#xff0c;同步阻塞式IO&#xff0c;是JDK1.4之前的传统IO模型&#xff0c;就是传统的 java.io 包下面的代码实现。 服务…

Haproxy+keepalived高可用集群,haproxy宕机的解决方案

Haproxykeepalived高可用集群&#xff0c;允许keepalived宕机&#xff0c;允许后端真实服务器宕机&#xff0c;但是不允许haproxy宕机&#xff0c; 所以下面就是解决方案 keepalived配置高可用检测脚本 &#xff0c;master和backup都要添加 配置脚本 # vim /etc/keepalived…

98,【6】 buuctf web [ISITDTU 2019]EasyPHP

进入靶场 代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;通常用于调试或展示代码&#xff0c;方便用户查看代码逻辑 highlight_file(__FILE__);// 从 GET 请求中获取名为 _ 的参数值&#xff0c;并赋值给变量 $_ // 符号用于抑制可能出现的错误信息&#xff…

九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)

九. Redis 持久化-RDB(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位) 文章目录 九. Redis 持久化-RDB(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位)1. RDB 概述2. RDB 持久化执行流程3. RDB 的详细配置4. RDB 备份&恢…

小程序越来越智能化,作为设计师要如何进行创新设计

一、用户体验至上 &#xff08;一&#xff09;简洁高效的界面设计 小程序的特点之一是轻便快捷&#xff0c;用户期望能够在最短的时间内找到所需功能并完成操作。因此&#xff0c;设计师应致力于打造简洁高效的界面。避免过多的装饰元素和复杂的布局&#xff0c;采用清晰的导航…

(done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)

网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/thread.html (任务1教会了你如何用 C 语言调用汇编&#xff0c;编译后链接即可) 任务1&#xff1a;Uthread: switching between threads (完成) 在这个练习中&#xff0c;你将设计一个用户级线程系统中的上下文切…