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

目录

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/668546.shtml

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

相关文章

自动驾驶IPO第一股及商业化行业标杆 Mobileye

一、Mobileye 简介 Mobileye 是全球领先的自动驾驶技术公司&#xff0c;成立于 1999 年&#xff0c;总部位于以色列耶路撒冷。公司专注于开发视觉感知技术和辅助驾驶系统 (ADAS)&#xff0c;并在自动驾驶领域处于领先地位。Mobileye 是高级驾驶辅助系统&#xff08;ADAS&#…

Vscode编译运行多个C++文件

1.摘要 在使用Vscode编译单个文件网上很多教程&#xff0c;但是对多个文件编译会发现经常出问题&#xff0c;通过不断的借阅网友的教程改进终于完成C运行多个文件教程如下&#xff1a; 2.编译运行过程 2.1 初始配置过程 &#xff08;1&#xff09;Vscode以及MinGW配置教程很…

如何接手一个新系统

在平时的工作中&#xff0c;接手别人的系统上一个一年还是会有几次的工作&#xff0c;本期我们就来梳理下&#xff0c;一般接手一个新系统都要从哪些方面来尽快熟悉下&#xff0c;保障自己不掉队。 接手一个新系统&#xff0c;一般要从这几个方面来熟悉&#xff1a; 一、业务…

管理类联考-复试-全流程演练-导航页

文章目录 整体第一步&#xff1a;学校导师两手抓——知己知彼是关键学校校训历史 导师你对导师的研究方向有什么认知。 第二步&#xff1a;面试问题提前背——押题助沟通自我介绍——出现概率&#xff1a;100%为什么选择这个专业&#xff1f;今后如何打算&#xff1f;你认为自己…

高并发内存池项目

目录 项目简介什么是内存池池化技术内存池 内存池主要解决的问题定长内存池的设计高并发内存池的整体框架设计thread cachethread cache的整体设计thread cache哈希桶的对齐规则threadcacheTLS无锁访问 central cachecentralcache整体设计central cache 结构设计central cache核…

Redis——高级主题

介绍Redis的高级主题&#xff0c;包括服务器配置、Redis事务、Redis发布和订阅、Pipeline批量发送请求、数据备份与恢复等。 1、服务器配置 在Windows和Linux的Redis服务器里面&#xff0c;都有一个配置文件。Redis配置文件位于Redis安装目录下&#xff0c;在不同操作系统下&…

Redis核心技术与实战【学习笔记】 - 21.Redis实现分布式锁

概述 在《20.Redis原子操作》我们提到了应对并发问题时&#xff0c;除了原子操作&#xff0c;还可以通过加锁的方式&#xff0c;来控制并发写操作对共享数据的修改&#xff0c;从而保证数据的正确性。 但是&#xff0c;Redis 属于分布式系统&#xff0c;当有多个客户端需要争…

【Java知识手册】一.Java开发工具和前言

文章目录 1 Java前言1.1 简介1.2 Java环境搭建1.3 程序的开发步骤1.4 idea开发工具1.5用idea开发一个helloworld 前言&#xff1a;以初学着的身份&#xff0c;准备在该平台整理点最近学习的知识&#xff0c;方便后续查看相关的技术点&#xff0c;有兴趣的可以一块交流学习。目标…

机器学习本科课程 大作业 多元时间序列预测

1. 问题描述 1.1 阐述问题 对某电力部门的二氧化碳排放量进行回归预测&#xff0c;有如下要求 数据时间跨度从1973年1月到2021年12月&#xff0c;按月份记录。数据集包括“煤电”&#xff0c;“天然气”&#xff0c;“馏分燃料”等共9个指标的数据&#xff08;其中早期的部分…

力扣刷题-27.移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

接口测试要测试什么?

一. 什么是接口测试&#xff1f;为什么要做接口测试&#xff1f; 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互…

CVPR 2023: Leapfrog Diffusion Model for Stochastic Trajectory Prediction

我们使用以下6个分类标准对本文的研究选题进行分析: 1. 扩散模型类型: 标准扩散模型蛙跳扩散模型 (LED) 其他扩散模型变体 2. 预测类型: 确定性 vs. 随机性个体 vs. 群体3. 数据模态: 单变量 (仅位置数据)多模态 (结合视频、激光雷达等附加数据)4. 推理速度: 实时 vs. 非实时…

Maven 安装教程

一、安装地址 1.官网安装最新版本 2.其他版本&#xff0c;我这里是maven-3/3.6.2 二、配置环境 1. 点击此电脑鼠标右击->属性->高级系统设置->环境变量 &#xff0c;配置系统变量->新建&#xff1a;MAVEN_HOME 2.配置path 路径 &#xff1a;%MAVEN_HOME%\bin 三、安…

Pinia的使用与原理

Pinia 与 Vuex 对比 vuex&#xff1a; ts兼容性不好命名空间的缺陷(只能有一个store)mutation和action有区别 pinia&#xff1a; 更简洁的APIts兼容性更好无命名空间的缺陷(可以创建多个store)删除了mutation&#xff0c;统一在action中开发 使用方法 引入 // main.ts imp…

ChatGPT之制作短视频

引言 今天带来了如何使用 ChatGPT和剪映来制作简单的短视频教程&#xff0c;在这其中 ChatGPT的作用主要是帮我们生成文案&#xff0c;剪映的功能就是根据文案自动生成视频&#xff0c;并配上一些图片、动画、字幕和解说。 ChatGPT生成文案 首先&#xff0c;我们需要使用提示…

Anaconda的安装及其配置

一、简介 Anaconda是一个开源的包、环境管理器&#xff0c;主要具有以下功能和特点&#xff1a; 提供conda包管理工具&#xff1a;可以方便地创建、管理和分享Python环境&#xff0c;用户可以根据自己的需要创建不同的环境&#xff0c;每个环境都可以拥有自己的Python版本、库…

python爬虫抓取新闻并且植入自己的mysql远程数据库内

python爬虫抓取新闻并且植入自己的mysql远程数据库内&#xff01;这个代码是我自己写了很久才写好的&#xff0c;分享给大家。喜欢的点个赞。 # -*- coding: utf-8 -*- from xml.etree import ElementTree as ET import datetime import randomimport pymysql from selenium im…

常用排序算法(Java版本)

1 引言 常见的排序算法有八种&#xff1a;交换排序【冒泡排序、快速排序】、插入排序【直接插入排序、希尔排序】、选择排序【简单选择排序、堆排序】、归并排序、基数排序。 2 交换排序 所谓交换&#xff0c;就是序列中任意两个元素进行比较&#xff0c;根据比较结果来交换…

nginx slice模块的使用和源码分析

文章目录 1. 为什么需要ngx_http_slice_module2. 配置指令3. 加载模块4. 源码分析4.1 指令分析4.2 模块初始化4.3 slice模块的上下文4.2 $slice_range字段值获取4.3 http header过滤处理4.4 http body过滤处理5 测试和验证 1. 为什么需要ngx_http_slice_module 顾名思义&#…

程序员为什么不喜欢关电脑,这回答很霸道!

在大家的生活中&#xff0c;经常会发现这样一个现象&#xff1a;程序员经常不关电脑。 至于程序员不关电脑的原因&#xff0c;众说纷纭。 其中这样的一个程序员&#xff0c;他的回答很霸道&#xff1a; “因为我是程序员&#xff0c;我有权选择不关电脑。我需要在任何时候都能够…