【mybatis】介绍_入门程序

1、介绍

1.1简介

  • MyBatis 是一个优秀的持久层框架,它内部封装了 JDBC,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建 Connection、创建 Statement、手动设置参数、获取结果集等 JDBC 繁杂的过程。
     

1.2主要特点和介绍

  • 对象关系映射 (ORM):O:Object 对象 R:Relational 关系 M:Mapping 映射。MyBatis 提供了一种简单而强大的方法将数据库中的记录映射到 Java 对象。这使得开发者能够更直观地与数据库进行交互,无需直接编写繁琐的 JDBC 代码。开发者可以使用 MyBatis 的 XML 配置文件或注解来定义这些映射关系。
  • 动态 SQL:MyBatis 提供了强大的动态 SQL 功能,如 <if><choose><when><otherwise> 等元素,可以根据不同的条件动态生成 SQL 语句。
  • 参数处理:MyBatis 支持多种参数类型,如基本类型、JavaBean、Map 等,并且提供了参数占位符(如 #{})和直接拼接(如 ${})两种方式来处理参数。
  • 结果映射:MyBatis 支持将查询结果映射到 Java 对象或集合中。可以通过 XML 或注解来配置结果映射。
  • 插件扩展:MyBatis 允许通过编写插件来扩展其功能。
  • 缓存机制:MyBatis 支持一级缓存(SqlSession 级别的缓存)和二级缓存(Mapper 级别的缓存)。通过配置缓存,可以提高查询效率,减少数据库访问次数。
  • 事务管理:MyBatis 支持事务管理,可以通过配置事务管理器来管理事务。
  • 与其他框架的集成:MyBatis 可以很容易地与 Spring、Struts2 等其他 Java 框架集成。

1.3功能架构

我们把Mybatis的功能架构分为三层:

  • API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  • 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  • 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

1.4工作流程

  1. 读取配置文件:MyBatis 首先会读取配置文件(如 mybatis-config.xml),这个配置文件包含了数据库连接信息、Mapper 映射文件的位置等信息。
  2. 构建 SqlSessionFactory:使用 SqlSessionFactoryBuilder 类,根据配置文件中的信息构建 SqlSessionFactory 实例。SqlSessionFactory 是 MyBatis 的核心类之一,用于创建 SqlSession 对象。
  3. 创建 SqlSession:通过 SqlSessionFactory 实例创建 SqlSession 对象。SqlSession 是 MyBatis 中用于执行 SQL 语句和获取映射器(Mapper)实例的主要接口。
  4. 获取 Mapper:从 SqlSession 中获取 Mapper 代理对象。Mapper 是 MyBatis 中用于定义 SQL 语句和结果映射的接口。MyBatis 会根据 Mapper 接口和配置文件中的映射信息,动态生成 Mapper 的实现类,并返回其代理对象。
  5. 执行 SQL 语句:通过 Mapper 代理对象调用 SQL 语句。MyBatis 会根据 Mapper 接口中的方法名和参数,找到对应的 SQL 语句,并通过 JDBC 执行该 SQL 语句。
  6. 处理结果:MyBatis 会将 JDBC 返回的结果集(ResultSet)转换成 Java 对象,并返回给调用者。这个过程包括将结果集中的每一行数据映射到 Java 对象的属性上,以及处理可能的关联关系(如一对多、多对一等)。
  7. 关闭 SqlSession:在完成数据库操作后,需要关闭 SqlSession 对象,以释放 JDBC 连接等资源。

2、入门程序

1、准备一个数据库,这里我们使用mysql数据库创建一个user表并插入数据

CREATE DATABASE mybatis_demo;  
USE mybatis_demo;  CREATE TABLE user (  id INT PRIMARY KEY AUTO_INCREMENT,  name VARCHAR(20) NOT NULL,  age INT NOT NULL  
);  INSERT INTO user (name, age) VALUES ('AAA', 25), ('BBB', 30);

2、创建maven项目,在pom.xml中添加MyBatis依赖

<dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>3.5.9</version>  
</dependency>  <!-- MySQL JDBC 驱动 -->  
<dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.27</version>  
</dependency>

3、在src/main/resources目录下创建mybatis-config.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration  PUBLIC "-//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_demo?useSSL=false&serverTimezone=UTC"/>  <property name="username" value="your_username"/>  <property name="password" value="your_password"/>  </dataSource>  </environment>  </environments>  <mappers>  <mapper resource="com/example/mapper/UserMapper.xml"/>  </mappers>  
</configuration>

4、在src/main/java/com/example/mapper目录下创建UserMapper.java接口

package com.example.mapper;  import com.example.domain.User;  
import java.util.List;  public interface UserMapper {  List<User> getAllUsers();  
}

5、在src/main/resources/com/example/mapper目录下创建UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.example.mapper.UserMapper">  <select id="getAllUsers" resultType="com.example.domain.User">  SELECT * FROM user  </select>  
</mapper>

6、创建Java实体类

package com.example.domain;  public class User {  private Integer id;  private String name;  private Integer age;  // getters and setters...  @Override  public String toString() {  return "User{" +  "id=" + id +  ", name='" + name + '\'' +  ", age=" + age +  '}';  }  
}

7、编写测试代码

package com.example;  import com.example.domain.User;  
import com.example.mapper.UserMapper;  
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.Reader;  
import java.util.List;  public class MyBatisDemo {  public static void main(String[] args) {  // 加载MyBatis配置文件  String resource = "mybatis-config.xml";  try (Reader reader = Resources.getResourceAsReader(resource)) {  // 构建SqlSessionFactory  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);  // 获取SqlSession对象  try (SqlSession sqlSession = sqlSessionFactory.openSession()) {  // 获取Mapper接口的实现类  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  // 调用Mapper接口中的方法,执行SQL语句  List<User> users = userMapper.getAllUsers();  // 处理结果  for (User user : users) {  System.out.println(user);  }  // 提交事务(如果操作了数据库的话)  // sqlSession.commit();  }  } catch (IOException e) {  e.printStackTrace();  }  }  
}

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

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

相关文章

如何加密电脑文件夹?重要文件夹怎么加密?

文件夹可以帮助我们管理电脑数据&#xff0c;而文件夹并不具有安全保护功能&#xff0c;很容易导致数据泄露。因此&#xff0c;我们需要加密保护电脑文件夹。那么&#xff0c;如何加密电脑文件夹呢&#xff1f;下面我们就来了解一下。 EFS加密 EFS加密是Windows提供的数据加密…

微信小程序开发中怎么配置SSL证书?

在微信小程序开发中&#xff0c;配置SSL证书主要用于实现HTTPS请求&#xff0c;以保证数据传输的安全性。以下是配置SSL证书的基本步骤&#xff1a; 一、获取SSL证书 首先&#xff0c;你需要获取一个有效的SSL证书。SSL证书可以被广泛信任的证书颁发机构申请&#xff0c;如Jo…

【论文粗读|arXiv】GaSpCT: Gaussian Splatting for Novel CT Projection View Synthesis

Abstract 本文提出了一种新颖的视图合成和3D场景表示方法&#xff0c;用于为计算机断层扫描&#xff08;CT&#xff09;生成新的投影视图。 方法采用了Gaussian Splatting 框架&#xff0c;基于有限的2D图像投影集&#xff0c;无需运动结构&#xff08;SfM&#xff09;方法&am…

【Linux:环境变量】

环境变量一般是指在操作系统中用来指定操作系统环境的一些参数 常见的环境变量&#xff1a; PATH 指定可执行程序的搜索路径 系统级的文件&#xff1a;/etc/bashrc 用户级文件&#xff1a;~/.bashrc ~/.bash_profile HOME 指定用户的主要工作目录&#xff08;当前用…

vue2 中使用audio播放音频

<audio controls ref"audioPlayer" style"width:800px;"><source :src"obj.audioUrl" /></audio> data() {return {obj: {audioUrl: require(../../../../public/audio/video.wav)}}}, 有个地方一定要注意一下. 如果不写req…

Java官网下载JDK17版本详细教程(下载、安装、环境变量配置)

第一步&#xff0c;去百度搜索甲骨文官网 第二步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 第十步 然后在系统变量里面找到path-编辑-新建添加这个,点击确定就好了 %JAVA_HOME%\bin 就完成了&#xff0c;接下来测试是否成功。 测试&#xff1a; 第一步&a…

本地部署资讯问答机器人:Langchain+Ollama+RSSHub 实现 RAG

一、背景 在这个信息爆炸&#x1f4a5;的时代&#xff0c;人工筛选对自己有价值的信息无异于大海捞针。不过&#xff0c;幸好现在有了 AI 这个强大的工具&#xff0c;我们可以让它来帮我们做集检索、整合与分析为一体的工作。 这里&#xff0c;我想以 A 股行情&#xff08;其…

Jailhouse是什

基本概念 Jailhouse, a Linux-based partitioning hypervisor jailhouse是一个用于嵌入式的系统虚拟化工具&#xff0c;由德国西门子公司于2013年11月开发&#xff0c;并以GPLv2 协议开源。到 2019 年更新到 0.12 版&#xff0c;之后就再没更新过&#xff0c;计划的相关文档也一…

在k8s中部署hadoop后的使用,包括服务端及客户端(客户端的安装及与k8s服务的对接)

&#xff08;作者&#xff1a;陈玓玏&#xff09; 在https://blog.csdn.net/weixin_39750084/article/details/136744772?spm1001.2014.3001.5502和https://blog.csdn.net/weixin_39750084/article/details/136750613?spm1001.2014.3001.5502这两篇文章中&#xff0c;说明…

配电设备数据采集

在数字化与智能化浪潮的推动下&#xff0c;配电设备数据采集正迎来前所未有的发展机遇。HiWoo Box网关以其独特的视角和出色的性能&#xff0c;为配电设备数据采集带来了全新的变革。 一、HiWoo Box网关的重要性 传统的配电设备数据采集方式往往存在效率低、准确性差、响应慢…

parallelsdesktop19密钥激活 PD19虚拟机完整图文安装教程

Parallels Desktop 19 &#xff08;简称 PD 19)是最新发布的 macOS 平台的 windows 虚拟机&#xff0c;本文是使用 Parallels Desktop 19 虚拟机安装 Windows 的详细图文破解安装教程。 一下载安装 Parallels Desktop 软件下载完成后打开&#xff0c;双击打开 安装.dmg Para…

org.postgresql.util.PSQLException: 错误: 关系 “dual“ 不存在

springboot 项目连接 postgreps&#xff0c;启动时报错 org.postgresql.util.PSQLException: 错误: 关系 "dual" 不存在。 查阅资料后发现这是由配置文件中的配置 datasource-dynamic-druid-validationQuery 导致的 spring:datasource:druid:stat-view-servlet:ena…