【Java】小白友好的MyBatis基础学习笔记

目录

MyBatis简介

MyBatis使用流程

配置文件(mybatis-config.xml)

映射文件(UserMapper.xml)

DAO 接口(UserMapper.java) 

使用 MyBatis 

Mapper代理

MyBatis核心配置文件

MyBatis参数类型和传递

单个参数:

多个参数:

建议:

CURD操作

查询操作

添加操作

修改操作

删除操作


MyBatis简介

MyBatis 是一个开源的持久化框架,用于简化数据库操作的开发。它提供了一种将 SQL 查询、插入、更新和删除等操作与 Java 对象之间的映射关系的方式,从而方便地进行数据持久化操作。

MyBatis 的核心理念是将 SQL 语句与 Java 代码解耦,通过 XML 或注解的配置方式,将 SQL 语句独立于代码之外,并通过映射文件或注解将查询结果映射到对应的 Java 对象上。

MyBatis使用流程

MyBatis 的使用流程一般包括以下几个步骤:

  1. 配置 MyBatis:首先需要配置 MyBatis,包括数据库连接信息、映射文件的路径等。可以通过 XML 配置文件或 Java 代码进行配置。

  2. 创建 SqlSessionFactory:根据配置信息创建一个 SqlSessionFactory 对象,SqlSessionFactory 是 MyBatis 的核心对象,用于创建 SqlSession。

  3. 定义映射文件:创建一个或多个映射文件,映射文件中定义了 SQL 语句与 Java 对象的映射关系,以及其他配置信息。

  4. 创建 SqlSession:通过 SqlSessionFactory 创建一个 SqlSession 对象,SqlSession 提供了操作数据库的方法,包括查询、插入、更新和删除等。

  5. 执行 SQL 操作:使用 SqlSession 调用相应的方法执行 SQL 操作。可以直接调用方法,也可以通过映射文件中定义的 SQL 语句进行操作。

  6. 处理结果:根据 SQL 操作的返回结果,进行相应的处理。MyBatis 会将查询结果映射为 Java 对象,通过对象返回给调用方。

  7. 关闭资源:在完成数据库操作后,需要关闭 SqlSession,释放相关资源。

示例:

配置文件(mybatis-config.xml)

<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>

映射文件(UserMapper.xml)

<mapper namespace="com.example.mapper.UserMapper"><select id="getUserById" resultType="com.example.model.User">SELECT * FROM user WHERE id = #{id}</select>
</mapper>

DAO 接口(UserMapper.java) 

package com.example.mapper;import com.example.model.User;public interface UserMapper {User getUserById(int id);
}

使用 MyBatis 

import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MyBatisExample {public static void main(String[] args) {String resource = "mybatis-config.xml";try (InputStream inputStream = Resources.getResourceAsStream(resource)) {SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper userMapper = session.getMapper(UserMapper.class);User user = userMapper.getUserById(1);System.out.println(user);}} catch (IOException e) {e.printStackTrace();}}
}

Mapper代理

Mapper 代理开发是 MyBatis 中一种便捷的数据库操作方式,它通过动态代理技术自动生成 DAO(Data Access Object)接口的实现类。开发人员只需编写接口,并在 XML 配置文件中定义 SQL 映射关系,无需编写具体的实现类,就可以直接调用 DAO 接口中定义的方法进行数据库操作。

具体使用:

1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
4.编码:①通过SqlSession的getMapper方法获取Mapper接口的代理对象 ②调用对应方法完成sql的执行

MyBatis核心配置文件

MyBatis 核心配置文件是 MyBatis 的配置中心,用于定义 MyBatis 的全局配置信息、数据源信息、映射器、插件等。它是一个 XML 文件,通常命名为 mybatis-config.xml

MyBatis 核心配置文件包括以下几个部分:

  1. configuration:MyBatis 根元素,包含了所有的配置信息。

  2. settings:MyBatis 的全局配置项,包括缓存配置、日志配置、延迟加载配置、默认语句超时时间等。

  3. typeAliases:类型别名配置,用于定义别名以便在映射文件中使用。

  4. typeHandlers:类型处理器配置,用于将数据库中的数据类型转换为 Java 类型。

  5. environments:环境配置,可以定义多个环境,每个环境包含一个数据源和一个事务管理器。

  6. environment:单个环境定义,包含一个数据源和一个事务管理器。

  7. transactionManager:事务管理器配置,用于控制事务。

  8. dataSource:数据源配置,包含一些必须的属性,例如驱动类、连接 URL、用户名和密码等。

  9. mappers:映射器配置,用于定义映射器的位置和加载方式。

  10. mapper:单个映射器定义,可以通过 resource、url 或 class 属性指定映射器的位置或类文件。

 

MyBatis参数类型和传递

单个参数:

1.POJO类型:直接使用,实体类属性名和参数占位符名称一致

2.Map集合:直接使用,键名和参数占位符名称一致

3.Collection:封装为Map集合

map.put("collection",collection集合);

map.put("arg0",collection集合);

4.List:封装为Map集合

map.put("collection",list集合);

map.put("list",list集合);

map.put("arg0",list集合);

5.Array:封装为Map集合

map.put("array",数组);

map.put("arg0",数组);

6.其他类型:直接使用

多个参数:

封装为Map集合

map.put("arg0",参数值1);

map.put("param1",参数值1);

map.put("arg1",参数值2);

map.put("param2",参数值2);

建议:

使用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样代码可读性更高。

CURD操作

查询操作

在 MyBatis 中进行查询操作主要涉及以下几个方面

  1. 查询所有 & 结果映射:

    • 首先,在映射文件(Mapper.xml)中定义 SQL 语句,如 SELECT * FROM table_name。
    • 在映射文件中配置结果映射,将查询结果映射为 Java 对象。可以使用 resultType 或 resultMap 进行结果映射配置。
  2. 单项查询:

    • 在映射文件中定义具体的 SQL 查询语句,可使用 WHERE 子句和条件参数进行筛选。
    • 使用 selectOne 方法执行查询,并传入查询参数。
  3. 条件查询:

    • 在映射文件中定义带有条件的 SQL 查询语句,例如 SELECT * FROM table_name WHERE column = #{value}。
    • 使用 selectList 方法执行查询,并传入查询参数。
  4. 动态条件查询:

    • 在映射文件中使用 <where> 元素和 <if> 元素实现动态条件查询。
    • <where> 元素用于包裹查询条件,可以根据条件动态拼接 WHERE 子句。
    • <if> 元素用于判断条件是否满足,如果满足则拼接对应的查询条件。
    • 可以结合使用 <choose> 元素、<when> 元素和 <otherwise> 元素实现多条件判断。

 

注意结果映射中:

resultMap 中,columnproperty 是用于指定查询结果的列名和 Java 对象的属性名之间的映射关系。

  • column:表示数据库表中的列名。它指定了查询结果集中的列,用于与 Java 对象的属性进行对应。
  • property:表示 Java 对象的属性名。它指定了将查询结果中的列值映射到 Java 对象中的哪个属性上。

通过在 resultMap 中定义多个 <result> 元素,可以实现对查询结果的不同列和 Java 对象属性之间的映射。

举例:

<resultMap id="userResultMap" type="com.example.model.User"><id property="id" column="user_id"/><result property="name" column="user_name"/><result property="age" column="user_age"/><result property="email" column="user_email"/>
</resultMap>

添加操作

在 MyBatis 中进行增加操作,通常通过 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义插入操作的 SQL 语句

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><insert id="insertUser" parameterType="com.example.model.User">INSERT INTO user (name, age, email) VALUES (#{name}, #{age}, #{email})</insert>
</mapper>

DAO 接口(UserMapper.java)定义插入操作的方法

package com.example.mapper;import com.example.model.User;public interface UserMapper {void insertUser(User user);
}

在应用程序中调用 DAO 接口的插入方法

User user = new User();
user.setName("John");
user.setAge(25);
user.setEmail("john@example.com");userMapper.insertUser(user);

修改操作

在 MyBatis 中进行修改操作与增加操作类似,同样需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义更新操作的 SQL 语句

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><update id="updateUser" parameterType="com.example.model.User">UPDATE user SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id}</update>
</mapper>

DAO 接口(UserMapper.java)定义更新操作的方法

package com.example.mapper;import com.example.model.User;public interface UserMapper {void updateUser(User user);
}

在应用程序中调用 DAO 接口的更新方法

User user = new User();
user.setId(1); // 根据需要更新的用户ID设置
user.setName("John Doe");
user.setAge(30);
user.setEmail("newemail@example.com");userMapper.updateUser(user);

删除操作

在 MyBatis 中进行删除操作也需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义删除操作的 SQL 语句

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><delete id="deleteUser" parameterType="int">DELETE FROM user WHERE id = #{id}</delete>
</mapper>

DAO 接口(UserMapper.java)定义删除操作的方法

package com.example.mapper;public interface UserMapper {void deleteUser(int id);
}

在应用程序中调用 DAO 接口的删除方法

int userId = 1; // 根据需要删除的用户ID设置userMapper.deleteUser(userId);

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

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

相关文章

VUE3+TS使用OpenSeadragon学习之旅,实现多图片切换效果

1.官方网站&#xff1a;OpenSeadragon 2.使用npm下载插件&#xff1a;npm install openseadragon 3.在 index.html文件引入资源 <link rel"stylesheet" href"node_modules/openseadragon/build/openseadragon/openseadragon.css" /><script src…

消息队列的应用场景

消息队列的应用场景 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;Ze…

用户界面(UI)、用户体验(UE)和用户体验(UX)的差异

对一个应用程序而言&#xff0c;UX/UE (user experience) 设计和 UI (user interface) 设计非常重要。UX设计包括可视化布局、信息结构、可用性、图形、互动等多个方面。UI设计也属于UX范畴。正是因为三者在一定程度上具有重叠的工作内容&#xff0c;很多从业多年的设计师都分不…

ffmpeg合成mp3音频,解决音频属性不一致问题

1. 需求&#xff0c;amr转成mp3&#xff0c;再将此mp3和其他mp3合成 2. 问题&#xff1a;拼接后的第一段音频可以播放&#xff0c;第二段自动跳过&#xff0c;无法播放。 3. 解决&#xff1a; 3.1 查看各文件属性 # 查看amr转为mp3文件的属性&#xff1a;ffprobe 文件名&am…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(五十一)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

C语言实现12种排序算法

1.冒泡排序 思路&#xff1a;比较相邻的两个数字&#xff0c;如果前一个数字大&#xff0c;那么就交换两个数字&#xff0c;直到有序。 时间复杂度&#xff1a;O(n^2)&#xff0c;稳定性&#xff1a;这是一种稳定的算法。 代码实现&#xff1a; void bubble_sort(int arr[],…

mysql innodb 之 buffer pool

1 buffer pool 是什么 buffer pool为内存中的一个数据块&#xff0c;主要由三部分组成&#xff1a; 1&#xff09;缓存中的数据页–存储业务数据&#xff0c;大小和磁盘中的数据页大小一样&#xff0c;均为16K。 注&#xff1a;缓冲池和磁盘之间进行数据交换的单位是-数据页 2…

Redis的bitmap使用不当,我内存爆了

背景 最近发现Redis的内存持续暴涨&#xff0c; 涨的有点吓人&#xff0c;机器都快扛不住了&#xff0c;不得不进行Redis内存可视化分析&#xff0c;发现大量的String类型的大key 经分析&#xff0c;最近上线了页面UV的统计&#xff0c;那目前如何做的呢&#xff1f; 通过访…

Ubuntu重装kubernetes集群

重新初始化Kubernetes&#xff08;K8s&#xff09;通常是在集群出现问题或需要重新配置时的一种解决方法。以下是重新初始化K8s的一般步骤&#xff1a; 警告&#xff1a;重新初始化K8s将导致数据丢失&#xff0c;请确保在执行此操作之前进行充分备份。 1.备份数据 在重新初始…

Redux状态管理(运行机制及实例)

背景&#xff1a; JavaScript需要管理的状态越来越多&#xff0c;越来越复杂;这些状态包括服务器返回的数据、缓存数据、用户操作产生的数据等等&#xff0c;也包括一些UI的状态&#xff0c;比如某些元素是否被选中&#xff0c;是否显示加载动效&#xff0c;当前分页。 状态之…

Camille-学习笔记-测试流程和测试设计

## 测试用例学习路线 startmindmap * 测试用例 ** 黑盒测试方法论 *** 等价类 *** 边界值 *** 因果图 *** 判定表 *** 场景法 *** 基于模型的测试 ** 白盒测试方法论 ** 测试用例基础概念 ** 测试用例设计 ** 面试测试用例设计 ** 常用测试策略与测试手段 endmindmap **测试用…

浅谈信号完整性分析

什么是信号完整性?在过去的低速时代,电平跳变时信号上升时间较长,通常几个 ns。器件间的互连线不至于影响电路的功能,没必要关心信号完整性问题。但在今天的高速时代,随着 IC输出开关速度的提高,很多都在皮秒级,不管信号周期如何,几乎所有设计都遇到了信号完整性问题。…

【ACL 2023】Enhancing Document-level EAE with Contextual Clues and Role Relevance

【ACL 2023】Enhancing Document-level Event Argument Extraction with Contextual Clues and Role Relevance 论文&#xff1a;https://aclanthology.org/2023.findings-acl.817/ 代码&#xff1a;https://github.com/LWL-cpu/SCPRG-master Abstract 与句子级推理相比&…

ZigBee学习——在官方例程基础实现点灯

IAR版本 :10.10.1 Z-stack版本 :3.0.2 文章目录 一、买的板子原理图二、实现过程2.1 重定义LED的物理映射(HAL层)2.2 创建LED事件(应用层)2.2.1 定义用户事件2.2.2 修改zclGenericApp_event_loop() 2.3 触发事件 一、买的板子原理图 二、实现过程 2.1 重定义LED的物理映射(HAL…

服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

知识点&#xff1a; 1、端口协议-弱口令&未授权&攻击方式等 2、桌面应用-社交类&文档类&工具类等 章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&…

使用Logstash将MySQL中的数据同步至Elasticsearch

目录 1 使用docker安装ELK 1.1 安装Elasticsearch 1.2 安装Kibana 1.3 安装Logstash 2 数据同步 2.1 准备MySQL表和数据 2.2 运行Logstash 2.3 测试 3 Logstash报错(踩坑)记录 3.1 记录一 3.1.1 报错信息 3.1.2 报错原因 3.1.3 解决方案 3.2 记录二 3.2.1 报错信…

图像异或加密、解密的实现

很多论文提到了从左上角开始做异或,逐行推导得到结果。 解密过程是加密的逆过程。 先看其基本方法: 参考文献: A Chaotic System Based Image Encryption Scheme with Identical Encryption and Decryption Algorithm 大多数论文都用了这个思路,我们使用MATLAB实现代码…

Leetcode 热门百题斩(第一天)

介绍 针对leetcode的热门一百题&#xff0c;解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法&#xff0c;供大家参考。 1.两数之和&#xff08;题号&#xff1a;1) 方法一 最先想到的就是两个for去遍历匹配。 class Solution {public int[] twoSum(int[]…

I2S、I2C、SPI和UART的区别

在嵌入式系统中&#xff0c;I2S&#xff08;Inter-IC Sound&#xff09;、I2C&#xff08;Inter-Integrated Circuit&#xff09;、SPI&#xff08;Serial Peripheral Interface&#xff09;和UART&#xff08;Universal Asynchronous Receiver-Transmitter&#xff09;是常见的…

重写Sylar基于协程的服务器(2、配置模块的设计)

重写Sylar基于协程的服务器&#xff08;2、配置模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…