MyBatis 入门详解

一、简介

1. 什么是 MyBatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)为数据库中的记录。

2. MyBatis 的特点

  • 轻量级框架:与 Hibernate 等全功能 ORM 框架相比,MyBatis 更轻量、更灵活。
  • SQL 显式控制:通过 XML 文件或注解的方式编写 SQL,便于优化和调试。
  • 低学习成本:MyBatis 的配置和使用都比较简单,适合快速上手。
  • 支持动态 SQL:通过 XML 或注解的方式可以方便地编写动态 SQL 语句。

二、MyBatis 环境搭建

1. 项目依赖

在使用 MyBatis 之前,需要在项目中添加相应的依赖。以下是 Maven 项目的依赖配置:

<dependencies><!-- MyBatis 依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!-- MySQL 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><!-- MyBatis 与 Spring 整合 --><dependency><groupId>org.mybatis.spring</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!-- Spring 依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.9.RELEASE</version></dependency>
</dependencies>

2. 配置文件

MyBatis 的核心配置文件通常命名为 mybatis-config.xml,该文件用于配置 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><!-- 环境配置 --><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/mybatis_db"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><!-- 映射配置文件 --><mappers><mapper resource="mappers/UserMapper.xml"/></mappers>
</configuration>

3. 实体类和映射文件

实体类

public class User {private Integer id;private String name;private Integer age;
}
映射文件

映射文件通常放置在 resources/mapper 目录下,UserMapper.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="com.example.mapper.UserMapper"><!-- 查询所有用户 --><select id="findAll" resultType="com.example.model.User">SELECT * FROM users;</select><!-- 根据 ID 查询用户 --><select id="findById" parameterType="int" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id};</select><!-- 插入用户 --><insert id="insert" parameterType="com.example.model.User">INSERT INTO users (name, age) VALUES (#{name}, #{age});</insert><!-- 更新用户 --><update id="update" parameterType="com.example.model.User">UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id};</update><!-- 删除用户 --><delete id="delete" parameterType="int">DELETE FROM users WHERE id = #{id};</delete></mapper>

4. DAO 层接口

public interface UserMapper {List<User> findAll();User findById(int id);void insert(User user);void update(User user);void delete(int id);
}

5. MyBatis 工具类

为了方便使用 MyBatis,我们可以编写一个工具类来获取 SqlSession

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 MyBatisUtil {private static SqlSessionFactory sqlSessionFactory;static {String resource = "mybatis-config.xml";try (InputStream inputStream = Resources.getResourceAsStream(resource)) {sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}

6. 测试 MyBatis

编写一个测试类来测试 MyBatis 的功能:

import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.session.SqlSession;import java.util.List;public class MyBatisTest {public static void main(String[] args) {try (SqlSession sqlSession = MyBatisUtil.getSqlSession()) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 插入用户User newUser = new User();newUser.setName("John Doe");newUser.setAge(25);userMapper.insert(newUser);sqlSession.commit();// 查询所有用户List<User> users = userMapper.findAll();users.forEach(user -> System.out.println(user.getName()));// 根据 ID 查询用户User user = userMapper.findById(1);System.out.println(user.getName());// 更新用户user.setName("Jane Doe");userMapper.update(user);sqlSession.commit();// 删除用户userMapper.delete(1);sqlSession.commit();}}
}

三、总结

以上是 MyBatis 的基本使用方法。从配置环境、编写实体类和映射文件,到实现基本的 CRUD 操作,涵盖了 MyBatis 的主要功能。希望这篇文章能帮助你快速上手 MyBatis,并在项目中灵活运用。

如果你对 MyBatis 有更多的需求,比如分页查询、复杂 SQL 等,可以查阅 MyBatis 的官方文档或相关教程来进一步学习。

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

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

相关文章

Windows搭建apache网站

1、官网下载安装包&#xff0c;注意下载服务器对应操作系统的安装包&#xff08;此案例为64位操作系统&#xff09; Apache VS17 binaries and modules downloadFor (business) webmasters, developers and home-users who want running always up to date Windows VS17 binar…

【机器学习】机器学习与智能交通在智慧城市中的融合应用与性能优化新探索

文章目录 引言机器学习与智能交通的基本概念机器学习概述监督学习无监督学习强化学习 智能交通概述交通流量预测交通拥堵管理智能信号控制智能停车管理 机器学习与智能交通的融合应用实时交通数据分析数据预处理特征工程 交通流量预测与优化模型训练模型评估 智能信号控制与优化…

pycharm安装openai报错

解决方案&#xff1a; Rust官网:http://rust-lang.org 下载安装包&#xff0c;下载后如下 双击这个exe文件 提示需要安装visual studio选择1进行安装即可。安装完成后会自动进行下一步 选择1进行安装 默认安装到C:\Users\用户名文件夹下 验证是否安装成功 由于这两个文件夹占…

k8s:实现一个pod两个容器

# 制作两个容器的镜像 通过以下Dockerfile创建一个镜像 cd /chz/install/docker vim Dockerfile <<<< 内容如下&#xff1a; FROM centosRUN sed -i -e "s|mirrorlist|#mirrorlist|g" /etc/yum.repos.d/CentOS-* RUN sed -i -e "s|#baseurlhttp:/…

Spring Boot框架基础

文章目录 1 Spring Boot概述2 Spring Boot入门2.1 项目搭建2.2 入门程序 3 数据请求与响应3.1 数据请求3.2 数据响应 4 分层解耦4.1 三层架构4.2 控制反转4.3 依赖注入 5 参考资料 1 Spring Boot概述 Spring是Java EE编程领域的一个轻量级开源框架&#xff0c;是为了解决企业级…

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 一、简单介绍 二、处理文本数据 三、用…

Python怎么使用参数?例如写一个脚本,读取另一个文件里的参数。

在Python中&#xff0c;你可以使用多种方式读取文件并获取其中的参数。一种常见的方法是使用argparse库来处理命令行参数&#xff0c;但这并不是直接从文件中读取参数。若你想从一个文本文件中读取参数&#xff0c;你需要使用文件读取和解析技巧。 假设你有一个参数文件&#x…

IDEA2023.1.4配置springboot项目

新建“Spring Initializr”项目 勾选以下三个依赖项即可。 springboot分为代码层、资源层和测试层。 代码层 根目录&#xff1a;src/main/java 入口启动类及程序的开发目录。在这个目录下进行业务开发、创建实体层、控制器层、数据连接层等。 资源层 根目录&#xff1a;src…

喜讯!云起无垠入选《LLM驱动数字安全2024—AI安全系列报告》

近日&#xff0c;国内领先的数字化领域第三方服务机构数世咨询&#xff0c;发布了《LLM驱动数字安全2024—AI安全系列报告》。该报告深入统计分析了国内在LLM研发或应用方面具有实力的数字安全供应商&#xff0c;并通过报告和雷达图的形式&#xff0c;直观展示了这些供应商在数…

vue2的form利用插槽修改错误提示UI

1. 需求 很多时候我们使用el-form想修改下错误提示的UI&#xff0c;比如table中使用form校验这类场景下错误提示的UI调整就非常重要。 2. 了解文档 Form-Item Scoped Slot name说明error自定义表单校验信息的显示方式&#xff0c;参数为 { error } 3.实际使用 html里使用…

抽象,自定义函数,递归

6.1懒惰是一种美德 如果你 在一个地方编写了一些代码&#xff0c;但需要在另一个地方再次使用&#xff0c;该如何办呢&#xff1f; 假设你编写了一段代码&#xff0c;它计算一些斐波那契数&#xff08;一种数列&#xff0c;其中每个数都是前两个数的和&#xff09;。 现在的…

c# 身份证信息验证

1、返回结果 {"check": false,"info": {"Province": "北京市","City": "市辖区","Area": "东城区","Sex": "女","Birthday": "2000-01-01 00:00:00&quo…

C语言习题~day30

下面哪个不是预定义符号&#xff1f;&#xff08; &#xff09; A.__FILE__ B.__TIME__ C.__DATE__ D.__MAIN__ 前三个是常用宏&#xff0c;分别是&#xff1a;打印所在文件、打印编译时间、打印编译日期。除此之外&#xff0c;还有__LINE__&#xff08;行号&#xff09;、…

笔记96:前馈控制 + 航向误差

1. 回顾 对于一个 系统而言&#xff0c;结构可以画作&#xff1a; 如果采用 这样的控制策略&#xff0c;结构可以画作&#xff1a;&#xff08;这就是LQR控制&#xff09; 使用LQR控制器&#xff0c;可以通过公式 和 构建一个完美的负反馈系统&#xff1b; a a 但是有上…

解密智慧校园解决方案:赋能数字化教育的未来

在当今数字化时代&#xff0c;智慧校园解决方案正以惊人的速度改变着教育界的面貌。随着科技的快速发展&#xff0c;数字化教育已经逐渐成为现代教育的核心。智慧校园解决方案作为一个集技术、教育和创新于一体的综合性项目&#xff0c;为学校提供了许多机遇和挑战。本文将揭示…

遇见桂林山水画廊,深层互联自动讲解耳机走进漓江

遇见山水&#xff0c;听懂山水。由深层互联独家打造&#xff0c;桂林漓江山水画廊导览工程&#xff0c;于不久前正式启动&#xff0c;声情并茂的真人语音引导着游客&#xff0c;走进有声有色的山水画卷中。 桂林山水甲天下&#xff0c;得天独厚的自然景观&#xff0c;奇幻瑰丽…

掌握4种常见电脑视频压缩方法,轻松解决空间危机

在现今数字化的时代&#xff0c;视频成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着高清、超高清视频的普及&#xff0c;视频文件的大小也随之增大&#xff0c;给存储、传输和分享带来了一定的挑战。为了克服这一问题&#xff0c;电脑视频压缩成为一项关键的技术…

SwiftUI获取用户的位置信息(CLLocationManager,CLLocationManagerDelegate)

本篇文章将会介绍一下在SwiftUI中如何通过CorLocation框架获取用户的位置信息&#xff0c;因为获取位置信息属于用户的隐私信息&#xff0c;所以需要在Info.plist文件里面加上访问位置权限的说明。 关于位置信息&#xff0c;可以请求两种级别的许可&#xff1a;always和when i…

视频剪辑去水印软件推荐 视频剪辑去水印方法

不会去水印&#xff0c;很难做好视频剪辑。选对软件、掌握去水印的方法&#xff0c;是每个剪辑师必须经历的过程。真正擅长视频剪辑去水印的软件&#xff0c;一定具备多种去水印功能。剪辑师可以根据素材的具体情况&#xff0c;选择最恰当的去水印方法。有关视频剪辑去水印软件…

JimuReport 积木报表 v1.7.5 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…