学习Mybatis及其简单配置

news2024/9/20 22:23:56

目录

JDBC的弊端

为什么要有ORM模型?

什么是ORM模型?

Mybatis和hibernate 区别:

Mybatis解决了jdbc的问题

为什么选择myBatis(优势)?

什么是MyBatis

主配置文件(config文件)

Mapper文件

创建sqlSession

Mybatis的生命周期:

MyBatis配置文件的层级结构:

元素:

元素:

元素:

元素:


JDBC的弊端

硬编码:SQL语句存在Java代码中,不能很好的分离数据库语句和Java语句,造成代码不易维护;

代码重复度高:大量的重复代码,以 ResultSet为例,每次都需要重复解析结果集;


SQL参数固定:SQL语句的参数固定,使得SQL语句不灵活,无法满足多变的场景。

底层技术:JDBC属于底层的技术,不支持分布式,缓存等技术,对于复杂场景的应对不好;

为什么要有ORM模型?

Java类         映射关系           数据库表

属性1                             字段1

属性2                             字段2

什么是ORM模型?

ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。

Java对象:pojo对象:简单的java对象,实际就是普通的javaBeans

映射配置:配置分为:类与数据库中表的映射,对象与表中记录的映射,类的属性与数据库中表的字段的映射

数据库:按照数据库结构来组织,存储和管理数据的仓库,ORM模式中最底层的内容

常见的orm模型:

Hibernate:是一个全自动的orm模型,可以自动生成sql语句,自动执行

Mybatis:是一款半自动的orm模型,它支持定制化sql,存储过程以及高级映射。

Mybatis和hibernate 区别:

1. Hibernate是全自动化ORM; Mybatis是半自动化ORM。

2. Hibernate简化dao层,不用考虑SQL语句的编写和结果映射,重点放在业务逻辑上;

Mybatis需要手写SQL语句以及结果映射。

3. Hibernate是一个重量级的框架,内部生成SQL语句,反射操作太多,导致性能下降;

Mybatis是一个轻量级的框架,需要自己写sql语句,有较少的反射操作。

4. Hibernate 不方便做SQL优化,遇到较复杂的SQL语句需要绕过框架实现复杂,对多字段的结构进行部分映射困难;

Mybatis 不仅可以做SQL优化还可以SQL与Java分离,还可以自行编写映射关系,复杂的SQL语句Mybatis效率更高

Mybatis优势:可以进行更细致的SQL优化;容易掌握

Hibernate优势:dao层开发比mybatis简单,mybatis需要维护SQL和结果映射

hibernate数据库移植性好

Mybatis解决了jdbc的问题

1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

为什么选择myBatis(优势)?

什么是MyBatis

MyBatis是一款ORM模型,支持定制化 SQL、存储过程以及高级映射。可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录

半自动化:支持定制化sql,存储过程以及高级映射

集成方便:不仅方便Spring等javaee框架的集成,还与其他ORM模型继承也很方便

主配置文件(config文件)

Mapper文件

创建sqlSession

Mybatis的生命周期:

SqlSessionFactoryBuilder:构造器,会根据配置信息生成SqlSessionFactory;

SqlSessionFactory:利用工厂模式生产SqlSession;

SqlSession:既可以发送SQL语句去执行并返回结果,也可以获取Mapper的接口

SQL Mapper:映射器,给出对应的SQL和映射规则,负责发送SQL和处理结果

MyBatis配置文件的层级结构:

<configuration> <environments> <mappers>

<configuration>元素:

功能:标识配置文件的起始,所有配置信息都存放在这里

<environments>元素:

功能:配置数据库环境信息,注册数据源,配置数据库事务

default:默认使用的数据库环境

<environment>:单个数据库环境信息的标识

<transactionManager>:配置数据库事务(JDBC,MANAGED,自定义)

<dataSource>:配置环境信息中数据源连接的信息(UNPOOLED,POOLED,JNDI,自定义数据源)

<property>:配置环境信息的属性

<properties>元素:

功能:配置属性的元素,可以在配置文件的上下文中使用该属性

<properties>元素的结构:

properties配置文件、程序参数传递、property子元素

<typeAliases>元素:

功能:我们使用mybatis需要将查询的虚拟表映射为java中的实体类的对象,就需要让myBatis知道这些我们自定义”类型“

在主配置文件中进行配置

在sqlMapper.xml中可以使用类名

<mappers>元素:

功能:用来在mybatis初始化时引入映射器

<mappers>层次结构:

1:用相对路径引入映射器

2:用文件定位符引入映射器

注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

3:注册指定包下的所有mapper接口

注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

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

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

相关文章

TwinCAT3 C++环境安装教程

文章目录 下载windos插件:下载地址&#xff0c;安装这个插件是为了能在 TwinACT 3 工程环境创建和编辑 C模块。 点击下载的文件&#xff0c;打开其中的KitSetup.exe 在打开的窗口中选择"Build Environment"后点击OK 弹出的窗口点击ok 选择“I agree”后点击…

从零逐步实现SVM(含公式推导)上

支持向量机&#xff08;SVM&#xff09;相关概念 支持向量&#xff1a;支持或支撑平面上把两类类别划分开的超平面的向量点线性可分支持向量机&#xff1a;通过硬间隔最大化&#xff0c;学习一个线性分类器线性支持向量机&#xff1a;通过软间隔最大&#xff0c;学习一个线性分…

掌握时间的秘密:pytz 库的神奇之旅

文章目录 掌握时间的秘密&#xff1a;pytz 库的神奇之旅背景&#xff1a;为何选择 pytz&#xff1f;pytz 库是什么&#xff1f;如何安装 pytz&#xff1f;函数的使用方法场景应用常见问题与解决方案总结 掌握时间的秘密&#xff1a;pytz 库的神奇之旅 背景&#xff1a;为何选择…

【Vue3】默认插槽

【Vue3】默认插槽 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

学习c语言第18天(字符串和内存函数)

1.函数介绍 1.1 strlen size_t(就是无符号整形) strlen(const char * str); 字符串已经\0作为结束标志&#xff0c;strlen函数返回的是在字符串中\0前面出现的字符个数(不包 含\0) 参数指向的字符串必须要以\0结束。 注意函数的返回值为size_t&#xff0c;…

Java并发—Java内存模型以及线程安全

目录 一、Java内存模型 JMM的核心概念 二、什么是线程安全&#xff1f; 1、原子性 2、有序性 3、可见性 三、如何确保线程安全&#xff1f; 1、sychronized关键字 2、Lock接口和其实现 3、volatile关键字 4、Atomic原子类 5、ThreadLocal 6、不可变对象 7、并发集…

电商数据采集封装API的详细步骤分享(API测试实例)

在当今的电商行业中&#xff0c;数据采集已成为企业获取市场洞察、优化运营策略、提升用户体验的重要手段。而封装电商数据采集的API接口&#xff0c;则是将这一复杂过程标准化、模块化的有效方式。本文将详细分享电商数据采集封装API的步骤&#xff0c;并通过一个实际的API测试…

努力努力努力的第十四天(2024.7.31)

昨天日期写错了写成2020.7.30,应该是2024.7.31&#xff08;手滑了哈哈哈&#xff09; 1.行列转换 效果演示&#xff1a; 这是未经行列转换操作的t_score表&#xff1a; 这是经过行列转换后的t_score表&#xff1a; 第一步&#xff1a;确定初步的做法 使用分组查询(group by…

20240731在WIN10下数框框的方法【CPU】

20240731在WIN10下数框框的方法【CPU】 2024/7/31 20:14 百度&#xff1a;WINDOWs 10 多核CPU 数框框 win10怎么数框框 1、首先打开win10系统&#xff0c;进入任务管理器。 2、其次点击CPU使用率窗口&#xff0c;鼠标悬停在右边的窗口按右键。 3、最后将图形更改为&#xff1a;…

【计算机网络】http协议的原理与应用,https是如何保证安全传输的

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

优化|高性能模块预测控制求解器

本文介绍的是另外一种针对模块控制MPC问题的一种高效求解方法。High-Performance Small-Scale Solvers for Linear Model Predictive Control&#xff0c;Gianluca Frison, Hans Henrik Brandenborg Srensen, Bernd Dammann, John Bagterp Jrgensen [1]。本文讲了HPIPM的前身&a…

Phalco安装过程以及踩的一些坑(mac环境)

一 背景 公司用Phalcon框架好长时间了,中途发现了一些Phalcon使用的上的问题,于是想在本地搭建一套Phalcon的环境,方便排查问题使用。 二 Mac系统下的安装 看了很多说法,最终发现还是官网给力,安装Phalcon使用下列命令即可(前提条件是PHP已安装好,工具pecl也安装好了):…

2024-07-31 Android studio gradle、sdk、ndk 等路径记录

一、gradle的下载路径&#xff1a;C:\Users\user\.gradle\wrapper\dists 二、NDK下载路径C:\Users\user\AppData\Local\Android\Sdk\ndk 三、SDK下载路径&#xff1a;C:\Users\user\AppData\Local\Android\Sdk\platforms

数据结构的基本概念与算法

数据结构的基本概念与算法 什么是数据&#xff1f; 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合&#xff1b;总结来说 -> 数据就是计算机程序加工的原料&#xff1b; 数据元素、数据项&#xf…

Python+Vue3+onlyoffice开发私有化文档管理系统实战笔记 20240731

之前进度 表字段设计如下&#xff1a; const columns [{title: 名称,key: name,dataIndex: name,},{title: 类型,key: category,dataIndex: category,},{title: 作者,key: author,dataIndex: author,},{title: 路径,key: path,dataIndex: path,},{title: 最近访问时间,key: l…

【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;本阶段和大家一起分享和探索大数据技术–spark计算引擎&#xff0c;本篇文章主要讲述了&#xff1a;spark的概念&#xff0c;spark的起源&#xff0c;Spark的计算框架&#xff0c;Spark组…

Python爬虫入门03:用Urllib假装我们是浏览器

文章目录 引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块 模拟浏览器请求使用Request方法添加请求头信息代码示例1. 设置请求URL和请求头2. 定义请求参数并转换为适当的格式3. 使用Request方法封装请求4. 发送请求并获取响应 常用使用方…

项目实战_表白墙(升级版)

你能学到什么 表白墙&#xff08;升级版&#xff09;Mybatis的一些简单应用 正文 前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中&#xff0c;接下来咱们借助MyBatis来实现数据库的操作。 数据准备 如果我们…

Linux-用户和用户组管理

用户管理 创建 useradd USERNAME&#xff08;名字&#xff09; [rootlocalhost ~]# useradd bao 创建指令 怎么判断创建成功与否&#xff08;是否报错&#xff09; 观察是否报错可行但用变量的方式判断会更加直观 [rootlocalhost ~]# echo $? 变量 什么是变量&…

Vant2框架tab切换list不加载问题(切换后onload不继续触发)

遇到的问题&#xff1a; van-list 加载&#xff0c;页面上有个切换的 van-tab&#xff0c;实现切换不同的类型&#xff0c;加载不同的list的功能。 Vant2 的 List 列表 就有个 bug&#xff0c;当切换 tab 的时候&#xff0c;它的 onload 没有自动触发。 然而在当前标签页&#…