Java-03 深入浅出 MyBatis - 快速入门(无 Spring) 增删改查 核心配置讲解 XML 与 注解映射

server/2024/11/19 12:37:22/

点一下关注吧!!!非常感谢!!持续更新!!!

大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html

在这里插入图片描述

目前已经更新到了:

  • MyBatis(正在更新)

快速入门

续接上节,完成了基本的 MyBatis 的配置,在不依赖 Spring 的情况下。
这里开始对增删改的内容进行补充。

新增数据

<insert id="insert" parameterType="icu.wzk.model.UserInfo">INSERT INTOuser_infoVALUES(0, #{username}, #{password}, #{age})
</insert>

添加结果如下图所示:
在这里插入图片描述
编写新增代码如下所示:

java">public class WzkIcu02 {public static void main(String[] args) throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();UserInfo userInfo = UserInfo.builder().username("wzk2").password("icu2").age(25).build();sqlSession.insert("icu.wzk.mapper.UserInfoMapper.insert", userInfo);sqlSession.commit();sqlSession.close();}
}

编写代码如下所示:
在这里插入图片描述
执行结果部分日志如下:

24/11/11 15:16:49 DEBUG UserInfoMapper.insert: ==>  Preparing: INSERT INTO user_info VALUES(0, ?, ?, ?)
24/11/11 15:16:49 DEBUG UserInfoMapper.insert: ==> Parameters: wzk2(String), icu2(String), 25(Integer)
24/11/11 15:16:49 DEBUG UserInfoMapper.insert: <==    Updates: 1
24/11/11 15:16:49 DEBUG jdbc.JdbcTransaction: Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@475e586c]

控制台输出结果如下所示:
在这里插入图片描述
注意的问题:

  • 插入语句使用 INSERT 标签
  • 在映射文件中使用 parameterType 属性指定要插入的数据类型
  • SQL 语句使用 #{} 来引入实体中的属性值
  • 插入操作使用的 API 是 sqlSession.insert(“命名空间.id”,实体对象)
  • 插入操作涉及到数据库数据变化,所以要使用 sqlSession 对象显示的提交事务,即 sqlSession.commit()

更新数据

<update id="update" parameterType="icu.wzk.model.UserInfo">UPDATEuser_infoSETusername=#{username}, password=#{password}, age=#{age}WHEREid=#{id}
</update>

编写的情况下如下所示:
在这里插入图片描述

java">public class WzkIcu03 {public static void main(String[] args) throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();UserInfo userInfo = UserInfo.builder().id(2L).username("wzk2-update").password("icu2-update").age(25).build();sqlSession.update("icu.wzk.mapper.UserInfoMapper.update", userInfo);sqlSession.commit();sqlSession.close();}
}

编写代码如下所示:
在这里插入图片描述
运行之后控制台输出部分日志如下:

24/11/11 15:24:29 DEBUG UserInfoMapper.update: <==    Updates: 1
24/11/11 15:24:29 DEBUG jdbc.JdbcTransaction: Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@475e586c]

对应的截图如下所示:

在这里插入图片描述
注意的问题

  • 修改语句需要使用 update 标签
  • 操作的是 sqlSession.update(“命名空间.id”,实体对象)

删除数据

<delete id="delete" parameterType="icu.wzk.model.UserInfo">DELETE FROMuser_infoWHEREid=#{id}
</delete>

对应的 mapper 截图如下所示:
在这里插入图片描述
编写代码:

java">public class WzkIcu04 {public static void main(String[] args) throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();UserInfo userInfo = UserInfo.builder().id(2L).build();sqlSession.update("icu.wzk.mapper.UserInfoMapper.delete", userInfo);sqlSession.commit();sqlSession.close();}
}

执行结果如下所示:
在这里插入图片描述
删除的时候需要注意:

  • 删除使用 delete
  • 操作的是 sqlSession.delete(“命名空间.id”,实体对象)

映射概述

核心概念

MyBatis 的映射主要由 XML 映射文件 和 注解方式 实现,将数据库的表结构映射到 Java 对象上。MyBatis 映射通过 XML 和注解方式提供了灵活的 SQL 控制能力,适合需要手动编写 SQL 的场景。XML 映射文件适合复杂逻辑,而注解方式更适合简单场景。掌握 MyBatis 的映射能力,可以更高效地完成数据持久化操作,同时保持代码的可维护性和可读性。

XML 映射文件

XML 是 MyBatis 映射的核心组件,通常以 .xml 文件形式存在,与映射的 Java 类对应。它包含了 SQL 语句、映射关系以及其他配置。

注解方式

通过 Java 注解的形式,将 SQL 直接嵌入到 Mapper 接口中,适合简单的 CRUD 操作。

核心配置

在这里插入图片描述

重要标签

  • mapper:顶级标签,声明该文件为 Mapper 文件,namespace 对应 Java 接口的全限定名。
  • resultMap:自定义对象与数据库字段的映射关系,支持复杂映射。
  • select:定义查询语句,可通过 resultType 或 resultMap 映射结果。
  • insert:定义插入语句,使用 #{} 占位符传递参数。
  • update:定义更新语句。
  • delete:定义删除语句。

常用配置

enviroment

数据库环境配置,支持对环境配置
在这里插入图片描述
其中,事务管理器(transactionManager)类型有两种:

  • JDBC:使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
  • MANAGED:几乎没做什么操作,它从来不提交或者回滚,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为

其中,数据源有三种:

  • UNPOOLED:每次请求打开和关闭连接
  • POOLED:利用池的概念将 JDBC 连接对象组织起来
  • JNDI:实现是为了能在 EJB 或应用服务器这类容器中使用,容器可以几种或者在外部配置数据源,然后防止一个 JNDI 上下文引用。

mapper

作用是加载映射,加载方式有如下几种:
使用相对于类路径的资源应用:

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

使用完全限定资源定位符(URL),例如:

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

使用映射接口实现类的完全限定类名,例如:

<mapper class="org.mybatis.builder.AuthorMapper"/>

将包内的映射接口实现全部注册为映射器,例如:

<package name="org.mybatis.builder"/>

http://www.ppmy.cn/server/143184.html

相关文章

kafka-clients之max.block.ms

max.block.ms 是 Kafka 客户端Producer配置中的一个参数&#xff0c;决定了客户端阻塞的最大时间。当生产者调用某些方法&#xff08;如 send() &#xff09;时&#xff0c;如果客户端在内部遇到某些资源&#xff08;如元数据或可用的缓冲区空间&#xff09;不可用&#xff0c;…

ETH钱包地址如何获取 如何购买比特币

首先我们要先注册一个交易所 Gate.io&#xff08;推荐&#xff09;: 点我注册 1、注册很简单&#xff0c;通过手机号就可以进行注册了。 2、获取ETH钱包地址 注册好之后&#xff0c;如图所示&#xff0c;点击“统一账户” 3、通过搜索栏搜索ETH&#xff0c;如下图所示 4、点…

Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

1. Ribbon 介绍 Ribbon 是什么 &#xff1f; 1.Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端&#xff0c;负载均衡的工具 2.Ribbon 主要功能是提供客户端负载均衡算法和服务调用 3.Ribbon 客户端组件提供一系列完善的配置项如“连接超时&#xff0c;重试” 4…

交易效率不打打折扣,遵循昂首平台优化策略

再忽视市场波动和货币对的流动性&#xff0c;投资者的交易效率将大打折扣。在外汇市场中&#xff0c;昂首平台的外汇趋势顾问提供了宝贵的交易策略&#xff0c;但若不遵循市场的基本规律&#xff0c;即使是最精明的顾问也难以保证交易的成功。 首先&#xff0c;交易者应在市场波…

mongoDB的安装及使用

文章目录 1、mongoDB的简介2、mongoDB的安装及配置3、node.js项目中mongoDB使用3.1.引入库3.2.数据操作增删改 4、mongoDB的查询4.1.查询4.2.高级查询 1、mongoDB的简介 MongoDB是一个流行的开源文档型数据库&#xff0c;它使用类似 JSON 的文档模型存储数据&#xff0c;这使得…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用&#xff1a; inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

知识图谱,语义分析,全文检索,neo4j,elaticsearch,知识库平台(java,vue)

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台&#xff1f; 助力企业…

kafka:使用flume自定义拦截器,将json文件抽取到kafka的消息队列(topic)中,再从topic中将数据抽取到hdfs上

抽取trans_info.json的数据到kafka上&#xff0c;对其中的tr_flag0的数据进行过滤抛弃&#xff0c;只保留正常的状态数据&#xff1a; 将此json文件放在集群中的 /home/zidingyi/trans_info.json 目录下 首先先在java代码中自定义拦截器&#xff1a; 1&#xff09;&#xff1…