mybatis-210721-07---动态sql-内置参数_parameter_databaseId&bind使用

Mybatis如何通过databaseId属性支持不同数据库的不同语法 mybatis如何通过databaseId属性支持不同数据库的不同语法 阅读详情

mybatis-210721-07—动态sql-内置参数_parameter_databaseId&bind


EmployeeMapper.java

package com.bgy.mybatis.dao;

import java.util.List;
import com.bgy.mybatis.bean.Employee;

public interface EmployeeMapper {
	
	public List<Employee> getEmpsTestInnerParameter(Employee employee);
}

EmployeeMapper.xml(笔记在这儿哦)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bgy.mybatis.dao.EmployeeMapper">
	
	<!--
		mybatis中默认的两个内置参数:
			_parameter:
				代表整个参数
				单个参数:_parameter就是这个参数
				多个参数:参数会被封装为一个map,_parameter就代表这个map
			
			_databaseId:
				如果配置了databaseIdProvider标签
				_databaseId就代表当前数据库的别名oracle/mysql/...
	-->
	
	<select id="getEmpsTestInnerParameter" resultType="com.bgy.mybatis.bean.Employee">
		
		<!--
			bind:
				可以将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值
				
				把value的值赋给name,可以拼接字符串
		-->
		<bind name="_lastName" value="'%'+lastName+'%'"/>
		
		<if test="_databaseId=='mysql'">
			select 
				*
			from
				tbl_employee
			<if test="_parameter!=null">
				where
					last_name like #{_lastName}
			</if>
		</if>
		<if test="_databaseId=='oracle'">
			select 
				*
			from
				tbl_employee
			<if test="_parameter!=null">
				where
					last_name=#{_parameter.lastName}
			</if>
		</if>
	</select>
</mapper>

MybatisTest.java

package com.bgy.mybatis.test;

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

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;

import com.bgy.mybatis.bean.Department;
import com.bgy.mybatis.bean.Employee;
import com.bgy.mybatis.dao.EmployeeMapper;

class MybatisTest {
	
	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

	
	/**
	 * 测试sql——内置参数-parameter&databaseId和bind的使用
	 * @throws IOException
	 */
	@Test
	public void test() throws IOException{
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		try {
			EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
			
			List<Employee> list = mapper.getEmpsTestInnerParameter(new Employee(null,"a","",""));
			
			System.out.println(list);
		} finally {
			sqlSession.close();
		}
	}
	
}
Visual MODFLOW Flex 6.1新手入门:从数据导入到3D建模的完整工作流解析 本文为Visual MODFLOW Flex 6.1新手提供了从零开始构建地下水数值模型的完整工作流指南。详细解析了从项目规划、数据准备与导入,到构建三维概念模型、生成并运行数值模型,直至结果可视化与校准的核心步骤。帮助水文地质与环工领域初学者快速掌握这一专业软件,高效完成从数据到三维建模的全过程。 阅读详情

相关推荐

JLink版本不兼容?手把手教你解决APM32F003F6P6在Keil中烧写闪退和报错

本文详细解析了APM32F003F6P6在Keil中烧写闪退和报错的解决方案,重点介绍了JLink版本兼容性问题。通过实测不同版本组合,推荐使用JLink 7.20a或6.86b与Keil 5.25的黄金组合,并提供详细的降级驱动和工程配置步骤,帮助开发者高效解决烧写困境。

weixin_33694620的博客 416

Mybatis 兼容多种数据库(利用databaseId)

数据库:达梦,Mysql 增加配置类配置不通数据库databaseId标识 @Configuration public class BeanConfig { @Bean public DatabaseIdProvider getDatabaseIdProvider() { DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider(); Properties p = ne

Aaron 1万+

小白学习图像处理6——Canny边缘检测算法原理

目录结构一、高斯滤波二、梯度计算1、原理2、代码如下三、非极大值抑制三、双阈值检测四、matlab 的 edge函数五、总结 Canny边缘检测算法主要步骤:高斯滤波、梯度计算、非极大值抑制和双阈值检测。 一、高斯滤波   使用高斯滤波的目的是平滑图像,滤除图像中的部分噪声(因为微分算子对噪声很敏感)。高斯滤波具体办法是生成一个高斯模板,使用卷积进行时域滤波: img = im2double(im...

我有两颗糖 7791

MyBatis学习——databaseIdProvider和databaseId

有什么作用 databaseIdProvider和databaseId的作用简单来说就是让一个项目支持不同的数据库。 让一个项目支持不同的数据库在企业开发中是一个比较常见的需求。由于不同的数据库支持的sql语法稍有差别,所以某些功能需要根据数据库的不同书写不同的sql语句。对于这种需求,首先能够想到的解决方案就是针对不同的数据库维护不同的mapper.xml文件,但是这种方案会严重增加开发和维...

bobozai86的博客 1万+

FPGA实现PI控制

FPGA实现PI控制

m0_57319166的博客 3895

某知名系统漏洞挖掘与利用思路探索

本文以安全研究为目的,分享对该套系统的代码审计和漏洞挖掘过程,文中所提到的漏洞均已提交给CNVD&CITIVD,请勿用做非法用途。

C20220511的博客 1904

MyBatis知识点

Mybatis基础知识

weixin_51093248的博客 1138

1.为什么要学习MATLAB

学习MATLAB

FPGA/MATLAB学习教程/源码/项目合作开发 5807

springboot使用Mybatis中兼容多数据源的databaseId(databaseIdProvider)的简单使用方法

最近有兼容多数据库的需求,原有数据库使用的mysql,现在需要同时兼容mysql和pgsql,后期可能会兼容更多。mysql和pgsql很多语法和函数不同,所以有些sql需要写两份,于是在全网搜索如何在mapper中sql不通用的情况下兼容多数据库,中文网络下,能搜到的解决方案大概有两种:1.使用@DS注解的动态数据源;2.使用数据库厂商标识,即databaseIdProvider。第一种多用来同时连接多个数据源,且配置复杂,暂不考虑。

Variazioni的博客 5686

基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)(235)

基于STM32设计的老人摔倒检测报警系统,不仅能够实时监测老人的位置信息,方便在紧急情况下快速定位,还能通过陀螺仪模块精确检测老人的身体姿态,一旦判断为摔倒状态,系统将立即触发蜂鸣器报警,并通过4G网络向指定联系人发送短信警示,确保老人能够迅速得到援助。此外,系统还支持老人主动按下设备上的按键发送求助短信,增强了系统的灵活性和实用性。

4691

多思计组实验实验三、存储器读写实验

实验三、存储器读写实验

qq_53089329的博客 3652

MyBatis: databaseId的用法

这样,当MyBatis运行时,会根据当前的数据库是Oracle还是MySQL来匹配不同的SQL语句来执行。可以通过databaseId来区分执行的SQL是在MySQL上还是在Oracle上。二、根据不同的数据库语法写不同的SQL语句并配置相同的id。

amadeus_liu2的博客 3521

《RT-DETR魔术师》专栏介绍 & 优快云独家改进创新实战 & 专栏目录

通过本专栏的阅读,后续你也可以自己魔改网络,在网络不同位置(Backbone、head、neck、loss等)进行魔改,实现创新!!!

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 7367

mybatis--基础--2.8--xml配置--数据库厂商标识(databaseIdProvider)

我们当前使用的是mysql数据库,假设客户要使用oracle数据,我们应该修改sql 语句 databaseId=“oracle”

zhou920786312的博客 3064

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MyBatis之databaseIdProvider多数据库支持

一、databaseIdProvider官方描述MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。 这里什么

火柴盒 3万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SpringBoot+MyBatis: databaseId的用法

在真是的项目中可能存在同一个服务需要适配不同的数据库,但是不同数据库中对sql的写法不一样,就比如一个简单的结果拼接函数来说,达梦数据库中拼接函数是WM_CONCAT,mysql数据库中拼接函数是GROUP_CONCAT,而人大金仓和pgsql的拼接函数为array_agg,应对这样的情况我们需要想一个办法能够在一个sql中进行适配。上面只是一个例子,这个判断可以写在sql语句的任意位置,这样就可以根据不同的数据库执行不同的sql语句,这样就能够实现同一套代码可以适配不同的数据库。

qq_39990869的博客 1757

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

mybatis-plus下_databaseId的使用

根据mybatis官方文档(https://mybatis.org/mybatis-3/zh/configuration.html)和百度搜到的各种文档,给的配置都是如下:第一步配置mybatis配置文件,第二步在mapper里指定databaseId。

大胡子_biu 7752

mybatis databaseId

https://mybatis.org/mybatis-3/configuration.html#databaseIdProvider https://github.com/mybatis/spring-boot-starter/blob/master/mybatis-spring-boot-autoconfigure/src/test/java/org/mybatis/spring/bo...

aoeace 1640

mybatis databaseId的使用(多数据库切换)

项目中目前用的是Oracle数据库,未来不知道什么时刻确定要切换到MySql数据库,老板让现在支持mysql,未来切换只要改下配置灵活切到Mysql,项目用SpringBoot+Mybatis,配置很简单,网上搜了几个直接照着改老是不成功,试了好几个方法,下面分享下可以用的: 1.mybatis配置两个数据库 iwhalecloud.mysql.datasource.driver=com.mysql.jdbc.Driver #iwhalecloud.mysql.datasource.url=jdbc:mys

m0_67394002的博客 2914

【Mybatis】标签中statementType,databaseId,flushCache,keyColumn,keyProperty,timeout,useGeneratedKeys的使用

为了在平时工作中能快速完成任务,趁着有时间来总结下mybatis标签中的各种使用

shenhaiyushitiaoyu的博客 1685

Mybatis配置-数据库厂商标识(databaseIdProvider)

MyBatis将加载所有没有databaseId属性或具有与当前数据库匹配的databaseId属性的语句。如果找到具有和不具有databaseId的相同语句,则后者将被丢弃。当提供了属性时,DB_VENDOR数据库ID提供程序会在返回的数据库产品名称中查找与第一个找到的键相对应的属性值,如果没有匹配的属性,则设置为“null”。在这种情况下,如果getDatabaseProductName()返回“Oracle (DataDirect)”,则databaseId将设置为“oracle”。

hay23455的博客 1060

Spring boot + Mybatis Plus DatabaseId的使用

Spring boot + Mybatis Plus DatabaseId的使用 Mybatis中使用DatabaseId Mybatis中如果需要对DatabaseId进行支持需要在配置 mybatis-config.xml 中加入如下配置 <databaseIdProvider type="DB_VENDOR"> <property name="MySQL" value="mysql"/> <property name="Oracle" value=

m0_67402564的博客 3848

MyBatis_parameter&_databaseId & bind 绑定

mybatis默认还有两个内置参数: _parameter:代表整个参数 单个参数:_parameter就是这个参数

qq_36901488的博客 939

MyBatis笔记(三):动态sql

一、简述 动态SQL是MyBatis强大特性之一。极大的简化我们拼装SQL的操作。 动态SQL元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。 MyBatis采用功能强大的基于 OGNL 的表达式来简化操作 二、if判断 根据传入的参数,决定是否将该参数拼接到sql中 举例,查询员工,传入的参数不为空则查询时作为条件查询 DynamicSQLMapper.java DynamicSQLMapper.xml,在<if>标签中,test参数的值为判断表达式,根据传入的

qq_36370187的博客 1455

Mybatis使用databaseIdProvider属性实现不同开发环境下,对多种数据库的支持

看技术中台源码,对于两个不同版本的数据库——MySQL和Oracle数据库,都能支持,比较好奇是怎么实现,看了一下是使用到了databaseIdProvider这个技术。 启动类中通过注解的方式配置了mybatis的databaseIdProvider配置。 @Bean public DatabaseIdProvider getDatabaseIdProvider() { DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdP

qq_39004108的博客 1267

mybatis详解(五)bind动态绑定和_parameter的用法

getEmpsTestInnerParameter(Employee employee); -->                 bind:可以将OGNL表达式的值绑定到一个变量中,方便后来引用这个变量的值 -->            eName是employee中一个属性值           SELECT * FROM emp                       

zcw4237256的博客 3135
上一篇: mybatis-210721-06---动态sql-foreach批量插入
下一篇: mybatis-210721-08---动态sql-sql标签抽取可重用的sql
白光一
博客等级 码龄9年 0粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值