MyBatis的配置案例

news2024/11/27 9:46:39

Mybatis中Map的使用

如果需要所有的代码,可以看我上一篇

在接口中定义

  int addUser1(Map<String,Object> map);

插入语句

<insert id="addUser1">
        insert into user(id,name,pwd) values (#{userid},#{username},#{userPwd})
    </insert>

测试

    @Test
    public void test(){
        SqlSession sqlSession = MyUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map=new HashMap();
        map.put("userid",9);
        map.put("username","妮妮");
        map.put("userPwd","28592385");

        mapper.addUser1( map);
        sqlSession.commit();
        sqlSession.close();
    }

如果有多个参数,使用map;map中还可以自定义键的名字,当然如果键的名字改变,需要修改插入语句中值,要一一对应。好处是可以随意修改,而实体类传参不能随意修改。

属性

属性可以在外部进行配置,并可以进行动态替换。

使用的几种方式

第一种,组合使用

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
   <properties resource="db.properties">
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="123456"/>
    </properties>

第二种,引入外部

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=12345

优先级问题,如果同时在内部和外部配置name和password,就会先使用外部,外部优先级大于内部

无论是内部的配置还是外部的配置都需要跟值一一对应,因为这里是动态绑定的

<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>

解释一下,在每个值面前加前缀(jdbc.url)的目的,如果直接使用的话,会有报错,所以我就全部换了

类型别名

配置类型别名的三种方式

第一种,核心配置(mybatis-config.xml)文件中使用,有先后顺序,会有提示

 <typeAliases>
        <typeAlias type="com.qing.pojo.User" alias="user"></typeAlias>
    </typeAliases>

​​​​

第二种,指定实体类的包名

没有注解,user或User作为它的别名

<typeAliases>
  <package name="com.qing.pojo"/>
</typeAliases>

有注解,使用注解值作为它的别名,也需要扫描包,要需要配注解值,在实体类上,只是可以任意指定别名

<typeAliases>
  <package name="com.qing.pojo"/>
</typeAliases>
@Alias("hello")
public class User {...}

只要指定了别名,别名就可以代替包名+类名,所在的任何位置使用

映射器(mappers)

MapperRegistry:注册绑定我们的mapper文件

四种映射方式

方式一:resources绑定注册,推荐使用

<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="com/qing/dao/UserMapper.xml"/>
</mappers>

方式二:url,不建议使用

<!-- 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>

方式三:使用class文件绑定注册

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="com.qing.dao.UserMapper"/>
</mappers>

注意点:

  • 接口和它的Mapper配置文件必须同名
  • 接口和它的Mapper配置文件必须在同一个包下

方式四:使用包扫描

<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="com.qing.dao"/>
</mappers>

注意点:

  • 接口和它的Mapper配置文件必须同名
  • 接口和它的Mapper配置文件必须在同一个包下

如果没有注册就会报错

 

生命周期和作用域

理解我们之前讨论过的不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。

执行流程图:

 SqlSessionFactoryBuilder

一旦创建了 SqlSessionFactory,就不再需要它了 。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 

SqlSessionFactory(可以想象成数据库连接池)

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。用完需要关闭,否则浪费资源。 

 

 

这里的每一个Mapper,就代表一个具体的业务。上图mapper查询用户id

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

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

相关文章

Vue3-黑马(十)

目录&#xff1a; &#xff08;1&#xff09;vue3-antdv-全局提示与校验 &#xff08;2&#xff09;vue3-进阶-router-入门 &#xff08;3&#xff09;vue3-进阶-router-动态导入-嵌套路由-重定向 &#xff08;1&#xff09;vue3-antdv-全局提示与校验 当用户新增修改&…

redis(11)

一)基于Set集合实现点赞功能: 在我们的博客表当中&#xff0c;每一篇博客信息都有一个like字段&#xff0c;表示点赞的数量 需求: 1)同一个用户只能点赞一次&#xff0c;再次进行点赞则会被取消&#xff1b; 2)如果当前用户已经点赞过了&#xff0c;那么点赞按钮高亮显示&…

传输层:UDP协议

传输层中有两个重要的协议&#xff1a;TCP协议和UDP协议。 本博文分享的是UDP协议&#xff0c;本文将从UDP的协议格式、UDP的特定以及其缓冲区入手。 传输层 传输层的作用是负责数据能够从发送端传输到接收端&#xff0c;主要是传输策略。 端口号 端口号标识的是一个主机上进…

【AIGC提示工程 - Midjourney教程:三】如何利用Midjourney AI创作一幅杰出的艺术作品?

关注元壤教育公众号系统学习AIGC提示工程课程。 更多AIGC好博客&#xff0c;请移步访问AIGC博客派 要在Discord上使用Midjourney机器人&#xff0c;您需要输入一个指令。指令能帮助您创建图片、修改默认设置、监控用户信息以及执行其他有用的操作。如果想要生成一张图片&#x…

RHCSA之Linux目录结构

目录 Linux目录结构 Linux目录结构的特点 分区‘加载’于目录结构 Windows与Linux目录结构区别 工作目录、用户家目录及路径 Linux的文件类型大致可分为 查看文件系统类型 方法一 ls -l 路径 方法二 file 路径 RHCSA之Linux目录结构 使用树形目录结构来组织和管理文件 整个…

51单片机(十三)DS18B20温度传感器

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

第14届蓝桥杯C++省赛(初级)真题

一、选择题&#xff08;50分&#xff09; 第 1 题 单选题&#xff08;10分&#xff09; C中&#xff0c;bool类型的变量占用字节数为 ( )。 *选择题严禁使用程序验证&#xff0c;选择题不答或答错都不扣分 A.1 B.2 C.3 D.4 第 2 题 单选题&#xff08;10分&#xff09;…

Windows 下载与安装CUDA和Pytorch【安装教程、深度学习】

参考链接&#xff1a;Windows 下安装 CUDA 和 Pytorch 跑深度学习 - 动手学深度学习v2_哔哩哔哩_bilibili 0.准备工作 请确保你是NVIDIA的显卡&#xff08;不能是AMD、集成显卡&#xff09; 1.下载CUDA 打开developer.nvidia.com/cuda-downloads&#xff0c;打开有点慢 选择…

2023/5/14 数值计算方法考试复盘

第一题 问我1-()如果减少乘除次数,那么如何做出变形。 正确解法&#xff1a; 可以利用乘法分配律&#xff0c;将1拆分成1 - 1/2! 1/2! - 1/3! 1/3! - ... - 1/n! 1/n!&#xff0c;然后将拆分出来的两项合并&#xff0c;得到&#xff1a; 1 - (1/2! - 1/2!) - (1/3! - 1/3…

支付系统设计一:支付系统产品化

系列文章目录 支付系统设计一&#xff1a;支付系统产品化 支付系统设计二&#xff1a;统一开发框架 支付系统设计三&#xff1a;渠道网关设计01-总览 支付系统设计三&#xff1a;渠道网关设计02-客户端报文解析 支付系统设计三&#xff1a;渠道网关设计03-参数验证 支付系统设…

在 Windows 上安装 Docker

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习在 Windows 上安装Docker。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 Docker是什么 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可抑制的…

K8s(Kubernetes)学习(一):k8s概念及组件

Kubernetes中文文档&#xff1a;https://kubernetes.io/zh-cn/docs/home/ Kubernetes源码地址&#xff1a;https://github.com/kubernetes/kubernetes 一:Kubernetes是什么 首先要了解应用程序部署经历了以下几个时代&#xff1a; 传统部署时代&#xff1a;在物理服务器上运…

C语言——表达式求值中类型转换和优先级等问题

目录 1.隐式类型转换 2.算数转换 ​3.操作符的属性 1.隐式类型转换 C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换称为整型提升。 整型提升的意义&a…

Sentinel : 服务容错(降级熔断、流量整形)

什么是服务雪崩&#xff1f; 服务雪崩效应是一种因“服务提供者的不可用”&#xff08;原因&#xff09;导致“服务调用者不可用”&#xff08;结果&#xff09;&#xff0c;并将不可用逐渐放大的现象。 我来用一个模拟场景带你感受一下服务雪崩的厉害之处。假设我有一个微服…

小世界网络评估

小世界网络评估 文章目录 小世界网络评估[toc]1、网络小世界定义2、网络评估R代码 1、网络小世界定义 现实中许多网络巨型组件都发现了“小世界特性”。小世界特性是指 网络节点间最短路径通常较小网络聚集系数较高 网络最短路径L计算公式为 L 1 n ( n − 1 ) ∑ i ⩾ j d…

【JZ-7Y-16静态中间继电器 触点容量大、电阻小 抗干扰强 JOSEF约瑟】

系列型号&#xff1a; JZ-7Y-15静态中间继电器&#xff1b; JZ-7J-15静态中间继电器&#xff1b; JZ-7L-15静态中间继电器&#xff1b; JZ-7D-15静态中间继电器&#xff1b; JZ-7Y-16静态中间继电器&#xff1b; JZ-7J-16静态中间继电器&#xff1b; JZ-7L-16静态中间继…

自动化渗透测试自动化挖掘src(2)

文章目录 前言思路ICP备案子域名枚举收集可用服务漏洞攻击 前言 上一谈我们讨论了自动化渗透测试的实验&#xff0c;但是他过于依赖fofa&#xff0c;不得不承认&#xff0c;fofa在资产收集这方面做的确实很厉害&#xff0c;但是就是需要花钱&#xff0c;那有没有不需要花钱都手…

UI GameObject可以在Scene View中显示,但是在Game View不能显示

出现UI GameObject可以在Scene View中显示&#xff0c;但是在Game View不能显示这种问题&#xff0c;可能有很多种原因&#xff0c;例如Layer设定、Camera Clipping设定、font assets等问题。 对于TextMeshPro&#xff0c;还有Material Set的问题&#xff0c;见这篇文章。 而我…

PHP 8.2:它对 WordPress、插件和开发者意味着什么?

PHP 8.2.0于 2022 年 12 月 8 日首次亮相。作为一项重大更新&#xff0c;它带来了性能改进和更简单的语法。PHP 8.2 引入了更高的类型安全性作为一项功能&#xff0c;将null、false和true作为独立类型。可能挑战 WordPress 开发人员的最大变化之一是添加了只读类&#xff0c;它…

基于SSM/Layui框架的火影忍者风格学生宿舍管理系统

目录 1、项目简介 2、使用技术 3、功能介绍 实现的主要功能&#xff1a; 4、所有页面 基于SSM/Layui框架的火影忍者风格学生宿舍管理系统 1、项目简介 本项目是一套基于SSMLayui的高校宿舍管理系统&#xff0c;主要针对计算机相关专业的正在做毕业设计的学生和需要项目实…