Python-VBA函数之旅-isinstance函数

目录

一、isinstance函数的常见应用场景:

二、isinstance函数使用注意事项:

三、如何用好isinstance函数?

1、isinstance函数:

1-1、Python:

1-2、VBA:

2、推荐阅读:

个人主页:神奇夜光杯-CSDN博客 



一、isinstance函数的常见应用场景:

        在Python中,isinstance()函数用于确定对象是否属于特定的类或类型,常见的应用场景有:

1、类型检查:当你需要根据对象的类型执行不同的操作时,isinstance()函数非常有用。例如,你可能需要根据变量的类型来格式化输出,或者根据类型执行不同的逻辑分支。

2、多态性支持:在面向对象的编程中,多态性允许使用父类引用处理子类对象;使用isinstance()函数可以确保即使子类有额外的行为或属性,代码也能正确处理它们。 

3、输入验证:在编写函数或方法时,你可能需要确保传入的参数是预期的类型。使用isinstance()可以在函数内部进行类型检查,并在传入错误类型时提供清晰的错误信息。

4、扩展性和灵活性:当你想让你的代码能够处理多种类型时,可以使用isinstance()函数来检查一个对象是否属于一系列类型中的任何一个,这使得代码更加灵活,能够处理更多种类的输入。

5、工厂模式:在工厂模式中,isinstance()函数可以用来确定应该创建哪种类型的对象;工厂函数接受一些参数,并使用isinstance()来确定应该返回哪种类型的对象实例。

6、类型安全的API设计:在设计API或库时,确保传入的参数类型正确是很重要的;使用isinstance()可以帮助你实现类型安全的接口,从而避免潜在的错误和异常。

7、与抽象基类(ABC)一起使用:在设计API或库时,确保传入的参数类型正确是很重要的,使用isinstance()函数可以帮助你实现类型安全的接口,从而避免潜在的错误和异常。

        总之,isinstance()函数在Python编程中是一个强大的工具,用于在运行时确定对象的类型,并根据需要执行相应的操作,它在类型检查、多态性实现、输入验证、扩展性和灵活性、工厂模式、设计类型安全的API及与抽象基类(ABC)一起使用等方面都有广泛的应用。

二、isinstance函数使用注意事项:

        在Python中,isinstance()函数是一个常用的工具,用于确定一个对象是否是一个已知的类型或类的实例。使用时,需注意以下几点:

1、类型元组:当你想检查对象是否属于多个类型之一时,可以传递一个类型元组给 isinstance(),确保元组中的类型是按照你的逻辑顺序排列的,因为一旦找到匹配的类型,isinstance()函数就会返回 True,并不会继续检查元组中的其他类型。

2、不要过度使用:尽管isinstance()函数很有用,但过度使用它可能会导致代码变得冗长和难以阅读。在某些情况下,使用更简洁的鸭子类型(duck typing)可能是更好的选择,即“如果它走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子”。这意味着,如果对象有你需要的方法或属性,你就可以使用它,而不必关心它确切的类型。

3、继承关系:当使用isinstance()检查一个对象是否是一个类的实例时,它也会检查该对象是否是该类子类的实例,这是多态性的基础,但也要确保你了解类的继承关系,以避免意外的类型匹配。

4、自定义类的比较:如果你定义了自己的类,并且想要通过isinstance()检查对象是否是你的类的实例,确保你的类定义正确,并且没有意外地覆盖了 `__instancecheck__` 方法,该方法会影响 isinstance()的行为。通常,你不需要直接操作这个方法,除非你有特殊的类型检查需求。

5、避免与type()函数比较:isinstance()和type()都可以用来检查对象的类型,但isinstance()更为推荐,因为它可以处理继承关系;而type()只会检查对象是否直接是某个特定类的实例,不会考虑继承。

6、性能考虑:虽然isinstance()函数的性能通常不是问题,但在性能关键的应用程序中,频繁的类型检查可能会对性能产生轻微影响。在这种情况下,可以考虑使用其他设计策略来减少类型检查的需要,比如使用接口或协议来定义对象的行为。

7、版本兼容性:不同版本的Python可能对isinstance()的行为有细微的差别,特别是当涉及到内置类型或特殊的元类行为时,确保你的代码在目标Python版本上进行了充分的测试。

        总之,只有遵循这些注意事项,你才可以更安全、更有效地使用isinstance()函数来进行类型检查。

三、如何用好isinstance函数?

        要在Python中用好isinstance()函数,你需要理解其用途、语法以及一些常见的应用场景,相关参考建议如下:

1、明确使用场景:首先,你需要明确为什么要使用isinstance()函数。通常,这是为了确定一个对象是否属于特定的类型或类的实例,这在你需要基于对象的类型执行不同操作时特别有用。

2、理解语法:isinstance()函数接受两个参数:要检查的对象和要比较的类型(或类型元组);如果对象是该类型的实例,则返回True,否则返回False。

3、处理继承关系:当使用isinstance()时,它会考虑继承关系,这意味着如果一个对象是一个类的子类实例,那么isinstance()也会返回True,这是多态性的一个体现,有助于编写更加灵活和可维护的代码。

4、检查多个类型:如果你想要检查对象是否属于多个可能的类型之一,可以将这些类型放在一个元组中,并将其作为第二个参数传递给isinstance()函数。

5、避免过度使用:虽然isinstance()在某些情况下很有用,但过度使用它可能会导致代码变得冗长和难以维护;在Python中,通常更倾向于使用鸭子类型(duck typing),即如果对象具有你所需的方法或属性,就可以认为它是合适的类型,而无需显式检查其类型。

6、结合异常处理:如果你期望对象必须是特定类型,并且如果不是该类型则程序无法继续执行,可以结合使用isinstance()和异常处理来确保类型正确。

7、考虑使用抽象基类:对于更复杂的类型检查,可以考虑使用Python的`collections.abc`模块中定义的抽象基类(ABCs),这些基类提供了更高级别的接口检查,而不仅仅是简单的类型匹配。

8、注意版本兼容性:不同的Python版本可能对isinstance()的行为略有不同,确保你的代码在目标Python版本上进行了充分的测试,并检查是否有任何与类型检查相关的已知变化。

9、代码清晰性:使用isinstance()时,确保你的代码清晰易读,避免在复杂的逻辑表达式中嵌套多个isinstance()调用,这可能会使代码难以理解;相反,考虑将类型检查逻辑分解为单独的函数或方法,以提高代码的可读性和可维护性。

        总之,只有通过遵循这些建议,你才能更有效地使用isinstance()函数来增强你的Python代码的类型安全性和灵活性。

1、isinstance函数:
1-1、Python:
# 1.函数:isinstance
# 2.功能:用于判断对象是否是类或者类型元组中任意类元素的实例
# 3.语法:isinstance(object, classinfo)
# 4.参数:
# 4-1、 object:实例对象
# 4-2、classinfo:类名可以是直接或间接类名、基本类型或者由它们组成的元组
# 5.返回值:如果对象的类型与classinfo类型相同则返回True;否则返回False
# 6.说明:
# 7.示例:
# 应用一:类型检查
# 示例1:检查整数类型
num = 123
if isinstance(num, int):print("num 是一个整数")
else:print("num 不是一个整数")
# num 是一个整数# 示例2:检查字符串类型
text = "Hello, Python!"
if isinstance(text, str):print("text 是一个字符串")
else:print("text 不是一个字符串")
# text 是一个字符串# 示例3:检查列表类型
my_list = [3, 5, 6, 8, 10, 11, 24]
if isinstance(my_list, list):print("my_list 是一个列表")
else:print("my_list 不是一个列表")
# my_list 是一个列表# 示例4:检查多个类型
item = "Myelsa"
if isinstance(item, (str, int)):print("item 是字符串或整数")
else:print("item 不是字符串也不是整数")
# item 是字符串或整数# 示例5:自定义类型检查
class MyClass:pass
obj = MyClass()
if isinstance(obj, MyClass):print("obj 是 MyClass 的一个实例")
else:print("obj 不是 MyClass 的一个实例")
# obj 是 MyClass 的一个实例# 应用二:多态性支持
# 示例1:形状类与多态性
class Shape:def draw(self):pass
class Circle(Shape):def draw(self):print("Drawing a circle")
class Rectangle(Shape):def draw(self):print("Drawing a rectangle")
class Triangle(Shape):def draw(self):print("Drawing a triangle")
def draw_shapes(shapes):for shape in shapes:if isinstance(shape, Circle):print("Drawing a circle specifically")shape.draw()elif isinstance(shape, Rectangle):print("Drawing a rectangle specifically")shape.draw()elif isinstance(shape, Triangle):print("Drawing a triangle specifically")shape.draw()else:print("Drawing a generic shape")shape.draw()
shapes = [Circle(), Rectangle(), Triangle()]
draw_shapes(shapes)
# Drawing a circle specifically
# Drawing a circle
# Drawing a rectangle specifically
# Drawing a rectangle
# Drawing a triangle specifically
# Drawing a triangle# 示例2:使用多态性处理不同数据类型的函数
def process_data(data):if isinstance(data, int):print(f"Processing integer: {data}")# 执行整数相关的操作elif isinstance(data, str):print(f"Processing string: {data}")# 执行字符串相关的操作elif isinstance(data, list):print(f"Processing list: {data}")# 执行列表相关的操作else:print(f"Unsupported data type: {type(data)}")
process_data(42)
process_data("Hello")
process_data([1, 2, 3])
process_data(3.14)
# Processing integer: 42
# Processing string: Hello
# Processing list: [1, 2, 3]
# Unsupported data type: <class 'float'># 应用三:输入验证
# 示例1:验证整数输入
def validate_integer_input(input_value):if isinstance(input_value, int):print("输入是一个整数")return Trueelse:print("输入不是一个整数,请重新输入")return False
# 测试函数
user_input = input("请输入一个整数: ")
try:user_input = int(user_input)  # 尝试将输入转换为整数if validate_integer_input(user_input):# 如果验证通过,进行后续操作pass  # 在这里添加你的代码
except ValueError:# 如果输入无法转换为整数,打印错误信息print("无效的输入,请输入一个有效的整数")
# 请输入一个整数: 1024
# 输入是一个整数# 示例2:验证字符串输入
def validate_string_input(input_value):if isinstance(input_value, str):print("输入是一个字符串")return Trueelse:print("输入不是一个字符串,请重新输入")return False
# 测试函数
user_input = input("请输入一个字符串: ")
if validate_string_input(user_input):# 如果验证通过,进行后续操作pass  # 在这里添加你的代码
# 请输入一个字符串: myelsa
# 输入是一个字符串# 示例3:验证列表输入,并检查元素类型
def validate_list_input(input_value):if isinstance(input_value, list):for item in input_value:if not isinstance(item, int):print("列表中包含非整数元素")return Falseprint("输入是一个整数列表")return Trueelse:print("输入不是一个列表,请重新输入")return False
# 测试函数
user_input = input("请输入一个由整数组成的列表(用空格分隔): ")
try:user_input_list = list(map(int, user_input.split()))  # 将输入转换为整数列表if validate_list_input(user_input_list):# 如果验证通过,进行后续操作pass  # 在这里添加你的代码
except ValueError:# 如果输入无法转换为整数列表,打印错误信息print("无效的输入,请输入一个由整数组成的列表")
# 请输入一个由整数组成的列表(用空格分隔): 3 5 6
# 输入是一个整数列表# 示例4:验证自定义类实例的输入
class Person:def __init__(self, name, age):self.name = nameself.age = age
def validate_person_input(input_value):if isinstance(input_value, Person):print("输入是一个 Person 类的实例")return Trueelse:print("输入不是一个 Person 类的实例,请重新输入")return False
# 测试函数
user_name = input("请输入姓名: ")
user_age = input("请输入年龄: ")
try:user_age = int(user_age)  # 尝试将年龄输入转换为整数person = Person(user_name, user_age)if validate_person_input(person):# 如果验证通过,进行后续操作pass  # 在这里添加你的代码
except ValueError:# 如果年龄输入无法转换为整数,打印错误信息print("无效的输入,年龄必须是一个整数")
# 请输入姓名: Myelsa
# 请输入年龄: 18
# 输入是一个 Person 类的实例# 应用四:扩展性和灵活性
# 示例1:处理不同数据类型的函数
def process_data(data):if isinstance(data, int):print(f"Processing an integer: {data}")# 执行整数相关的操作elif isinstance(data, str):print(f"Processing a string: {data}")# 执行字符串相关的操作elif isinstance(data, list):print(f"Processing a list: {data}")# 执行列表相关的操作elif isinstance(data, (dict, set)):print(f"Processing a collection: {data}")# 执行集合或字典相关的操作else:print(f"Unsupported data type: {type(data)}")
# 使用函数处理不同类型的数据
process_data(42)
process_data("Hello")
process_data([1, 2, 3])
process_data({"key": "value"})
process_data({1, 2, 3})
# Processing an integer: 42
# Processing a string: Hello
# Processing a list: [1, 2, 3]
# Processing a collection: {'key': 'value'}
# Processing a collection: {1, 2, 3}# 示例2:插件式架构
class PluginInterface:def execute(self):raise NotImplementedError("Subclasses must implement this method")
class PluginA(PluginInterface):def execute(self):print("Plugin A is executing")
class PluginB(PluginInterface):def execute(self):print("Plugin B is executing")
def run_plugin(plugin):if isinstance(plugin, PluginInterface):plugin.execute()else:print("The provided plugin does not implement the required interface")
# 创建插件实例并运行它们
plugin_a = PluginA()
plugin_b = PluginB()
run_plugin(plugin_a)
run_plugin(plugin_b)
# Plugin A is executing
# Plugin B is executing# 示例3:工厂模式
class Shape:pass
class Circle(Shape):def draw(self):print("Drawing a circle")
class Rectangle(Shape):def draw(self):print("Drawing a rectangle")
def create_shape(shape_type):if isinstance(shape_type, str):if shape_type == "circle":return Circle()elif shape_type == "rectangle":return Rectangle()else:print("Invalid shape type")return None
# 使用工厂函数创建形状对象
circle = create_shape("circle")
rectangle = create_shape("rectangle")
if circle:circle.draw()
if rectangle:rectangle.draw()
# Drawing a circle
# Drawing a rectangle# 应用五:类型安全的API设计
# 示例1:简单的API函数
def greet_person(name: str):if not isinstance(name, str):raise ValueError("Name must be a string")print(f"Hello, {name}!")
# 正确使用
greet_person("Myelsa")
# Hello, Myelsa!
# 错误使用,会抛出异常
greet_person(42)
# ValueError: Name must be a string# 示例2:带有多个参数和返回类型的API函数
def calculate_area(shape: str, **kwargs) -> float:if not isinstance(shape, str):raise ValueError("Shape must be a string")if shape == "circle":if not all(isinstance(v, (int, float)) for k, v in kwargs.items()):raise ValueError("Circle parameters must be numeric")radius = kwargs.get("radius", 0)return 3.14159 * radius ** 2elif shape == "rectangle":if not all(isinstance(v, (int, float)) for k, v in kwargs.items()):raise ValueError("Rectangle parameters must be numeric")length = kwargs.get("length", 0)width = kwargs.get("width", 0)return length * widthelse:raise ValueError("Invalid shape")
# 正确使用
area_circle = calculate_area("circle", radius=5)  # 输出圆的面积
area_rectangle = calculate_area("rectangle", length=10, width=5)  # 输出矩形的面积
# 错误使用,会抛出异常
calculate_area("triangle", base=3, height=4)  # 抛出 ValueError: Invalid shape
calculate_area("circle", radius="five")  # 抛出 ValueError: Circle parameters must be numeric# 示例3:使用类进行API设计
class BankAccount:def __init__(self, name: str, balance: float):if not isinstance(name, str):raise ValueError("Name must be a string")if not isinstance(balance, (int, float)):raise ValueError("Balance must be a number")self.name = nameself.balance = balancedef deposit(self, amount: float):if not isinstance(amount, (int, float)):raise ValueError("Deposit amount must be a number")if amount < 0:raise ValueError("Deposit amount must be positive")self.balance += amountprint(f"Deposited {amount}. New balance: {self.balance}")def withdraw(self, amount: float):if not isinstance(amount, (int, float)):raise ValueError("Withdraw amount must be a number")if amount < 0:raise ValueError("Withdraw amount must be positive")if amount > self.balance:raise ValueError("Insufficient funds")self.balance -= amountprint(f"Withdrawn {amount}. New balance: {self.balance}")
# 创建一个银行账户实例
account = BankAccount("Alice", 1000.0)
# 正确使用
account.deposit(500.0)  # 存款
account.withdraw(200.0)  # 取款
# Deposited 500.0. New balance: 1500.0
# Withdrawn 200.0. New balance: 1300.0
# 错误使用,会抛出异常
account.withdraw(-100.0)  # 抛出 ValueError: Withdraw amount must be positive
account.withdraw(1500.0)  # 抛出 ValueError: Insufficient funds
1-2、VBA:
略,待后补。
2、推荐阅读:

1、Python-VBA函数之旅-int()函数

Python算法之旅:Algorithm

Python函数之旅:Functions 

个人主页:神奇夜光杯-CSDN博客 

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

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

相关文章

基于spring boot学生综合测评系统

基于spring boot学生综合测评系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件…

typedef 定义函数指针

typdef int(*FUNC_TYPE)(int,int) FUNC_TYPE p NULL; 定义了一个函数指针 函数指针作为函数的参数的用法demon

黄金行情下跌有投资机会吗?

尽管黄金价格的波动常常引起投资者的高度关注&#xff0c;但行情的下跌未必只是警讯&#xff0c;亦可能蕴藏着某些难得的投资机会。总之&#xff0c;答案是肯定的——在黄金行情下跌时&#xff0c;依旧有适宜的投资机会&#xff0c;只是这需要投资者具备相应的应对知识和策略。…

美森快船和以星快船有什么区别?美线海运都有哪些快船?

在繁忙的国际海运市场中&#xff0c;快船服务以其高效、快捷的特点受到广大货主的青睐。其中&#xff0c;美森快船和以星快船作为知名的海运服务提供商&#xff0c;凭借着卓越的服务品质&#xff0c;在航运界树立了良好的口碑。那么&#xff0c;美森快船和以星快船究竟有何不同…

利用ollama和open-webui本地部署通义千问Qwen1.5-7B-Chat模型

目录 1 安装ollama 2 安装open-webui 2.1 镜像下载 3 配置ollama的模型转换工具环境 3.1 下载ollama源码 3.2 下载ollama子模块 3.3 创建ollama虚拟环境 3.4 安装依赖 3.5 编译量化工具 7 创建ollama模型 8 运行模型 参考文献&#xff1a; 1 安装ollama curl -fsSL …

2-2 任务:闰年判断

本次课&#xff0c;我们讨论了闰年的判断方法、关系运算符与关系表达式、逻辑运算符与逻辑表达式&#xff0c;以及流程控制结构中的选择结构。 闰年判断 闰年是为了使日历年与地球绕太阳公转的时间保持一致而设定的&#xff0c;具有366天。闰年的判断规则如下&#xff1a; 普…

16V/2A高集成功率MOS同步降压转换器SOT23-6封装

概述&#xff1a; PCD8020 是一款内部集成两个功率 MOS 的高效率 2A 同步整流降压转换器。 该器件提供PWM 与 PFM 两种控制模式&#xff0c; 能够在很宽的负载范围内实现高效率。PCD8020 采用小巧的 SOT23-6 封装&#xff0c; 外围器件少&#xff0c; 从而实现小尺寸的系统电源…

【算法】约瑟夫环

文章目录 题目一1.数组模拟1.1出圈顺序递归求出圈顺序 1.2最后出圈人 2.环形链表【DEMO】3.递推求最后出圈人3.13.2 题目二1.数组模拟2.递推求最后出圈人2.12.2 题目一 1-n编号 s开始1-m报数 报到m出圈 求出圈顺序or最后人 1.数组模拟 1.1出圈顺序 递归求出圈顺序 // AC输入…

python 如何判断两个字典是否相等

Python 字典的 cmp() 函数用于比较两个字典元素。 语法 cmp()方法语法&#xff1a; cmp(dict1, dict2)参数 dict1 -- 比较的字典。 dict2 -- 比较的字典。 返回值 如果两个字典的元素相同返回0&#xff0c;如果字典dict1大于字典dict2返回1&#xff0c;如果字典dict1小于…

为AI电脑生态注入强悍动力,安耐美PlatiGemini 1200W高性能电源

在DIY攒机的过程中&#xff0c;电源是非常重要的一环&#xff0c;现在高性能的硬件功耗往往很高&#xff0c;因此一款优秀的电源整个系统稳定运行的基石。最近&#xff0c;我发现一款由安耐美&#xff08;Enermax&#xff09;推出的PlatiGemini 1200W电源&#xff0c;它不仅满足…

ShardingSphere-JDBC快速入门

ShardingSphere-JDBC读写分离快速入门 一、ShardingSphere-JDBC 读写分离1.创建springboot程序1.1 添加依赖1.2 java代码1.3 配置 2.测试 二、ShardingSphere-JDBC垂直分片1.创建springboot程序1.1 导入依赖1.2 java代码1.3 配置 2.测试 三、ShardingSphere-JDBC水平分片1.创建…

flutter笔记-万物皆是widget

文章目录 helloFlluter自定义Widget优化 这篇文章后就不见写了&#xff0c;学flutter主要是为了更好的使用 flutter-webrtc&#xff0c;所以到这里基本就了解了大部分的知识&#xff0c;后续边用边查&#xff1b; 在flutter中所有的view都叫widget&#xff0c;类似文本组件Tex…

对象与JSON字符串互转

1、JSON字符串转化成JSON对象 JSONObject jsonobject JSON.parseObject(str); 或者 JSONObject jsonobject JSONObject.parseObject(str); 功能上是一样的&#xff0c;都是将JSON字符串&#xff08;str&#xff09;转换成JSON对象 jsonobject 。注意str一定得是以键值对存在…

C语言进阶 数据的存储(上)

一、 数据类型详细介绍 我们前面已经学习了基本的内置类型 char 字符数据类型 short 短整型 int 整型 long 长整型 long long 更长的整型 float 单精度浮点型 double 双精度浮点形 类型有什么意义呢&#xff1f; 1 使用这个类型开辟内存空间的大小 比如说 int 4个字节 short 两…

Python | Leetcode Python题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; class Solution:def firstMissingPositive(self, nums: List[int]) -> int:n len(nums)for i in range(n):while 1 < nums[i] < n and nums[nums[i] - 1] ! nums[i]:nums[nums[i] - 1], nums[i] nums[i], nums[nums[i] - 1]for …

算法刷题day46

目录 引言一、树的重心二、毕业旅行问题三、高精度乘法 引言 今天复习了一下高精度的所有模板&#xff0c;包括加法、减法、乘法、除法&#xff0c;因为自己当时在蓝桥杯的时候没有看出来那个题使用高精度&#xff0c;因为对于一个数的大小和一个数的长度&#xff0c;自己有时…

通过Bedrock Access Gateway解决方案快速访问Amazon Bedrock的多种大语言模型

Bedrock Access Gateway&#xff08;BAG&#xff09;解决方案提供了开箱即用、兼容 OpenAI 的代理功能&#xff0c;帮助用户轻松无缝地从 OpenAI 迁移到 Amazon Bedrock。 1. 概述 亚马逊云科技的 Amazon Bedrock 服务支持一系列领先的基础模型&#xff0c;为客户提供多种选择…

基于卷积神经网络的垃圾图像分类系统研究与实现

1.摘要 垃圾分类作为资源回收利用的重要环节之一, 可以有效地提高资源回收利用效率, 进一步减轻环境污染带来的危害. 随着现代工业逐步智能化, 传统的图像分类算法已经不能满足垃圾分拣设备的要求. 本文提出一种基于卷积神经网络的垃圾图像分类模型 (Garbage Classification Ne…

索引的最左匹配原则

索引的最左匹配原则 我们先创建一张测试表&#xff0c;表的两个字段用来创建联合索引 CREATE TABLE test(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,col1 INT,col2 INT,col3 INT );CREATE INDEX idx_c1c2 ON test(col1, col2);现在我们就可以分析查询sql脚本了 1.使用联合索…

【SpringBoot整合系列】SpringBoot配置多数据源

目录 背景技术选型配置多数据源思路(以两个为例)代码实现1.导入依赖2.各自的配置 3.各自的dataSourcenews数据库的smbms数据库的注意&#xff1a;Primary注解 4.各自的SqlSessionFactory等news数据库的smbms数据库的 5.去掉启动类头上的MapperScan6.各自的mapper接口7.各自的ma…