首页 > 其他分享 >第 1 章 MyBatis快速入门

第 1 章 MyBatis快速入门

时间:2024-10-08 14:50:39浏览次数:12  
标签:入门 映射 blog SQL MyBatis import 快速 id

1.1 ORM简介

ORM(Object Relational Mapping,对象——关系映射)框架的主要功能是根据映射配置文件,完成数据在对象模型与关系模型之间的映射,同时出屏蔽了连接数据库、创建 Statement 对象、执行 SQL、读取 ResultSet、转换 JavaBean、关闭 ResultSet、Statement 对象以及数据库连接等操作。

在这里插入图片描述

1.2 常见持久化框架

Hibernate

通过 hbm.xml 映射文件维护 Java 类与数据库表的映射关系。数据库中所有的表都对应一个 Java 类,表中的每一条数据在运行过程中会被映射成相应的 Java 对象。

JPA

Java Persistence API 是EJB 3.0 中持久化部分的规范,但它可以脱离 EJB 的体系单独作为一个持久化规范进行使用。设计上与 Hibernate 相类似。

Spring JDBC

Spring 框架使用模板方式对原生 JDBC 进行的一层封装。

MyBatis

MyBatis 通过映射配置文件或相应注解将 ResultSet 映射为 Java 对象。相较于 Hibernate,MyBatis更加轻量级,可控性也更高。可以直接编写待执行的原生 SQL 语句,比较适合大数据量、高并发等场景。

MyBatis 提供了强大的动态 SQL 功能,可以根据执行时传入的实际参数值接着出完整的、可执行的 SQL 语句。

1.3 MyBatis 示例

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>
    <!-- 定义属性值 -->
    <properties>
        <property name="username" value="root"/>
        <property name="id" value="123"/>
    </properties>

    <!-- 全局配置信息 -->
    <settings>
        <!-- 使全局的映射器启用或禁用缓存 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 允许JDBC 支持自动生成主键 -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!-- 指定 MyBatis 所用日志的具体实现 -->
<!--        <setting name="logImpl" value="SLF4J"/>-->
        <!-- 使用驼峰命名法转换字段 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!-- 别名定义 -->
    <typeAliases>
        <!-- 配置别名信息,在映射配置文件中可以直接使用别名 -->
        <typeAlias alias="Blog" type="com.example.Blog"/>
        <typeAlias alias="Author" type="com.example.Author"/>
        <typeAlias alias="Post" type="com.example.Post"/>
    </typeAliases>

    <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"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 映射配置文件的位置 -->
    <mappers>
        <mapper resource="com/example/BlogMapper.xml"/>
    </mappers>
</configuration>

BlogMapper.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.BlogMapper">
    <!-- 定义映射规则 -->
    <resultMap id="detailedBlogResultMap" type="Blog">
        <!-- 构造函数映射 -->
        <constructor>
            <idArg column="blog_id" javaType="int"/>
        </constructor>
        <!-- 属性映射 -->
        <result column="blog_title" property="title"/>
        <!-- 对象属性的映射,同时也是一个嵌套映射 -->
        <association property="author" resultMap="authorResultMap"/>
        <!-- 集合属性的映射,也是一个匿名的嵌套映射 -->
        <collection property="posts" ofType="Post">
            <id column="post_id" property="id"/>
            <result column="post_content" property="content"/>
        </collection>
    </resultMap>

    <resultMap id="authorResultMap" type="Author">
        <id column="author_id" property="id"/>
        <result column="author_username" property="username"/>
        <result column="author_password" property="password"/>
        <result column="author_email" property="email"/>
    </resultMap>

    <!-- 定义查询语句 -->
    <select id="selectBlogDetails" resultMap="detailedBlogResultMap">
        select
            B.id as blog_id,
            B.title as blog_title,
            B.author_id as blog_author_id,
            A.id as author_id,
            A.username as author_username,
            A.password as author_password,
            A.email as author_email,
            P.id as post_id,
            P.blog_id as post_blog_id,
            P.content as post_content
        from Blog B
        left outer join Author A on B.author_id = A.id
        left outer join Post P on B.id = P.blog_id
        where B.id = #{id}
    </select>
</mapper>

Main.java

package com.example;

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;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws IOException {
        String resource = "com/example/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 加载 mybatis-config.xml 配置文件,创建 SqlSessionFactory 对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 创建 SqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            Map<String, Object> parameter = new HashMap<>();
            parameter.put("id", 1);
            // 执行 select 语句,将 ResultSet 结果集映射成对象并返回
            Blog blog = sqlSession.selectOne("com.example.BlogMapper.selectBlogDetails", parameter);
            // 输出查询结果
            System.out.println(blog);
        } finally {
            // 关闭 SqlSession 对象
            sqlSession.close();
        }
    }
}

完整代码已同步上传至 gitee

1.4 MyBatis 整体架构

在这里插入图片描述

1.4.1 基础支持层
  • 反射模块:对 Java 原生的反射进行了良好的封装
  • 类型转换模块:1. 别名机制;2. JDBC 类型与 Java 类型之间相互转换
  • 日志模块:集成第三方日志框架,如 Log4j、Log4j2、slf4j 等
  • 资源加载模块:封装类加载器
  • 解析器模块:1. 封装 XPath,2. 处理动态 SQL 的占位符
  • 数据源模块:连接池、检测连接状态等
  • 事务管理:与 Spring 集成,由 Spring 管理事务
  • 缓存模块:提供一级缓存和二级缓存
  • Binding模块:将用户自定义的 Mapper 接口与映射配置文件关联起来

在这里插入图片描述

1.4.2 核心处理层
  • 配置解析,解析 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中的注解信息

  • SQL 解析与 scripting 模块,解析动态 SQL

  • SQL 执行,如图

    在这里插入图片描述

  • 插件

1.4.3 接口层

核心:SqlSession,定义了 MyBatis 暴露给应用程序调用的 API

1.5 本章小结

  1. ORM 框架的相关概念及价值
  2. 常用的 ORM 框架
  3. MyBatis 使用示例
  4. MyBatis 整体构架

标签:入门,映射,blog,SQL,MyBatis,import,快速,id
From: https://blog.csdn.net/weixin_45740473/article/details/142760084

相关文章

  • C/C++/EasyX——入门图形编程(6)
    【说明】hello,友友们,这一章是我写的入门图形编程的最后一章了,内容也不多,希望你们学的开心(^~^)。顺便说一下,现在的我对一些基础操作的小游戏挺感兴趣的,之后也许会把代码教程写出来,动个小手点赞支持一下吧。敬请期待ヽ(*≧ω≦)ノ,一:内容介绍这一篇讲的是如何在黑窗口上播放音乐......
  • Docker入门教程
    docker安装介绍"纸上得来终觉浅,绝知此事要躬行""天下没有难学的技术"docker简单介绍:Docker是什么?Docker其中包括,镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是web应用或者数据库应用)及其环境能够做到“一......
  • 【STL详解】STL标准模板库入门 | STL版本 | STL六大组件 | STL优点 | 常用STL容器vect
    目录1、概述1.1、C++标准库1.2、Boost开源库2、STL版本2.1、HP原始版本2.2、P.J.实现版本2.3、RW实现版本2.4、SGI实现版本2.5、STLport实现版本3、STL的六大组件3.1、STL六大组件构成3.2、六大组件的交互关系4、STL优点5、STL常用容器vector、list......
  • 面相快速入门教程7木型
    7木型在本章中,我将介绍木型的基础知识,你将学会如何识别木型。首先,我们来快速参考一下木的特征:能量:向上、推动、活跃、早晨、春天、童年特质:乐观、热情、活跃、人道主义、自信、愤怒、沮丧、冲动、反应灵敏、直接、敏锐、实际、逻辑性强、有条理、果断、有判断力、好奇、好学......
  • Mybatis——SqlSessionFactoryBuilder工厂模式
    Mybatis——SqlSessionFactoryBuilder工厂模式工厂模式题外话合集总览:Mybatis框架梳理  说一下我的理解:设计模式是对项目工程中代码结构的设计和抽象,有了这种设计和抽象,系统才有了扩展性。记住了模式的角色、组成、UML类图,只是记住了模式的形,类似武术中的拳法套......
  • Python快速上手爬虫的7大技巧
    Python应用最多的场景还是Web快速开发、爬虫、自动化运维。爬虫在开发过程中也有很多复用的过程,这里总结一下,以后也能省些事情。   1、基本抓取网页    get方法    post方法   2、使用代理IP在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代......
  • 4、.Net 快速开发框架:Blog.Core - 开源项目研究文章
    Blog.Core是一个基于.NETCore的开源博客系统,旨在提供一个简单、易用且功能丰富的博客平台。它采用最新的.NET技术栈,包括但不限于ASP.NETCore、EntityFrameworkCore、RazorPages等,以确保高性能和良好的开发体验。主要特性跨平台:作为.NETCore应用程......
  • MyBatis 批量插入方案
    MyBatis批量插入MyBatis插入数据的方法有几种:for循环,每次都重新连接一次数据库,每次只插入一条数据。在编写sql时用foreach标签,建立一次数据库连接。使用MyBatis的batchInsert方法。下面是方法1和2的对比:在数据量较少的时候,比如几十条,可以使用方......
  • IDEA如何快速定位到当前打开文件所在的目录
    前言我们在使用IDEA开发时,经常需要知道当前打开的文件是在哪个目录,这个可以在上方看到具体的目录。但是,当我们需要知道这个目录下有哪些文件或者想要复制当前文件的时候,就需要快速定位当前文件的目录了。那么,我们应该如何操作呢?如何操作定位当前打开文件目录首先,我们打开我们......
  • visual studio 使用技巧 1:快速找到接口的实现类
    在VisualStudio中,可以通过以下几种方法快速查找接口的实现类:1.使用“查找所有引用”功能右键点击接口名称。选择“查找所有引用”(FindAllReferences)。在结果窗口中,您可以看到所有实现了该接口的类。2.使用“导航到实现”功能(推荐)这个我......