首页 > 其他分享 >MyBatis之mappers详解

MyBatis之mappers详解

时间:2024-12-22 12:59:09浏览次数:6  
标签:mappers 映射 mapper 对象 接口 详解 pojo sql MyBatis

要点

环境准备

  • 因为从数据库中拿到的数据需要转换为实体类对象 ,所以需要定义一个pojo来接受和转换数据

  • 实体类(pojo)创建完成之后需要创建mapper接口 ,mapper接口就相当于原来的dao

  • mapper接口的命名和实体类名对应 ,因为myBatis有面向接口编程的功能 ,所以每当我们调用接口中的方法 ,他就会帮我们自动匹配sql语句并且执行

  • 一个mapper接口对应的是一个dao ,所以一张表也就对应着一个dao ,也就是一个mapper接口 ,所以以后有几张表就是几个mapper接口和几个mapper映射文件

  • 映射文件(xml)的namespece要和mapper接口的全类名保持一致

  • 映射文件(xml)中 sql语句的id是sql语句的唯一标识 ,要和mapper接口的方法名保持一致

操作数据库

  • 增删改的sql语句返回的是影响行数

  • myBatis提供了一个操作数据库的对象 ,叫做sqlsession

  • 先获取配置文件 ,Resources中有一个getResouceasStream可以获取字节输入流 读取配置文件 ,输入配置文件的路径 ,返回字节输入流对象

  • 通过SqlSessionFactoryBuilder()获取SqlSessionFactoryBuilder对象

  • getmapper使用的是 ,代理模式 获取mapper的实现类对象

  • 通过SqlSessionFactorBuilder对象.build ,传入字节输入流对象返回sqlSessionFactory对象

  • 注意下面事务提交的位置 ,是在sql语句执行之后 ,当上面的pensession没有开启true的时候 ,就是手动提交事务 ,但是当开启true ,就是自动提交事务

步骤

  1. 创建pojo

  2. 创建pojo-mapper

  3. 创建映射文件pojo-mapper.xml

接受结果对象

resultType : 结果类型(当执行完sql之后接受的结果是一个对象的时候 ,而且数据库字段名和对象的属性名一致的时候 ,使用resultType ,否则resultMap)

resultMap : 结果集合(映射)

核心配置文件

 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE configuration
 PUBLIC "-//MyBatis.org//DTD Config 3.0//EN"
 "http://MyBatis.org/dtd/MyBatis-3-config.dtd">
 <configuration>
 <!--引入properties文件,此时就可以${属性名}的方式访问属性值-->
 <properties resource="jdbc.properties"></properties>
 <settings>
 <!--将表中字段的下划线自动转换为驼峰-->
 <setting name="mapUnderscoreToCamelCase" value="true"/>
 <!--开启延迟加载-->
 <setting name="lazyLoadingEnabled" value="true"/>
 </settings>
 <typeAliases>
 <!--
 typeAlias:设置某个具体的类型的别名
 属性:
 type:需要设置别名的类型的全类名
 alias:设置此类型的别名,若不设置此属性,该类型拥有默认的别名,即类名且不区分大小
 写
 若设置此属性,此时该类型的别名只能使用alias所设置的值
 -->
 <!--<typeAlias type="com.atguigu.mybatis.bean.User"></typeAlias>-->
 <!--<typeAlias type="com.atguigu.mybatis.bean.User" alias="abc">
 </typeAlias>-->
 <!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写-->
 <package name="com.atguigu.mybatis.bean"/>
 </typeAliases>
 <!--
 environments:设置多个连接数据库的环境
 属性:
 default:设置默认使用的环境的id
 -->
 <environments default="mysql_test">
 <!--
 environment:设置具体的连接数据库的环境信息
 属性:
 id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id,
 表示默认使用的环境
 -->
 <environment id="mysql_test">
 <!--
 transactionManager:设置事务管理方式
 属性:
     type:设置事务管理方式,type="JDBC|MANAGED"
 type="JDBC":设置当前环境的事务管理都必须手动处理
 type="MANAGED":设置事务被管理,例如spring中的AOP
 -->
 <transactionManager type="JDBC"/>
 <!--
 dataSource:设置数据源
 属性:
 type:设置数据源的类型,type="POOLED|UNPOOLED|JNDI"
 type="POOLED":使用数据库连接池,即会将创建的连接进行缓存,下次使用可以从
 缓存中直接获取,不需要重新创建
 type="UNPOOLED":不使用数据库连接池,即每次使用连接都需要重新创建
 type="JNDI":调用上下文中的数据源
 -->
 <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>
 <!--引入映射文件-->
 <mappers>
 <mapper resource="UserMapper.xml"/>
 <!--
 以包为单位,将包下所有的映射文件引入核心配置文件
 注意:此方式必须保证mapper接口和mapper映射文件必须在相同的包下
 -->
 <package name="com.atguigu.mybatis.mapper"/>
 </mappers>
 </configuration>

注意

  • 在resources下面创一层一层的目录的时候 ,要用斜线分隔 ,如果用点来分隔 ,创建出来的只有一层目录

需要使用斜线分隔

用点分隔 ,出现的只有一层目录

  • 以包为单位引入映射文件

    • 要求 :

      • mapper接口所在的包要和映射文件所在的包保持一致

      • mapper接口要和映射文件的名字一致

标签:mappers,映射,mapper,对象,接口,详解,pojo,sql,MyBatis
From: https://blog.csdn.net/weixin_73749601/article/details/144644826

相关文章

  • MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
     1.1创建ThreadLocal工具类(作为业务逻辑结果存放类)packageorg.springblade.sample.utils;publicclassQueryContext{ privatestaticfinalThreadLocal<Long>totalInThreadLocal=newThreadLocal<>(); publicstaticvoidsetTotalIn(longtotalIn){ totalInT......
  • 【JavaScript】Array.from及其相关用法详解
    文章目录一、Array.from方法概述1.方法介绍2.示例演示二、结合实际场景的使用1.初始化二维数组2.从可迭代对象创建数组3.构造特定范围的数组三、注意事项1.类数组对象必须有`length`属性2.回调函数中的索引3.性能注意JavaScript中的Array.from方法......
  • 均方误差损失函数(MSE)和交叉熵损失函数详解
    为什么需要损失函数前面的文章我们已经从模型角度介绍了损失函数,对于神经网络的训练,首先根据特征输入和初始的参数,前向传播计算出预测结果,然后与真实结果进行比较,得到它们之间的差值。损失函数又可称为代价函数或目标函数,是用来衡量算法模型预测结果和真实标签之间吻合程度(误......
  • C#—内建接口: IEnumerable与IEnumerator接口详解
    IEnumerable接口在C#中,IEnumerable是一个泛型接口,它表示一个可以通过IEnumerator迭代器进行迭代枚举的集合。这个接口是非常基础且重要的,因为它允许开发者以一致的方式遍历任何实现了该接口的集合,无论是数组、列表、自定义集合还是LINQ查询的结果。IEnumerable是可迭代类......
  • C#—LINQ详解及汇总
    LINQ详解及汇总LINQ(LanguageIntegratedQuery)是微软的一项技术,允许开发者以一种简洁的方式查询和操作数据,支持多种数据源,包括对象、数据库、XML和数据集。LINQ定义了约40个查询操作符,如select、from、in、where以及orderby等,这些操作符可以编写查询语句,处理各种类型的数据‌......
  • 【JavaScript 漏洞】原型污染详解
    免责声明本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。什么是原型污染原型污染是一种JavaScript漏洞,它使攻击者能够向全局对象原型添加任意属性,然后这......
  • Pandas教程之三十五:XlsxWriter使用详解(2)
    Python|使用Pandas和XlsxWriter|集合–2PythonPandas是一个数据分析库。它可以读取、过滤和重新排列小型和大型数据集,并以包括Excel在内的多种格式输出它们。Pandas使用XlsxWriter模块写入Excel文件。XlsxWriter是一个用于以XLSX文件格式写入文件的Pyth......
  • 详解 C++ 中的无序容器
    在C++中,无序容器(unorderedcontainers)是指基于哈希表实现的容器,主要特点是元素存储顺序无关,强调高效的插入、删除和查找操作。以下是C++标准库中所有无序容器的详解。无序容器分类C++中的无序容器主要包括以下4类:unordered_setunordered_multisetunordered_mapun......
  • 【闭包】前端的“保护神”——闭包详解+底层原理
    目录 一、闭包是什么?概念二、闭包为什么存在?作用1.创建私有变量2.实现数据封装与信息隐藏3.模拟私有方法4.保存函数执行时的状态5.回调函数和事件处理6.模块化编程7.懒加载与延迟执行 三、闭包怎么用?实践+业务场景1.封装私有变量2.延迟执行(定时器、异步......
  • 39.在 Vue3 中使用 OpenLayers 导出 GeoJSON 文件及详解 GEOJSON 格式
    一、引言在Web地图开发领域,Vue3作为一款流行的前端框架,结合强大的OpenLayers地图库,能够实现丰富多样的地图功能。其中,将地图数据以GeoJSON格式导出是一项常见且实用的需求,本文将深入探讨如何在Vue3环境下借助OpenLayers达成这一目标,并详细剖析GeoJSON格式文件。......