杂项-java:mybatis

storebook      2022-04-10     605

关键词:

ylbtech-杂项-Java:MyBatis

 

1.返回顶部
1、
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
2、
2.返回顶部
1、
基本信息
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
 
背景介绍
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
 
特点

 

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql。

 

 

总体流程

(1)加载配置并初始化
触发条件:加载配置文件
处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中
(2)接收调用请求
触发条件:调用Mybatis提供的API
传入参数:为SQL的ID和传入参数对象
处理过程:将请求传递给下层的请求处理层进行处理。
(3)处理操作请求
触发条件:API接口层传递请求过来
传入参数:为SQL的ID和传入参数对象
处理过程:
(A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。
(4)返回处理结果将最终的处理结果返回。
 
功能架构
我们把Mybatis的功能架构分为三层:
(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
 
框架架构
框架架构讲解:
(1)加载配置:配置来源于两个地方一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
(2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数
(3)SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果
(4)结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回
技术分享图片

 

 
动态SQL
MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。
尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中使用强大的动态SQL来改进这些状况。动态SQL元素对于任何使用过JSTL或者类似于XML之类的文本处理器的人来说,都是非常熟悉的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis 3 中有了许多的改进,现在只剩下差不多二分之一的元素。MyBatis使用了基于强大的OGNL表达式来消除了大部分元素
 
集成
单独使用mybatis 是有很多限制的(比如无法实现跨越多个session的事务),而且很多业务系统本来就是使用spring来管理的事务,因此mybatis最好与spring集成起来使用 [4]  。
spring事务配置
<!--自动扫描业务包-->
<context:component-scanbase-package="com.xxx.service"/>
<!--数据源-->
<jee:jndi-lookupid="jndiDataSource"jndi-name="java:comp/env/jdbc/datasource"/>
<!--配置事务-->
<beanid="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="jndiDataSource"/>
</bean>
<!--配置基于注解的事物aop-->
<tx:annotation-driventransaction-manager="txManager"proxy-target-class="true"/>
2、
3.返回顶部
 
4.返回顶部
 
5.返回顶部
0、
 
0.2、
http://www.mybatis.org/mybatis-3/
0.3、
http://www.mybatis.org/mybatis-3/zh/index.html
1、
https://baike.baidu.com/item/MyBatis
2、
 
6.返回顶部
 
技术分享图片 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)



杂项-java:jdk

ylbtech-杂项-Java:JDKJDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。1.返回顶部1、版本JDK(JavaDevelopmentKit... 查看详情

杂项-java:elasticsearch

ylbtech-杂项-Java:ElasticSearch 1.返回顶部1、ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当... 查看详情

杂项-java:springboot

ylbtech-杂项-Java:SpringBoot 1.返回顶部1、SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置... 查看详情

杂项-java:shiro(java安全架构)

ylbtech-杂项-Java:Shiro(Java安全架构) ApacheShiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和... 查看详情

java示例代码_以太阳为例。杂项。不安全的

java示例代码_以太阳为例。杂项。不安全的 查看详情

杂项-java:自定义标签

ylbtech-杂项-Java:自定义标签 1.返回顶部1、一般我们说自定义标签是指JSP自定义标签。自定义标签在功能上逻辑上与javaBean类似,都封装Java代码。自定义标签是可重用的组件代码,并且允许开发人员为复杂的操作提供逻辑名... 查看详情

java-杂项:java数组array和集合listsetmap

之前一直分不清楚java中的array,list。同时对set,map,list的用法彻底迷糊,直到看到了这篇文章,讲解的很清楚。世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合有人想有可以自动扩展的数组,所以有了List有的人想... 查看详情

杂项-公司:apple

ylbtech-杂项-公司:Apple苹果公司(AppleInc.)是美国的一家高科技公司。由史蒂夫·乔布斯、斯蒂夫·沃兹尼亚克和罗·韦恩(RonWayne)等人于1976年4月1日创立,并命名为美国苹果电脑公司(AppleComputerInc.),2007年1月9日更名为苹果公司... 查看详情

springboot-杂项

可以使用devtools功能来实现热部署(HotSwapping),需要加入依赖(如maven):spring-boot-devtools可以实现修改代码并保存后的自动编译、重启依赖于Eclipse/Springtoolsuite的project菜单下的BuildAutomatically要勾选上本质上这个工具是保存自动... 查看详情

[开发杂项][ubuntu][常用命令杂项]

显示屏幕分辨率xrandrxdpyinfo 查看详情

4412杂项设备(代码片段)

杂项设备为什么用杂项设备?杂项设备可以说是对一部分字符设备的封装,还有一部分不好归类驱动也归到杂项设备。杂项设备是字符设备的封装?为什么会引入杂项设备??第一、可以节省主设备号–如果所有的驱动都是用字符设... 查看详情

text杂项(代码片段)

查看详情

markdown杂项(代码片段)

查看详情

linux——linux驱动之杂项设备(基本概念注册流程杂项设备的驱动编写)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来!《QT开发实战》《嵌入式通用开发实战》《嵌入式Linux开发实战 查看详情

linux——linux驱动之杂项设备(基本概念注册流程杂项设备的驱动编写)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来!《QT开发实战》《嵌入式通用开发实战》《嵌入式Linux开发实战 查看详情

为啥 Graphics::DrawString 绘制杂项字符?

】为啥Graphics::DrawString绘制杂项字符?【英文标题】:WhyisGraphics::DrawStringdrawingmisccharacters?为什么Graphics::DrawString绘制杂项字符?【发布时间】:2012-04-0900:21:32【问题描述】:我正在尝试使用GDI+将文本绘制到图像上,但是,我注... 查看详情

xml杂项功能(代码片段)

查看详情

shbash命令(杂项)(代码片段)

查看详情