typeAliases以及mappers

typeAliases

我们来观察一下CarMapper.xml中的配置信息:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.CarMapper"><select id="selectByType" resultType="Car">selectcar_num as carNum,brand,guide_price as guidePrice,produce_time as produceTime,car_type as carTypefrom t_carwhere brand like CONCAT('%', #{brand}, '%')</select><select id="selectAll" resultType="Car">selectcar_num as carNum,brand,guide_price as guidePrice,produce_time as produceTime,car_type as carTypefrom t_car</select></mapper>

resultType属性用来指定查询结果集的封装类型,这个名字太长,可以起别名吗?

可以。 在mybatis-config.xml文件中使用typeAliases标签来起别名,包括两种方式:

第一种方式:typeAlias

<typeAliases><typeAlias type="pojo.Car" alias="Car"/>
</typeAliases>
  • 首先要注意typeAliases标签的放置位置:

    • 1.放在environments标签的前面

    • 2.放在properties的后面

  • typeAliases标签中的typeAlias可以写多个。

  • typeAlias:

    • type属性:指定给哪个类起别名

    • alias属性:别名。

      • alias属性不是必须的,如果缺省的话,type属性指定的类型名的简类名作为别名。

      • alias是大小写不敏感的。也就是说假设alias="Car",再用的时候,可以CAR,也可以car,也可以Car。

第二种方式:package

 如果一个包下的类太多,每个类都要起别名,会导致typeAlias标签配置较多,所以mybatis用提供package的配置方式,只需要指定包名(只需要!!!),该包下的所有类都自动起别名,别名就是简类名。并且别名不区分大小写。

Mybatis核心配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><package name="pojo" /></typeAliases><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/testmybatis"/><property name="username" value="root"/><property name="password" value="gege5211314"/></dataSource></environment></environments><mappers><mapper class="mapper.CarMapper"/></mappers>
</configuration>

在sql的映射文件如下: 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.CarMapper"><select id="selectByType" resultType="Car">selectcar_num as carNum,brand,guide_price as guidePrice,produce_time as produceTime,car_type as carTypefrom t_carwhere brand like CONCAT('%', #{brand}, '%')</select><select id="selectAll" resultType="Car">selectcar_num as carNum,brand,guide_price as guidePrice,produce_time as produceTime,car_type as carTypefrom t_car</select></mapper>

mappers

SQL映射文件的配置方式包括四种:

  • resource:从类路径中加载

  • url:从指定的全限定资源路径中加载

  • class:使用映射器接口实现类的完全限定类名

  • package:将包内的映射器接口实现全部注册为映射器

 

resource

这种方式是从类路径中加载配置文件,所以这种方式要求SQL映射文件必须放在resources目录下或其子目录下。

 <mappers><mapper resource="carMapper.XML"/></mappers>

url

这种方式显然使用了绝对路径的方式,这种配置对SQL映射文件存放的位置没有要求,随意。但是移植性差

<mappers><mapper url="file:///var/mappers/AuthorMapper.xml"/><mapper url="file:///var/mappers/BlogMapper.xml"/><mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>

class

如果使用这种方式必须满足以下条件:

  • SQL映射文件和mapper接口放在同一个目录下。

    • 在resources目录下新建:com/powernode/mybatis/mapper【这里千万要注意:不能这样新建 com.powernode.mybatis.dao

    • 将CarMapper.xml文件移动到mapper目录下

    • 修改mybatis-config.xml文件

      <mappers><mapper class="com.powernode.mybatis.mapper.CarMapper"/>
      </mappers>
  • SQL映射文件的名字也必须和mapper接口名一致。e77ebc906fed4742ac793cfee43a491f.png

package

果class较多,可以使用这种package的方式,但前提条件和上一种方式一样。

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

插入数据时获取自动生成的主键

在关系型数据库(如MySQL、PostgreSQL、SQL Server等)中,当表的某个列(通常是主键)设置为自动递增(AUTO_INCREMENTSERIAL),每次插入新数据时,数据库会自动生成一个唯一的值作为该行的主键。获取自动生成的主键,是指在执行插入操作后,我们希望程序能拿到数据库生成的这个主键值,用于后续的逻辑处理,比如:

  • 将这个主键作为外键插入其他表。
  • 返回给客户端显示插入结果。
  • 更新与这个主键相关的记录。

场景示例

  1. 插入用户信息后,获取该用户的ID用于后续操作。
  2. 订单系统中插入新订单后,获取订单号进行物流或支付的后续操作。

总结

通过配置 <insert> 标签中的 useGeneratedKeys="true"keyProperty="id",MyBatis 能够在插入数据后,自动将数据库生成的主键值回填到 Java 对象中。这在开发中非常常用,尤其是在需要管理复杂主键关联关系或立即使用生成主键的场景中。

xml中的sql语句:

<insert id="insertUseGeneratedKeys" useGeneratedKeys="true" keyProperty="id">insert into t_car(id,car_num,brand,guide_price,produce_time,car_type) values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
</insert>
  • 不使用 useGeneratedKeys:数据库生成了主键,但 Java 对象的 id 还是 null,可能会影响后续逻辑。
  • 使用 useGeneratedKeys:MyBatis 自动获取主键并赋值给对象的 id,简化了代码逻辑。

 

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

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

相关文章

Spark数据源的读取与写入、自定义函数

1. 数据源的读取与写入 1.1 数据读取 读文件 read.jsonread.csv csv文件由两个部分组成&#xff1a;头部数据&#xff08;也就是字段数据&#xff09;、行数据。 read.orc 读数据库 read.jdbc(jdbc连接地址,table‘表名’,properties{‘user’用户名,‘password’密码,‘driv…

万能工具箱小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 万能工具箱小程序源码系统是一款集多种实用工具于一体的综合性平台。它为用户提供了便捷的操作界面和丰富的功能选项&#xff0c;满足了人们在日常生活和工作中的各种需求。 该系统采用先进的技术架构&#xff0c;具备高度的稳定性和可靠性。无论是在处理大量数据还…

python excel如何转成json,并且如何解决excel转成json时中文汉字乱码的问题

1.解决excel转成json时中文汉字乱码的问题 真的好久没有打开这个博客也好久没有想起来记录一下问题了&#xff0c;今天将表格测试集转成json格式的时候遇到了汉字都变成了乱码的问题&#xff0c;虽然这不是个大问题&#xff0c;但是编码问题挺烦人的&#xff0c;乱码之后像下图…

Flink窗口分配器WindowAssigner

前言 Flink 数据流经过 keyBy 分组后&#xff0c;下一步就是 WindowAssigner。 WindowAssigner 定义了 stream 中的元素如何被分发到各个窗口&#xff0c;元素可以被分发到一个或多个窗口中&#xff0c;Flink 内置了常用的窗口分配器&#xff0c;包括&#xff1a;tumbling wi…

【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律

文章目录 C 栈与队列详解&#xff1a;基础与进阶应用前言第一章&#xff1a;栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章&#xff1a;队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

【linux】线程(二)

10. pthread_t 类型 注意&#xff1a; 每一个线程的库级别的tcb的起始地址&#xff0c;就是线程的 tid每一个线程都有自己独立的栈结构线程和线程之间&#xff0c;也是可以被其他线程看到并访问的&#xff08;比如全局函数&#xff09; 代码 如果想要进程拥有私人的全局变量(即…

拥抱“新市民” ,数字银行的“谋与变”

【潮汐商业评论/原创】 数字银行&#xff0c;既是金融行业的创新物种&#xff0c;其在发展的过程中也彰显着普惠金融的基因。 “我劝你买点银行理财吧&#xff0c;选一家靠谱的银行就是最靠谱的理财方式了&#xff0c;踏踏实实地把钱存银行里面不会有问题的”&#xff0c;周日…

SpringBoot篇(二、制作SpringBoot程序)

目录 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 3. 阿里云 4. 手动 五、在IDEA中隐藏指定文件/文件夹 六、复制工程-快速操作 七、更改引导类别名 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 官网制作&#xff1a;Spring Boot 3. 阿里云 阿里云版制…

react18中的计算属性及useMemo的性能优化技巧

react18里面的计算属性和使用useMemo来提升组件性能的方法 计算属性 实现效果 代码实现 函数式组件极简洁的实现&#xff0c;就这样 import { useState } from "react"; function FullName() {const [firstName, setFirstName] useState("");const [la…

AlDente Pro for Mac电脑 充电限制保护工具 安装教程【简单,轻松上手】

Mac分享吧 文章目录 AlDente Pro for Mac 充电限制保护工具 安装完成&#xff0c;软件打开效果一、AlDente Pro for Mac 充电限制保护工具 Mac电脑版——v1.28.41️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件&#xff0c;将安装包从左侧拖入右侧文件夹中&#xff0c;等…

c++初阶--string类(使用)

大家好&#xff0c;许久不见&#xff0c;今天我们来学习c中的string类&#xff0c;在这一部分&#xff0c;我们首先应该学习一下string类的用法&#xff0c;然后再试着自己去实现一下string类。 在这里&#xff0c;我使用的是这个网站来查找的string类&#xff0c;这里面的内容…

Web,RESTful API 在微服务中的作用是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Web&#xff0c;RESTful API 在微服务中的作用是什么&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Web&#xff0c;RESTful API 在微服务中的作用是什么&#xff1f; 在微服务架构中&#xff0c;Web 和 RESTful …

react18中如何实现同步的setState来实现所见即所得的效果

在react项目中&#xff0c;实现添加列表项&#xff0c;最后一项自动显示在可视区域范围&#xff01;&#xff01; 实现效果 代码实现 import { useState, useRef } from "react"; import { flushSync } from "react-dom"; function FlushSyncRef() {con…

基于SSM网络在线考试系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;在线考试管理&#xff0c;试题管理&#xff0c;考试管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;在线考试&#xff0c;公告信…

word删除空白页 | 亲测有效

想要删掉word里面的末尾空白页&#xff0c;但是按了delete之后也没有用 找了很久找到了以下亲测有效的方法 1. 通过鼠标右键在要删除的空白页面处显示段落标记 2. 在字号输入01&#xff0c;按ENTER&#xff08;回车键&#xff09; 3.成功删除了&#xff01;&#xff01;

ECharts饼图-饼图34,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

模型实战(27)之 YOLO11 推理、验证及训练自己的数据集

模型实战(27)之 YOLO11推理、验证及训练自己的数据集 2024年10.17,YOLO11是近期十月份刚经ultralytics团队更新优化发布的视觉算法深度学习网络模型,其网络模型结构代码实现也采用了比较新的Python数据结构,所以虚拟环境搭建安装包也比较新,经过多次踩坑,把关键环节记录…

电子便签:从偶像剧到职场的实用转变

在快节奏的现代生活中&#xff0c;便签已经成为了我们不可或缺的助手&#xff0c;无论是纸质的还是电子的&#xff0c;它们都以小巧的“身躯”承载着我们的日常记忆和待办事项。从偶像剧中常见的“便利贴”女孩形象&#xff0c;到如今电子便签的普及&#xff0c;它们帮助我们捕…

百度搜索竞价推广有必要做吗?怎么做效果好!

百度竞价推广&#xff0c;有的行业适合&#xff0c;有的行业则不行&#xff0c;下面我给大家分享下哪些行业可以。 如果是招商加盟、招代理商、招经销商&#xff0c;或者是高客单价咨询服务费&#xff0c;甚至是找合作方、渠道方的企业主都可以投放竞价推广。 总之一句话&…

网络安全的五大误区,你中招了吗?

在数字化时代&#xff0c;网络安全问题日益突出&#xff0c;许多人在使用网络过程中存在一些误区&#xff0c;导致个人信息泄露、财产损失等问题。本文将为您揭示网络安全的五大误区&#xff0c;帮助您提高安全防范意识。 误区一&#xff1a;使用复杂密码就一定安全 许多人认为…