mybatis简明教程

article/2025/8/20 1:24:00

mybatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射,本文将让您快速掌握mybatis开发

一: 简介

在这里插入图片描述
一只被烤黑了的鸟

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

二:环境搭建

1:目录结构

在这里插入图片描述

2: 导入jar包

创建java项目,在根目录下创建lib文件夹,引入如下两个java包。
在这里插入图片描述
引入项目
在这里插入图片描述
在这里插入图片描述
引入jar包
在这里插入图片描述

三:快速入门

1.1:编写接口

public interface CustomMapper {@Select("select * from custom")List<Custom> query();
}

1.2 : 创建mybatisconfig.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://192.168.1.7:3306/crm?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone = GMT"/><property name="username" value="root"/><property name="password" value="123"/></dataSource></environment></environments><mappers><mapper class="org.haojia.demo.mapper.CustomMapper"/></mappers>
</configuration>	

1.2:编写pojo类

public class Custom implements Serializable {private static final long serialVersionUID = -665179340461078803L;private Integer id;private String comName;private String contact;private String phone;
}

1.3:创建测试类

public class TestDemo {public void query() throws IOException {String resource = "org/haojia/demo/mybatisConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();CustomMapper mapper = sqlSession.getMapper(CustomMapper.class);// 返回查询结果List<Custom> query = mapper.query();sqlSession.commit();sqlSession.close();// 遍历list结果query.forEach(e->{System.out.println(e.getComName() + "--" + e.getContact());});}public static void main(String[] args) throws IOException {new TestDemo().query();}
}

四:深入了解

1:mybatis核心对象

核心接口和类

核心配置文件 mybatis-config.xml

SQL映射文件

1:核心接口

1:SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 有五个 build() 方法,每一种都允许你从不同的资源中创建一个 SqlSessionFactory 实例。

SqlSessionFactory build(InputStream inputStream)
SqlSessionFactory build(InputStream inputStream, String environment)
SqlSessionFactory build(InputStream inputStream, Properties properties)
SqlSessionFactory build(InputStream inputStream, String env, Properties props)
SqlSessionFactory build(Configuration config)

第一种方法是最常用的,它接受一个指向 XML 文件(也就是之前讨论的 mybatisConfig.xml 文件)的 InputStream 实例。可选的参数是 environment 和 properties。environment 决定加载哪种环境,包括数据源和事务管理器。比如:

(后面2.4部分将会详细介绍)

<environments default="development"><environment id="development"><transactionManager type="JDBC">...<dataSource type="POOLED">...</environment><environment id="production"><transactionManager type="MANAGED">...<dataSource type="JNDI">...</environment>
</environments>

tips:

如果你调用了带 environment 参数的 build 方法,那么 MyBatis 将使用该环境对应的配置。如果你指定了一个无效的环境,会收到错误。如果你调用了不带 environment 参数的 build 方法,那么就会使用默认的环境配置(在上面的示例中,通过 default=“development” 指定了默认环境)

SqlSessionFactoryBuilder生命周期

最大特点:用过即丢,一旦创建SqlSessionFactory对象之后,该类就不再需要了。so,SqlSessionFactoryBuider的最佳范围在方法体内。即局部变量。

2:sqlSessionFactory

他是SqlSession的工厂,所有myBatis都以SqlSessionFactory实例为中心,通过SqlSessionFactory提供的openSession获取SqlSession实体。

Tips

1:openSession(boolean b);当参数为true时,表示关闭事务控制,自动提交;false表示开启事务控制,默认为true

2: 生命周期:一旦被创建,则会在整个运行过程中始终存在,在应用运行中,不建议多次创建SqlSessionFactory,因此,其最佳作用域在Application中,和应用的声明周期一同存在。

3:鉴于上述2的特性:运行期间有且只有一个实例存在被称为单例模式

最佳实践:

public class TestDemo2 {private static SqlSessionFactory factory;static{InputStream is = null;try {is = Resources.getResourceAsStream("mybatisConfig.xml");factory = new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {e.printStackTrace();}}public static SqlSession closeSession(){return factory.openSession(false);}public static void openSession(SqlSession sqlSession){if(null != sqlSession){sqlSession.close();}}
}

3: SqlSession

使用 MyBatis 的主要 Java 接口就是 SqlSession。通过这个接口来执行命令,获取映射器实例和管理事务。SqlSessions 是由 SqlSessionFactory 实例创建的,

SqlSessionFactory 对象包含创建 SqlSession 实例的各种方法。而 SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或 Java 配置代码来创建 SqlSessionFactory。

Tips

声明周期:

1:SqlSession的声明周期是一次会话,但他同DB的会话是永久的,其生命周期也 “应该是永久” 的,但我们需要考虑的是其线程特性

2:每个线程都有自己的SqlSession实例,SqlSession的实例不会共享,但他并非线程安全的,SO,其最佳范围应该在Request范围内或方法体内。

3: SqlSession必须在finally被关闭

2:核心配置文件 mybatis-config.xml

Confuguration  根节点properties   属性配置  (常用)settings     修改MyBatis在运行时的行为方式 (较常用,后面基本不用)typeAlias    java类型命名的别名 (较常用)typeHandlers 类型处理器objectFactory 对象工厂plugins 插件enviroments 环境 (常用)enviromentreansationManager 事务管理器dataSource 数据源mappers 映射器 (长用)

2.1 : properties

在 mybatis-config.xml 中,可以引用属性值,也可以直接指定属性值

1: db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.1.7:3306/crm?characterEncoding=utf8&serverTimezone=UTC
username=root
password=123

2: 在mybatis-config.xml中引入db.properties

<configuration><!--  方式一 推荐 --><properties resource="org/haojia/demo/db.properties"/>  <!-- 方式二  --><properties> <property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://192.168.1.7:3306/crm?characterEncoding=utf8&serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123"/></properties><!-- 注意!!! 上述两种方式选其一!!   --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper class="org.haojia.demo.mapper.CustomMapper"/></mappers>
</configuration>

Tips

在mybatis-config.xml中方式二的优先级>方式一的优先级

2.2 settings元素

settings用于设计mybatis运行中的行为

设置项描述允许值默认值
cacheEnabled对在此配置文件下所有的cache进行全局性开/关设置true|falsetrue
lazyLoadingEnabled全局设置懒加载,如果为false,所有相关联的都会被初始化加载true|falsetrue
autoMappingBehaviormybatis对于resultMap自动映射的匹配级别none|partical|fullpartical

2.3 typeAliases元素

作用:映射实体类所在的包路径,与SQL映射文件相关联,减少输入多余的完整类名,简化操作

<typeAliases><package name="xxx.xxx.xxx"> <!-- 此处写到包名即可,无须写到具体的类 -->
<typeAliases>

2.4 environments

<environments default="development"><environment id="development"><transactionManager type="JDBC">...<dataSource type="POOLED">...</environment><environment id="production"><transactionManager type="MANAGED">...<dataSource type="JNDI">...</environment>
</environments>

重点

在开发时,我们一般都会将配置分为三个阶段:开发、测试、生产环境,你可以通过灵活的选择不同配置,从而将SQL映射到不同的数据库环境中。

1: ID 通过default属性执行当前运行环境为develpment

2: transactionManager事务管理器:设置其类型为JDBC.mybatis有两种事务管理类型 JDBC、MANAGED,使用JDBC是直接依赖数据源获得链接来管理事务的生命周期

3:DataSource:使用JDBC连接对象的资源

2.5 mappers

mappers获取资源

在快速入门中,我们曾经做过如下配置:
在这里插入图片描述
我们利用注解的方式固然简单,但面对复杂操作时,接口代码显得臃肿不利于阅读,可维护性不高。我们下面在操作映射SQL时,以XML为讲解示例,注解做个人扩展研究。

未完待续。。。。。。。。。


http://chatgpt.dhexx.cn/article/20MvGtdh.shtml

相关文章

Mybatis教程-实战

1.从JDBC谈起 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version> </dependency>1.3.准备数据 创建数据库&a…

SpringBoot使用Mybatis教程

文章目录 新建SpringBoot项目引入mybatis依赖如何使用mybatis&#xff1f;1.配置mybatis①.数据库配置②.mybatis相关配置 2.使用mybatis①.创建JavaBean②.创建mapper1).使用注解方式2&#xff09;.使用xml方式 ③.调用 新建SpringBoot项目 本文所使用的代码编辑器为IntelliJ…

MyBatis教程看这一篇就够啦,简单又全面(IDEA版)

目录 一、MyBatis简介 1.1 MyBatis介绍 为什么需要Mybatis&#xff1f; 二、MyBatis框架部署 2.1 创建Maven项目 2.2 在项目中添加MyBatis依赖 2.3 创建MyBatis配置文件 三、MyBatis框架使用 3.1 创建数据表 3.2 创建实体类 3.3 创建DAO接口&#xff0c;定义操作方法 …

MyBatis学习--完整教程

文章目录 MyBatis1、简介1.1 什么是Mybatis1.2 持久化1.3 持久层1.4 为什么需要MyBatis 2、第一个Mybatis程序2.1 搭建环境2.2 创建一个模块2.3 编写代码 3、CURD1. namespace2. select3. Insert4. update5. Delete6. 万能Map7. 模糊查询 4、配置解析1. 核心配置文件2. 环境配置…

mybatis详细教程

文章目录 [toc]1. 概述1.1 什么是Mybatis?1.2 Mybatis 操作数据库的方式1.3 Mybatis 操作数据库的七大步骤?1.4 Mybatis 的开发优点 2. Mybatis 操作数据库具体实现2.1 创建一个数据库表2.2 创建一个maven项目,配置pom.xml文件,导入相关依赖2.3 创建mybatis 核心配置文件2.4 …

MyBatis教程(看这一篇就够了)

一.全面了解Mybatis 环境变量 jdk 8 MySQL 8.0.27maven-3.6.1IDEA 2021.2.2 学习前需要掌握&#xff1a; JDBCMySQLJava基础MavenJunit&#xff08;单元测试&#xff09; 什么是MyBatis Myba是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及…

fsck命令使用

由于错误操作Linux导致系统无法正常开机&#xff0c;系统提示需要checking filesystems。如下图所示&#xff1a; 根据图中提示&#xff0c;先输入root用户密码进入root用户&#xff0c;然后在root用户中执行命令&#xff1a; fsck -f -y /dev/sda2 命令解释&#xff1a; fsc…

linux基本功之fsck命令详解

&#x1f493; 大家好&#xff0c;我是沐风晓月&#xff0c;双一流院校英语计算机双专业在读&#xff1b; &#x1f493; 想要学好Linux&#xff0c;命令是基本功&#xff0c;企业中常用的命令大约200多个&#xff0c;不管是写shell脚本还是管理操作系统&#xff0c;最常用的命…

fsck命令详解

fsck命令来自于英文词组“filesystem check”的缩写&#xff0c;其功能是用于检查与修复文件系统。若系统有过突然断电或磁盘异常的情况&#xff0c;建议使用fsck命令对文件系统进行检查与修复&#xff0c;以防数据丢失。 语法格式&#xff1a;fsck [参数] 文件系统 常用参…

hdfs fsck

转载来自&#xff1a;https://blog.csdn.net/zlfing/article/details/78070951 1.常用指令&#xff1a;打印文件块的位置信息 hdfs fsck /user/hadoop/wkz -files -blocks -locations生产实例&#xff1a;hdfs fsck *文件路径* -list-corruptfileblocks 线上环境降副本后&a…

Linux fsck 机制解析

Linux fsck 机制 0. 概述1. Upstart 方式 (ubuntu 14.04 32bit)1.1 配置fsck启动1.2 配置fsck运行参数1.3 mountall.config1.4 mountall1.5 fsck 2. Systemd 方式 (ubuntu 16.04 64bit)2.1 普通分区的fsck2.2 Root分区的fsck2.3 ext文件系统的限制2.4 强制fsck完整扫描2.5 fsck…

fsck异常

ubuntu 18 开机显示错误。&#xff08;完了&#xff0c;我的数据啊&#xff09; 莫慌&#xff01;&#xff01;&#xff01; 仔细看下报错。 原因大概是上次系统异常断电关机等非正常关机导致 磁盘损坏。 解决方法 fsck -y /dev/sdb6 sdb6为损坏的目标磁盘 修复完 重启就可以了…

Linux磁盘修复命令----fsck

linux下文件信息出现乱码&#xff0c;无法启动服务&#xff0c;也无法删除&#xff0c;改权限等等&#xff0c;那证明你的磁盘已损坏&#xff0c;需要修复&#xff0c;期间不会丢失数据&#xff0c;请放心操作 使用fsck命令修复磁盘时 一定要进入单用户模式去修复 语 法 fsck.…

fsck-磁盘修复工具

1、简介 fsck&#xff08;file system check&#xff09;用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题&#xff0c;可利用fsck命令对文件系统进行检查。 2、参数介绍 -a&#xff1a;自动修复文件系统&#xff0c;不询问任何问题&#xff1b;-A&#xff1a;依照/e…

linux命令中fsck命令 – 检查并修复Linux文件系统

fsck命令的英文全称是“filesystem check”&#xff0c;即检查文件系统的意思&#xff0c;常用于检查并修复Linux文件系统的一些错误信息&#xff0c;操作文件系统需要先备份重要数据&#xff0c;以防丢失。 Linux fsck命令用于检查并修复Linux文件系统&#xff0c;可以同时检…

压缩感知超分辨技术

1.技术原理 利用被测物体在时间、空间以及深度&#xff08;或在相应的变换域&#xff09;内的稀疏性&#xff0c;对信号进行少量的编码测量&#xff0c;而后利用重建算法还原原始信号。 实质&#xff1a;有限系统带宽下提升信息量 1.空间编码—超空间分辨率 优势&#xff1a…

压缩感知介绍

Nyquist采样定理&#xff08;香农采样定理&#xff09;指出&#xff0c;采样速率达到信号带宽的两倍以上时&#xff0c;才能由采样信号精确重建原始信号。可见&#xff0c;带宽是Nyquist采样定理对采样的本质要求。然而随着人们对信息需求量的增加&#xff0c;携带信息的信号带…

压缩感知笔记

压缩感知笔记 CS理论认为&#xff0c;我们可以从比奈奎斯特采样所需的更少的样本中恢复某些信号。如果信号在原始域或变换域中是稀疏的&#xff08;完全恢复&#xff09;或可压缩的&#xff08;近似恢复&#xff09;&#xff0c;我们可以用比奈奎斯特采样所需的更少的采样样本…

压缩感知高斯测量矩阵matlab,压缩感知的常见测量矩阵

题目:压缩感知的常见测量矩阵 下面首先给出十篇参考文献中有关测量矩阵的叙述,然后以一篇硕士论文中对七种常见测量矩阵的描述依据,给出了这七种常见测量矩阵的MATLAB实现代码,以为以后的研究提供一个参考,由于目前还没有一个简单有效的测量矩阵评价方法,因此这里给出的七…