首页 > 其他分享 >如何使用MyBatis框架?

如何使用MyBatis框架?

时间:2024-10-11 09:22:00浏览次数:11  
标签:缓存 框架 映射 查询 如何 SQL MyBatis 加载

MyBatis的基本信息

         MyBatis本是apache的一个开源项目iBatis,后在2010年迁移到了googlecode,并且改名为MyBatis。后面迁移到Github。MyBatis是一个基于Java的数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。ORM对象关系映射,是一种数据持久化技术,O指的是Object,对象,就是Java里的实体类;R指的是Relation,关系,关系型数据库;M指的是映射,提供一种机制,实现映射。

为什么不使用全自动化?

半自动化:需要写一些SQL语句,才能完成指定功能。全自动化:不需要使用sql语句,直接操作实体类对象,就可以对应的操作数据库表里的数据。全自动化在进行单表的增删改查操作时,具有更高的效率。但是,在进行多表查询的时候,分页查询的时候,全自动在进行修改的时候反而很复杂,效率更低。而MyBatis支持定制化SQL,存储过程以及高级映射。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(普通的Java对象)映射成数据库的记录。

MyBatis与传统JDBC比较的不同?

      MyBatis与传统的JDBC相比的不同:

      1.减少了61%的代码量;

      2.增强了移植性;

      3. 增强了项目中的分工。

      4.将SQL代码从程序代码中彻底分离,可重用;

      5.架构级性能增强。

MyBatis的优点。

      1.简单易学;

      2.基于SQL语法,灵活;

      3.解除SQL与程序代码的耦合;

      4.提供映射标签,支持对象与数据库的ORM字段关系映射;

      5.提供对象关系映射标签,支持对象关系组建维护;

      6.提供xml标签,支持编写动态sql;

MyBatis核心类以及工作流程。

1.SqlSessionFactory:SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在。一个SqlSessionFactory对应配置文件中的一个环境(environment),如果你要使用多个数据库 就配置多个环境分别对应一个SqlSessionFactory。

2.SqlSession:SqlSession通过内部存放的执行器(Executor)来对数据进行CRUD。此外SqlSession不是线程安全的,因为每一次操作完数据库后都要调用close对其进行关闭,官方建议通过try-finally来保证总是关闭SqlSession。

3. Executer:Executor(执行器)接口有两个实现类,其中BaseExecutor有三个继承类分别是BatchExecutor(重用语句并执行批量更新),ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement),SimpleExecutor(默认,每次都会创建新的statement)。

4. MappedStatementMappedStatement就是用来存放我们SQL映射文件中的信息包括sql语句,输入参数,输出参数等等。一个SQL节点对应4.一个MappedStatement对象。

工作流程:1.加载mybatis-config.xml和Configuration配置文件并初始化;

                  2.创建会话工厂SqlSessionFactory;

                  3.创建会话SqlSession;

                  4.通过执行器进行对数据库指令的下达;

MyBatis核心配置文件。

1.properties属性:将数据源中四要素提取出来,成为全局变量;

2.settings设置:MyBatis框架在运行时可以调整一些运行参数,比如:开启二级缓存,开启延迟加载等。

cacheEnabled :开启二级缓存:<setting name="cacheEnabled" value="true"/>

lazyLoadingEnabled :开启延迟加载/懒加载 “针对级联使用的”:<setting name="lazyLoadingEnabled" value="true"/>

3.typeAliases 类型别名

<typeAliases>
  <package name="com.jr.pojo"/>
</typeAliases>

4.typeHandlers类型处理器

5.objectFactory对象工厂

6.plugins插件

7.environments环境配置

      MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。 尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

Mappers映射器

SQL 映射文件只有很少的几个顶级元素:

cache-该命名空间的缓存配置;

cache-ref-引用其它命名的缓存配置;

resultMap-描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。

sql-可被其它语句引用的可重用语句块。

MyBatis可以实现的功能:

1.逆向工程

1.新建一个maven java工程

2.添加依赖jar 包

3.添加配置文件generatorConfig.xml

4.定义GeneratorSqlmap类,调用MyBatis自动创建接口,在main方法执行自动创建

2.动态SQL

使用动态sql的原因:动态SQL主要用于解决查询条件不确定的情况;

常用的动态查询标签:<if>是简单的条件判断。<where>是输出where,会智能的判断是否需要去除or或and。<choose>+<when>+<otherwise>-实现查询功能;<trim>+<if>-实现添加功能;<set>+<if>+<where>-实现修改功能;<foreach>-构建in条件,foreach标签的属性主要有item,index,collection,open,separator,close。

3.MyBatis查询

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap。resultType是直接表示返回类型的;resultMap则是对外部ResultMap的引用;resultType和resultMap不能同时存在。

当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

实现步骤:1.创建实体类;2.创建mapper.java接口;3.创建mapper.xml映射文件;4.编写测试类;

4.分页查询

1.使用page工具类VO

2.使用RowBounds插件

5.延迟加载

 延迟加载是在数据与对象进行mapping操作时,只有在真正使用到该对象时,才进行mapping操作,以减少数据库查询开销,从而提升系统性能。

延迟加载虽然某种程度上可以减少数据库查询开销,但是,同时也会多次连接数据库,同时会增加数据库的压力。所以需要考虑是否使用延迟加载。

延迟加载优点:运行速度快;

延迟加载缺点:延迟加载就是按需加载,但是程序中的很多问题,按需加载是不能及时暴露出来的;

MyBatis 默认没有开启延迟加载,需要在SqlMapConfig.xml中setting进行配置。

<setting name="lazyLoadingEnabled" value="true"/> ==延迟加载

<setting name="aggressiveLazyLoading" value="true"/>==积极懒加载,按需加载

6.MyBatis查询缓存

缓存技术是一种“以空间换时间”的设计理念,是利用内存空间资源来提高数据检索速度的有效手段之一。MyBatis包含一个非常强大的查询缓存特性,可以非常方便地配置和定制。

MyBatis提供一级缓存,二级缓存和三级缓存。

一级缓存基于HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,该Session中的所有Cache就将清空。

二级缓存与一级缓存机制相同,默认也是采用HashMap存储,不同在于其存储作用域为Mapper(Namespace),并且可自定义存储源。

三级缓存则是通过第三方分布式缓存框架实现查询缓存,其中使用的第三方框架有ehcache,redis,memcache缓存框架。Ehcache 是一种广泛使用的开源java分布式缓存。主要面向通用缓存,javaEE 和 轻量级容器。它具有内存和磁盘存储功能。框架被用于大型复杂分布式web application的。

标签:缓存,框架,映射,查询,如何,SQL,MyBatis,加载
From: https://blog.csdn.net/chengxinzhongnuo/article/details/142831680

相关文章

  • [MyBatis-Plus]快速入门
    介绍MyBatis-Plus是MyBatis的好朋友,与MyBatis配合,实现开发效率的提高官网:特点:润物细无声:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑效率自上:只需简单配置,即可快速进行单表CRUD,从而节省大量时间功能丰富:代码生产,自动分页,逻辑删除......
  • 模拟一个微服务架构项目来学习包括Nacos、EMQX、GateWay、RabbitMQ、Canal、Mybatis-P
    前言介绍下最近做的项目:为什么做这个项目?项目的核心用户目标是谁?面向新能源电车用户给目标用户提供了什么价值?方便快捷充电服务团队的作用?需求分析,概要设计,详细设计,开发,测试,部署,上线我的作用?1-2两个核心业务详细设计(业务流程,接口入参,接口出参,表结......
  • 网站开通后如何修改域名
    要修改已开通网站的域名,通常需要按照以下步骤操作:购买新域名:首先确保你已经拥有想要更换的新域名。如果没有,需要先到域名注册商处购买。更新DNS设置:登录到新域名的管理后台,更新DNS记录,指向你的网站服务器IP地址或提供的名称服务器(NameServers)。配置服务器:在你的网站服务......
  • 如何替换公司网站的图片和视频
    要替换公司网站上的图片和视频,你可以按照以下步骤操作:备份现有资源:在替换任何内容之前,确保先备份当前网站上的图片和视频文件。这有助于防止意外丢失重要数据。准备新资源:确保新的图片和视频已经准备好,并且符合网站的设计要求和尺寸规范。对于图片,检查分辨率是否足够......
  • C#/.NET/.NET Core优秀项目和框架2024年9月简报
    前言公众号每月定期推广和分享的C#/.NET/.NETCore优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码......
  • dreamweaver如何保存网页
    在Dreamweaver中保存网页可以通过以下几个简单的步骤来完成:打开或编辑网页:首先确保你已经打开了你想要保存的网页文件。选择保存选项:如果你是在Windows系统上使用Dreamweaver,可以选择菜单栏中的文件-> 保存,或者直接使用快捷键Ctrl+S。对于Mac用户,可以从菜单栏选择文件......
  • F12修改网页代码后如何保存
    使用浏览器的开发者工具(F12)修改网页代码后,所做的更改只会在当前浏览器标签页中生效,并且刷新页面后会丢失这些更改。要永久保存这些更改,需要编辑实际的源代码文件并上传到服务器。以下是详细步骤:1.使用F12临时修改打开开发者工具:在浏览器中打开需要修改的网页。按 F12 或......
  • 昆仑虚 - NextJS 项目如何进行部署?
    引言NextJS是一个构建于NodeJS之上的一个Web开发框架。它基于React特性进行了一些列的扩展!!在社区中也很是火热,前段时间「昆仑虚」也终于完成了项目的迁移(React=>NexJS)!!那么接下来就是项目部署,NextJS相比常规的前端部署还是有所区别的:常规的前端项......
  • 如何修改模板上面内容文字
    要修改模板上的内容文字,通常可以按照以下步骤操作:定位模板文件:首先找到存储模板的文件位置。模板可能是HTML文件、Word文档、PPT幻灯片或其他类型的文件。打开编辑工具:使用相应的编辑工具打开模板文件。例如,HTML模板可以用任何文本编辑器或IDE打开;Word或PPT模板则需要使用Of......
  • Arduino UNO R3自学笔记24 之 Arduino如何使用MAX7219控制多个数码管?
    注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。前言:前面学习了单个数码管的控制,但是在大多场合一个数码管是满足不了使用场景的,因此对于数码管的学习,应该学会用尽可能少的端口去驱动更多的数码管,在此情况下,MAX7219比较适合我们使用。1.MAX7219引脚及功能介绍......