Mybatis【核心配置文件说明】

news2025/1/12 19:32:54

配置解析

1、核心配置文件

  • mybatis-config.xml

在这里插入图片描述
注意:

  • 在配置 mybatis-config.xml 时,要注意标签的顺序:
    在这里插入图片描述

2、环境变量(environments)

MyBatis 可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory 实例只能选择一种环境。直接通过设置environments的default参数的值来切换不同的环境(比如Oracle、MySQL、Sqlite)

<environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="Yan1029."/>
                </dataSource>
            </environment>
        </environments>

![在这里插入图片描述](https://img-blog.csdnimg.cn/31888777e62e40b8a3ad1b7de1f42303.png)

3、属性(Properties)

  • 我们可以通过properties属性来实现引用配置文件。
  • 这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件(db.properties、log4j.properties)中配置这些属性,也可以在 properties 元素的子元素中设置。

编写一个Java属性文件 db.peroperties:
注意:

  1. 不需要在& 后面+ amp;
  2. mysql8版本对应的驱动是 com.mysql.cj.jdbc.Driver
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=xxxxxx

在核心配置文件中引用:

  • xml文件需要注意标签的顺序,mybatis-config.xml 中,properties标签必须在environments标签之上
<configuration>

    <properties resource="db.properties"/>

        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>

    <mappers>
        <mapper resource="com/study/dao/UserMapper.xml"/>
    </mappers>
</configuration>

此外,在properties标签中也可以设置属性值,但是,相同字段时,外部配置文件优先级 > properties标签

<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="root"/>
  <property name="password" value="xxxx"/>
</properties>

4、类型别名(typeAliases)

  • 类型别名可为 Java 类型设置一个缩写名字。
  • 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
  • typeAliases 标签应到放到 mybatis-config.xml 的第三个标签位置。(也就是 properties > seeting > typeAliases)

问题:

  • 在我们之前的 UserMapper.xml 映射文件中,存在大量的类名冗余。我们通过在 mybatis-config.xml 中设置别名来将这些全限定名简化。

在这里插入图片描述
实现:

  • 在mybatis-config.xml 中新增下面的语句
    <typeAliases>
        <typeAlias type="com.study.pojo.User" alias="User"/>
    </typeAliases>
  • 也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
    <typeAliases>
        <package name="com.study.pojo"/>
    </typeAliases>

在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
在这里插入图片描述

这样我们原本需要写 “com.study.pojo.User” 就简化为 “user” 了。

总结

  • 在实体类比较少的时候,使用第一种方式。
  • 在实体类特别多的时候,使用第二种方式。
  • 第一种方式可以自定义别名,第二种需要注解再能使用注解的名称作为别名。

下面是一些为常见的 Java 类型内建的类型别名。除了普通的数据类型采用 下划线+类型名 作为别名之外,包装类型和集合类型都是使用小写作为别名的。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5、seeting(设置)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

  • logImpl
    • 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
  • cacheEnabled
    • 开启缓存
  • lazyLoadingEnabled
    • 懒加载

6、其它配置

  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
    • mybatis-generator-core
    • mybatis-plus

7、映射器(mappers)

在这里插入图片描述

1. 使用相对于类路径的资源引用

    <mappers>
        <mapper resource="com/study/dao/UserMapper.xml"/>
    </mappers>

2. 使用映射器接口实现类的完全限定类名

    <mappers>
    <mapper class="com.study.dao.UserMapper"/>
    </mappers>

注意点:

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

3. 将包内的映射器接口实现全部注册为映射器

    <mappers>
        <package name="com.study.dao"/>
    </mappers>

注意点:

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

8、作用域和生命周期

在这里插入图片描述

不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。

SqlSessionFactoryBuilder

  • 一旦创建生成了 SqlSessionFactory,就不再需要它了。

SqlSessionFactory

  • 可以理解为数据库连接池

  • 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。

  • SqlSessionFactory 的最佳作用域是应用作用域。(程序开始它就开始,程序结束它就结束)

  • 最简单的就是使用单例模式或者静态单例模式。(保证全局只有一份)

SqlSession

在这里插入图片描述

  • 图中的也每一个 Mapper 代表一个具体的业务!
  • 每个线程都应该有它自己的 SqlSession 实例。(连接到连接池的一个请求)
  • 需要开启和关闭请求
  • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。(所以用完赶紧关闭释放掉,否则资源被占用!尽量写到 finally 中确保关闭)

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

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

相关文章

现代操作系统(下)

第六章 死锁 在计算机系统中有很多独占性的资源&#xff0c;在任一时刻它们都只能被一个进程使用。两个进程同时使用同一文件系统表中的表项会引起文件系统的瘫痪。正因为如此&#xff0c;操作系统都具有授权一个进程&#xff08;临时&#xff09;排他地访问某一种资源的能力。…

【AcWing】夏季每日一题2023 -- 4382. 快速打字 -- Java Version

题目链接&#xff1a;https://www.acwing.com/problem/content/4385/ 1. 题解&#xff08;4382. 快速打字&#xff09; y总视频讲解&#xff1a;https://www.acwing.com/video/4743/ 类似题目&#xff1a;AcWing 2816. 判断子序列 1.1 双指针&#xff1a;判断子序列 ⭐ 时间复…

一文吃透MAUI、WinUI3和WPF的优势及劣势

引言&#xff1a; 在应用程序开发领域&#xff0c;选择合适的框架对于开发人员和业务来说至关重要。本文将比较并对比三个流行的用户界面框架&#xff1a;MAUI&#xff08;Multi-platform App UI&#xff09;、WinUI 3和WPF&#xff08;Windows Presentation Foundation&#x…

element ui table表格(表头、表体)样式

效果图如下 1.表头样式&#xff1a;header-cell-stayle 2.表体样式 在methods中写 在style中

使用Qt/C++实现WGS84、高德GCJ-02、百度BD-09坐标系间相互转化

在做地图相关开发时候&#xff0c;绕不开不同坐标系间的转化&#xff0c;因此我根据查阅相关资料后将不同坐标系间的转换封装到一个GeoTranslate类中&#xff0c;该类转换函数不仅支持Qt/C调用&#xff0c;同时可在QML中直接调用&#xff0c;配合上QML/Map很方便&#xff0c;我…

大咖培训讲座|高性能计算专场 认识真正的高性能计算,探究如何成为高性能计算工程师 ...

猿代码科技高性能计算讲座原文——OpenBLAS创始人无保留分享 我们如何成为一个高性能计算的工程师&#xff0c;或者这种性能优化的这一部分的软件工程师。 我其实想了一下&#xff0c;这一部分的入门的基础其实没那么难。 就是更主要的话&#xff0c;我还是在于兴趣和自驱力…

idea自定义类注释以及方法注释,无警告

背景 idea&#xff1a;IntelliJ IDEA 2023.1.3 (Ultimate Edition) 效果 类 方法 正式&#xff1a;类 设置 代码 /** * author: 你的名字* date: ${DATE} on ${TIME}* desc: $NAME*/注意&#xff0c;请全部复制&#xff0c;空行也要&#xff0c;看设置截图选中部分 …

Jenkins定时执行JMeter脚本并查看测试报告实现

【整体思路】 通过Tomcat启动Jenkins服务&#xff0c;在Jenkins中创建自动化测试项目&#xff0c;项目配置中配置构建时执行的动作&#xff0c;配置构建后动作展示报告 【涉及软件及版本信息】 Tomcat版本&#xff1a;9.0.76 Jenkins版本&#xff1a;2.332.3&#xff08;注…

ES批量上传数据 - Python操作ES

代码 # -*- coding: utf-8 -*- # Author : markadcimport randomfrom elasticsearch import Elasticsearch, helpersurl http://localhost:9200/ client Elasticsearch(url) index testsome [] for i in range(1, 10001):docu {uid: i, age: random.randint(1, 100)} …

ChatGPT中的Token:了解聊天模型的基本单位

✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区 &#x1f4d9; 专栏地址&#xff1a;AI大模型 ChatGPT中的Token是什么&#xff1f; 在ChatGPT…

23-BOM和常见的BOM对象

一、是什么 BOM (Browser Object Model)&#xff0c;浏览器对象模型&#xff0c;提供了独立于内容与浏览器窗口进行交互的对象 作用&#xff1a;跟浏览器做一些交互效果&#xff0c; 如何进行页面的后退&#xff0c;前进&#xff0c;刷新&#xff0c;浏览器的窗口发生变化&am…

ECS云服务器U实例评测,可以免费体验哦

目录 一、ECS云服务器U实例介绍 话题一、U实例使用体感如何&#xff0c;是否和主售型实例有区别&#xff0c;具体体现在哪里&#xff1f; 话题二、结合相关数据材料&#xff0c;对您感兴趣的场景 话题三、使用u实例是否为您的云上业务或者测试项目提供了帮助支持&#xff1…

Axure教程——表格内部修改

本文介绍的时用Axue中的中继器制作表内修改效果 效果 预览地址&#xff1a;https://w97xns.axshare.com 功能 点击某条数据的”编辑“按钮可以修改此条数据的每项数据&#xff0c;”编辑“和”删除“按钮变为”保存“和”取消‘按钮 制作 需要的元件&#xff1a;矩形、中继…

asp.net MVC

文件目录 页面 HTML与Script的联系 HTML元素通过调用脚本中的function来触发前端的动作要进行的后端逻辑操作 Script中通过选择器$(“#str”)来改变前端HTML的显示数据 Script中有两种类型的函数模式 $(function(){ … }) &#xff1a;window.onload时调用。function btnRese…

​Chamilo 学习管理软件存在命令执行漏洞(CVE-2023-34960)

Chamilo 学习管理软件存在命令执行漏洞&#xff08;CVE-2023-34960&#xff09; 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff…

Python基础语法笔记整理(黑马8天学会python笔记)

Python 第一章、基础语法 01.字面量(写在代码中的固定的值) 02.注释 # 单行注释 """ 多行注释 """03.变量 变量无类型&#xff0c;数据有类型 变量名 变量值04.数据类型 数据类型&#xff1a; type()05.类型转换 字符串转数字&#xff…

【unity实战】制作一个类帝国时代、红警——RTS战略性游戏

文章目录 先来看看实现的最终效果什么是RTS游戏一、两种方法实现相机的移动旋转缩放以及拖拽功能前言准备第一种办法1. 移动1.1 代码实现&#xff0c;里面都写了详细的中文注释&#xff0c;就不过多解释了1.2 效果&#xff1a;1.3 问题&#xff1a; 2. 缩放2.1 代码 3. 限制范围…

Linux内核TCP参数调优全面解读

Linux内核TCP参数调优全面解读 前言 TCP 性能的提升不仅考察 TCP 的理论知识&#xff0c;还考察了对于操心系统提供的内核参数的理解与应用。 TCP 协议是由操作系统实现&#xff0c;所以操作系统提供了不少调节 TCP 的参数。 如何正确有效的使用这些参数&#xff0c;来提高 T…

微前端框架MicroApp入门学习笔记(一)

1、简介 微前端是一种架构风格&#xff0c;旨在通过将前端应用程序拆分为更小、更可管理的部分&#xff0c;使多个团队能够独立开发、部署和维护这些部分&#xff0c;从而实现前端的可扩展性和可维护性。   MicroApp框架是京东出品的一种用于构建微前端架构的开源框架&#x…

Linux系统开机启动详细流程

目录 Linux系统开机启动流程为什么要了解系统开机启动流程关机的命令开机流程图:开机自检&#xff08;Power-On Self-Test&#xff0c;POST&#xff09;BIOSROM和RAMBIOS的介绍CMOS的介绍&#xff1a;BIOS和CMOS的区别和联系如何进入BIOS系统&#xff1f;如何改BIOS的顺序以及为…