Mybatis配置动态数据源以及参数传递等

Mybatis必知必会

一、Mybatis动态加载数据源

    在配置数据源连接时,在企业的真实开发中数据源一般都会写在配置文件中,而不会直接写在mybatis的核心配置文件中
所以,Mybatis为了方便开发人员去动态的获取数据源连接制定了一些特定的标签用于加载这些数据源。

    具体做法如下:

    <!--用于加载配置文件--><properties resource="jdbc.properties"></properties>

    全部的配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--用于加载配置文件--><properties resource="jdbc.properties"></properties><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!-- 这的键要和 配置文件中的键保持一致--><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments>
</configuration>

    jdbc的配置文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC&rewriteBatchedStatements=true&characterEncoding=utf-8
jdbc.username=用户名
jdbc.password=密码

二、Mybatis参数传递

    在jdbc时,参数传递可以通过? 来生成动态的SQL语句,然后进行SQL的动态赋值。但在Mybatis中
我们需要学习特定的标签进行参数的传递以及属性的赋值。

第一种方式:

#{参数名} 参数的取值   告诉 MyBatis 创建一个预处理语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中

第二种方式:

${参数名} 字符串替换   有时你就是想直接在 SQL 语句中直接插入一个不转义的字符串,就可以使用 ${} 来进行字符串的替换

单值传递:

原则: 在传递参数时,mybatis取值时和参数列表中的名字无关,和下标的索引有关

原因: java中jvm不维护形参变量
举例: 一下代码可以取到值。

List<User> getUserList(String name);
<select id="getUserList" reslutType="user">SELECT  * FROM user WHERE name = #{abc}
</select>
多值传递:

原则 如果在传递多个参数的时候,由于jvm不维护形参变量,Mybatis会按照索引下表来取值
有两种方式来进行取值

  • 第一种 arg0,arg1,…
  • 第二种 param1,param2,…
    举例:
 Map getUserByNA(String name,String age);
<select id="getUserByNA" resultType="map">SELECT * FROM user WHERE name=#{param1} AND age=#{param2}
</select>
通过@Param注解进行参数传递 作用类似于map
import org.apache.ibatis.annotations.Param;
Map getUserByNA(@Param("name") String name,@Param("age") String age);
<select id="getUserByNA" resultType="map">SELECT * FROM user WHERE name=#{name} AND age=#{age}
</select>

三、 Mybatis中的包扫描

    在配置映射文件时,当有多个xml映射文件时,开发人员需要配置多个resource,所以Mybatis官方为了减少这种频繁的配置资源
就引入了 package 标签用于配置多个 xml资源。

<mappers><!--开启包扫描之后 在映射文件中无须写全类名配置该标签时 一定要注意 建立的文件夹要和接口的文件夹保持一致--><package name="com.atguigu.mapper"/> 
</mappers>

在这里插入图片描述

Mybatis中的主键自增回显功能

通常在进行sql语句的增加和删除时,开发者通常需要考虑增加的数据的主键时多少?此时就需要开启主键回显功能

<!--
useGeneratedKeys 开启主键回显
keyProperty 映射的属性 一般为 id-->
<insert id="addUser" useGeneratedKeys="true" keyProperty="id">insert into user values(null,#{name},#{age},#{sex})
</insert>

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

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

相关文章

TypeScript快速入门 - 类的使用

TypeScript 类 1、类的声明 关键字&#xff1a;class class Child {} 2、类的继承 关键字&#xff1a;extends class Father{ }class Child extends Father {} 3、类与接口 关键字&#xff1a;implments interface IMan {name: string }class Father implements IMan {na…

c语言题目之斐波那契数列

文章目录 题目一、什么叫斐波那契数列1&#xff0c;由来2&#xff0c;定义 二、代码编写总结 题目 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、什么叫斐波那契数列 1&#xff0c;由来 在数学历史上&#xff0c;欧洲黑暗时期过后&#xff0c;第…

关于:必应搜索页面自动返回顶部

最近用bing用得比较多&#xff0c;有一个现象特别影响使用体验&#xff0c;使用 Bing 搜索引擎进行搜索时&#xff0c;查看搜索结果后返回上一页&#xff0c;搜索结果页面会显示到顶部。 也就是说&#xff0c;我如果看完了某一条结果&#xff0c;现在我想返回去搜索页进入另外…

web3d-three.js场景设计器-sprite广告牌

three.js使用Sprite精灵实现文字或者图片广告牌1.将文字绘制到Canvas&#xff0c;调整对应宽高。2.作为Cavans材质绑定到Sprite3.加载到场景调整适当的scale function createLabel({ text, fontSize, textColor, color, imageUrl }) { return new Promise((resolve, reject) &…

数据结构学习 jz66 构建乘积数组

关键词&#xff1a;数学 双指针 方法一&#xff1a;这个题目我一开始做不知道不能用除法。我做的&#xff1a;[ 用时: 12 m 12 s ] 用了除法 分类讨论 方法二&#xff1a;后来看了提示&#xff0c;双指针&#xff0c;两边各开始乘。 方法三&#xff1a;然后又看了答案可以节…

利用Java的加锁文件机制实现只运行一个进程实例

public static void main(String[] args) { if(isStarted()) { JOptionPane.showMessageDialog(null, "软件正在运行中"); System.exit(0); } //start app; } private static FileLock lock null; // 判断该应用是…

vue 使用mock模拟数据

vue 使用mock模拟数据 安装依赖 cnpm install axios --save cnpm install mockjs --save-dev cnpm install json5 --save-dev在根目录下&#xff0c;新建一个mock文件&#xff0c;且创建如下文件 utils.js index.js const Mock require(mockjs) const { param2Obj } …

基于selenium的pyse自动化测试框架

介绍&#xff1a; pyse基于selenium&#xff08;webdriver&#xff09;进行了简单的二次封装&#xff0c;比selenium所提供的方法操作更简洁。 特点&#xff1a; 默认使用CSS定位&#xff0c;同时支持多种定位方法&#xff08;id\name\class\link_text\xpath\css&#xff09…

【电脑技巧】Win11关闭自动更新

要想彻底关闭Windows电脑的自动更新&#xff0c;仅仅从系统设置里面选择暂停更新是完全不够用的&#xff0c;只有将windows自动更新的服务关闭掉&#xff0c;才能有效阻止其更新。 关闭win11电脑自动更新的办法&#xff0c;具体操作如下&#xff1a; 1.在winr运行框中输入servi…

8 微信小程序支付

8 微信小程序支付 9 微信小程序支付概述1.沙箱环境2.微信小程序支付2.1 微信小程序平台2.2 商户平台账号&#xff08;企业&#xff09;2.3 账号 3. 微信支付的步骤4.案例4.1 用户登录4.2 支付4.3 微信通知 9 微信小程序支付概述 各位小伙伴想要博客相关资料的话关注公众号&…

vue3中,vue-echarts基本使用(柱状图、饼图、折线图)

注意&#xff1a;vue-echarts在使用前要先安装echarts&#xff0c;不要只安装vue-echarts这一个 echarts官网地址&#xff1a;Apache EChartsApache ECharts&#xff0c;一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xf…

几个Python小案例,爱上Python编程!

Python是一种面向对象的解释型编程语言&#xff0c;源代码与解释器CPython遵守GPL协议&#xff0c;Python语法简洁清晰。 语法简洁清晰&#xff0c;那么我们用少量的Python代码能做哪些有趣的东西&#xff1f;温馨提示&#xff1a;文末必看。 一、画爱心表白 1、图形都是由一…

微软Power Platform使用Canvas app画布应用添加自定义连接器调用外部API展示数据

微软Power Platform使用Power Apps的Canvas app画布应用添加自定义连接器&#xff0c;调用外部API展示数据 目录 微软Power Platform使用Power Apps的Canvas app画布应用添加自定义连接器&#xff0c;调用外部API展示数据1、在Power Apps中找到自定义连接器2、创建一个空白的自…

CentOS7中将MySQL注册为系统服务开机启动

实际生产环境中为了避免重启服务器后所有的服务都手动启动带来的麻烦&#xff0c;建议所有基础服务都设置为开机自动启动。本章节我们主要演示在Centos7中如何将MySQL注册为系统服务&#xff0c;并实现开机自动启动。 ① 手动启动mysql&#xff0c;查看进程信息&#xff0c;复制…

XTuner 微调 课程学习

大语言模型于海量的文本内容上&#xff0c;以无监督和半监督的方式进行训练的 模型微调的目的&#xff1a;使其在具体的使用场景或领域中输出更好的回答 增量预训练——给模型喂新的领域知识&#xff1b; 指令跟随或指令微调—— 基于海量的预训练数据训练出来的模型通常叫做…

SD-WAN解决跨国公司海外工厂网络安全问题

在跨境业务蓬勃发展的今天&#xff0c;越来越多的大型企业出于人力成本的考虑&#xff0c;在人力成本较低的发展中国家建立工厂。然而&#xff0c;传统基于路由器的网络架构已无法为这些跨国企业提供可靠的安全网络。那么&#xff0c;如何解决跨国企业海外工厂的网络难题呢&…

关于Python —— Python教程

开始 Python 是一个易于学习、使用和高效阅读的编程语言。它具有简洁的英文语法&#xff0c;编写更少的代码&#xff0c;让程序员专注于业务逻辑而不是语言本身。 本教程将从深度、专注细节上去理解 Python 这门语言。初学者可以参考此教程理解相应的内容&#xff0c;本教程将…

选中图层为什么不能建立3D模型---模大狮模型网

在Photoshop CC 2021(也就是PS6)中&#xff0c;要将选中的图层转换为3D模型&#xff0c;需要满足以下几个条件&#xff1a; 图层类型支持&#xff1a;只有特定类型的图层可以被转换为3D模型。通常&#xff0c;普通的像素图层、矢量图层和形状图层都可以进行转换。但是&#xff…

软件测试|Python数据可视化神器——pyecharts教程(十二)

使用pyecharts绘制关系网图 简介 关系网图是一种可视化工具&#xff0c;用于展示各个元素之间的关联关系。在数据分析和可视化中&#xff0c;关系网图通常用于展示网络、社交关系、知识图谱等方面的数据。Pyecharts 是一个功能强大的 Python 数据可视化库&#xff0c;可以轻松…

003-90-14【SparkSQLDFDS】龙井村寸头二大爷家女儿小红用GPT 学习DataFrame 的创建和使用--入门教程

【SparkSQL&DF&DS】DataFrame 的创建和使用 【SparkSQL&DF&DS】2,DataFrame 的创建和使用1, 创建2&#xff0c; show3, printSchema4, select...show5, filter6&#xff0c; group by...count7&#xff0c;创建局部视图和全局视图8&#xff0c;spark sql 【Spa…