MyBatis(一)-入门

==>>MyBatis中文网

1、第一个 mybastis程序

1.1 导入jar包

3.4.1
5.1.47

    org.mybatis
    mybatis
    ${mybatis.version}

    mysql
    mysql-connector-java
    ${mysql.version}

1.2 jdcb.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/animedb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8
username=root
password=root

1.3 mybatis-config.xml

数据配置信息可以直接在mybatis-config.xml中填写,也可以引入外部数据库配置信息文件;


1.4 xxxMapper.xml

SQL映射文件;


    select * from animes where id = #{id}

1.5 获取 SqlSession 并执行SQL

1.5.1 获取 SqlSessionFactory

  1. 指定mybatis的 核心配置文件 “mybatis-config.xml”
  2. 使用 mybatis提供Resources 工具类读取 核心配置文件,转为 输入流对象
  3. 使用 SqlSessionFactoryBuilder对象的 build方法,获取到 DefaultSqlSessionFactory
//指定mybatis的核心配置文件路径
String resource = "mybatis-config.xml";

//使用mybatis提供的Resources 工具类读取核心配置文件,转为输入流对象
InputStream inputStream = Resources.getResourceAsStream(resource);

//使用SqlSessionFactoryBuilder对象的build方法,基于上一步的输入流对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//获取到的是 DefaultSqlSessionFactory
System.out.println(sqlSessionFactory);
//org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@45c8e616

1.5.2 sqlSessionFactory 获取 SqlSession 实例

SqlSession 提供了在数据库 执行 SQL 命令所需的所有方法,拿到SqlSession 就可以执行;

session.selectOne(statement,parameter); 方法 参数分析

参数 说明 statement 准备要执行的SQL语句的唯一标识符(mybatis可以识别,目的是可以通过此标识,查找到要执行的SQL语句) parameter 准备要执行的SQL语句的参数值

//将实例化SqlSession放在 try()中,会自动关闭资源
try (SqlSession session  = sqlSessionFactory.openSession()) {
//通过获取的SqlSession的实例,执行查询操作
//根据动漫编号,查询动漫详情
//单独使用SqlSession的方法,namespace可以随意的定义
//namespace.方法名,通过sql语句唯一标识字符串,找到执行SQL
 Anime anime = (Anime) session.selectOne("huayu.selectAnime", 101);

 System.out.println(anime);

}

1.5.3 面向接口开发

注意在resource下建立文件夹的时候需要 com/kcg/mybatis ,中间的分隔符要使用反斜杠,不能用点;

  1. 创建 接口xxxMapper.java(注意路径 要与xxxMapper.xml的包名结构一致;)
  2. 通过 session.getMapper(xxxMapper.class); 获取接口代理类
  3. 使用 接口代理类,调用接口方法
try (SqlSession session  = sqlSessionFactory.openSession()) {
    //面向接口开发
    //推荐的方式
    AnimeMapper animeMapper = session.getMapper(AnimeMapper.class);
    System.out.println(animeMapper);
    //代理对象  org.apache.ibatis.binding.MapperProxy@4cc0edeb

    //直接就可以通过调用接口的方法,执行对象的SQl语句,并返回接口,不需要关心mybatis底层是调用那个方法
    Anime anime = animeMapper.selectAnime(101);
    System.out.println(anime);

}

try()中实例化对象报错问题

https://www.cnblogs.com/xiaoqigui/p/16598100.html

指定maven版本就可以


     org.apache.maven.plugins
     maven-compiler-plugin

         8
         8

2、配置

2.1 所有配置 和 顺序

注意配置的顺序不能错,可以少写,但是不能顺序错

2.2 properties 属性

1、properties 属性: 自定义核心属性配置,也可以 引入外部的属性文件,比如jdbc.properties;

  • resource 属性指定外部配置文件,优先级高于property子标签属性配置,可以以单独使用,如果二者同时存在,优先以外部为主
//resource属性引入的外部配置文件,优先级高于property子标签属性

2.3 settings 设置

一些设置的开启;

下面是简单举例,设置用很多,可以直接看官网;


2.4 typeAliases 类型别名

在SQL的xml文件中,resultType 可以使用 别名,不区分大小写;

  • 单个取别名,在SQL的xml文件中,resultType 可以使用 别名, 不区分大小写
  • 批量取别名 :指定实体所在的父包路径,自动指定包及子包中所有的实体批量取别名,默认的类名是首字母小写, 不区分大小写;
  • 建议,如果没有安装插件, 从SQL映射xml文件中无法自动定位到目标实体,不利于代码的可读性;
  • mybatis对 Java 的基本数据类型 有 内建的类型别名;

2.5 environments 环境配置

MyBatis 可以配置成适应多种环境;

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。


        ......

        .......

2.5.1 transactionManager 事务管理

environment 标签的子标签 transactionManager;

  • transactionManager:事务管理,使用的是jdbc的数据管理,以后框架整合会个Spring处理;
  • MyBatis 中有两种类型的事务管理器(也就是 type=” [JDBC|MANAGED]“);
    JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为
  • 如果使用Spring + mybatis :事务管理,交给Spring处理;

2.5.2 dataSource 数据源

  • 数据源配置:有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”)
    以后由Spring处理;

2.6 mappers 映射器

  • 用于 指定SQL文件的加载,作用:告诉 MySql 到哪里去找 映射文件

2.6.1 单个SQL映射文件的加载

  • resource

  • 通过接口

2.6.2 批量SQL映射文件加载

只需要指定mapper接口的所在包;


3、MyBatis 执行过程

3.1 代码分析执行过程

//1、加载全局配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

//2、实例化 SqlSessionFactoryBuilder 构建器
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

//3、解析 配置信息文件流,并返回  defaultSessionFactory
SqlSessionFactory defaultSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

//4、实例化 SqlSession
SqlSession sqlSession = defaultSessionFactory.openSession();
System.out.println(sqlSession);
//org.apache.ibatis.session.defaults.DefaultSqlSession@20398b7c

//5、获取接口的代理实现类
AnimeMapper animeMapper = sqlSession.getMapper(AnimeMapper.class);

//调用接口的 代理类,执行方法
Anime anime = animeMapper.selectAnimeById(101);
System.out.println(anime);
//Anime(id=101, cid=1, name=斗破苍穹, author=土豆, actor=萧炎, produce=玄机科技, createDate=Sun Aug 07 00:00:00 CST 2022)

3.2 源码分析执行过程分析

3.2.1 Resources 加载全局配置文件

//加载全局配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

3.2.2 SqlSessionFactoryBuilder 构建器

//实例化 SqlSessionFactoryBuilder 构建器
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

3.2.3 sqlSessionFactoryBuilder.build(inputStream);

解析 配置信息文件流,并返回 defaultSessionFactory;

//解析 配置信息文件流,并返回  defaultSessionFactory
SqlSessionFactory defaultSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

手动实现,体验实例化Configuration;

//手动解析配置文件流,实例化Configuration,体验Mybatsi自动实例化Configuration;
//实例化 XMLConfigBuilder  参数:配置文件流,环境名字,Properties实例
//XMLConfigBuilder xmlConfigBuilder = new XMLConfigBuilder(inputStream, "development_dev", new Properties());

//解析配置文件流
//Configuration configuration = xmlConfigBuilder.parse();

`SqlSessionFactoryBuilder源码分析:

sqlSessionFactoryBuilder.build(inputStream)方法, 首先进入sqlSessionFactoryBuilder类

调用当前类的 SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)方法;

MyBatis(一)-入门

其中,又 调用当前类的一个build方法解析配置文件,并实例化 DefaultSqlSessionFactory;

MyBatis(一)-入门

3.2.4 defaultSessionFactory.openSession();

//实例化 SqlSession
SqlSession sqlSession = defaultSessionFactory.openSession();
//org.apache.ibatis.session.defaults.DefaultSqlSession@20398b7c

DefaultSqlSessionFactory源码分析:

openSession方法调用openSessionFromConnection;

MyBatis(一)-入门

openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) 方法:方法:

MyBatis(一)-入门

3.2.5 sqlSession.getMapper(xxx.class);

//获取到接口的代理实现类
AnimeMapper animeMapper = sqlSession.getMapper(AnimeMapper.class);
//org.apache.ibatis.binding.MapperProxy@5abca1e0

//也可以通过,解析配置文件流 创建配置对象,并通过配置对象直接getMapper,前提是获得了sqlSession
//Configuration configuration = xmlConfigBuilder.parse();
//AnimeMapper animeMapper = configuration.getMapper(AnimeMapper.class, sqlSession);

3.2.6 animeMapper.selectAnimeById(101);

//调用接口代理类,执行方法
Anime anime = animeMapper.selectAnimeById(101);
//Anime(id=101, cid=1, name=斗破苍穹, author=土豆, actor=萧炎, produce=玄机科技, createDate=Sun Aug 07 00:00:00 CST 2022)

3.2.7 总结

MyBatis(一)-入门

Original: https://www.cnblogs.com/xiaoqigui/p/16602906.html
Author: 化羽羽
Title: MyBatis(一)-入门

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620896/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java Script

    JavaScript JavaScript(简称”JS”)是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言,弱类型,脚本语言 三大部分 核心(E…

    数据库 2023年6月16日
    087
  • 记一次故障系列:docker 启动失败

    启动报错: csharp;gutter:true; ]# systemctl start docker Job for docker.service failed because …

    数据库 2023年6月9日
    076
  • MySQL的select for update用法

    MySQL中的select for update大家应该都有所接触,但什么时候该去使用,以及有哪些需要注意的地方会有很多不清楚的地方,我把我如何使用和查询到的文档在此记录。 sel…

    数据库 2023年5月24日
    0156
  • [SQLServer]NetCore中将SQLServer数据库备份为Sql脚本

    描述: 最近写项目收到了一个需求, 就是将 SQL Server数据库备份为Sql脚本, 如果是My Sql之类的还好说, 但是在网上搜了一大堆, 全是教你怎么操作 SSMS的, …

    数据库 2023年6月9日
    0101
  • Mysql 的Innodb引擎和Myisam数据结构和区别

    先大体看一下MySQL的SQL layer层的一个架构流程: 对一些关键模块做一下简单的描述: 初始模块:初始一些参数,比如初始myinit配置文件(在安装的根目录下)里的一些参数…

    数据库 2023年6月16日
    095
  • SNMP基础简介

    近来,公司产品开发涉及到SNMP方面的知识, 在此作一些总结,或许对您现在或者将来有用。 在目前越来越复杂的网络环境中,整个环境有各种各样的网络设备,为了能更好的对这些设备进行管理…

    数据库 2023年6月11日
    091
  • 力扣leetcode刷题记录1—-

    【以下题目来源均来自力扣leetcode】 World 表: 【描述】name 是这张表的主键。这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。 【问题】如果一个…

    数据库 2023年6月16日
    092
  • SQL Server 2022来了

    SQL Server 2022来了 微软SQL Server依然保持着3年内发布一个大版本的传统,最新版本已经来到SQL Server2022 相关特性双向HA/DR 到Azure…

    数据库 2023年6月9日
    0109
  • podman对容器映像签名和分发

    熟悉podman 如何使用 Podman 对容器映像进行签名和分发 熟悉podman 此示例容器将运行一个非常基本的 httpd 服务器,该服务器仅为其索引页提供服务 [root@…

    数据库 2023年6月14日
    0116
  • NO.5 MySQL-笔记

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    095
  • SpringBoot-异常处理

    在SpringBoot中,无论是请求不存在的路径、@Valid校验,还是业务代码(Controller、Service、Dao)抛出异常,SpringBoot对错误的默认处理机制是…

    数据库 2023年6月14日
    094
  • 设计模式之(12)——外观模式

    外观模式(facadePattern)又叫门面模式,隐藏了子系统的复杂实现,为子系统中的一组接口提供了一个统一的访问入口,使得子系统容易被访问或使用,说白了就是把复杂的子系统封装成…

    数据库 2023年6月14日
    086
  • Mybatis-Plus一键生成代码

    Mybatis-Plus一键生成代码 一、闲言碎语 闲来无事看了看了MP的官网看到一键生成的代码更新了! 整个Ui风格都变了,遂决定瞅一眼新的代码生成器 官网地址~~ 二、引入依赖…

    数据库 2023年5月24日
    078
  • 数据库读写分离

    ———-数据库读写分离———- 环境准备:(两台虚拟机(centos7)可以连接外网 步骤1: 安装数据库,…

    数据库 2023年6月16日
    0118
  • 利用VBS循环弹窗

    VBScript是Visual Basic Script的简称,即 Visual Basic 脚本语言,有时也被缩写为VBS。 将以下代码复制到文本文档中,保存后修改文件后缀名称为…

    数据库 2023年6月11日
    0139
  • 云数据库技术|“重磅升级”后再测 TDSQL-C

    标题 1.摘要 前段时间,测试了国内主要云原生数据库 PolarDB、TDSQL-C、GaussDB 的性能,参考:《再测云原生数据库性能》。在上次测试结果中,由于地域版本差异,腾…

    数据库 2023年6月11日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球