如何在 mybaits 的mapper文件中定义一个复合对象

如何在 mybaits 的mapper文件中定义一个复合对象,第1张

Mybatis中mapper文件中的两层循环

导言

使用mapper.xml文件来存储和执行sql语句是Mybatis框架中重要的应用。在mapper.xml文件中对List数据的循环遍历较为普遍和常用,而两层或多层循环是大家不常用的。下面简单介绍一下吧!

从单层循环说起

mapper.java文件中的getData函数 :

public getData(@("param") List<String>param)1

mapper.xml中getData的sql :

<select id="getData">

select * from table t where t.id in

<foreach item="item" index="index" collection="dataList" open="(" close=")" separator=",">

#{dataList}

</foreach>

</select>

上一期,我们分析了sql语句的创建过程,接下来,咱们进入到下一个特别重要的对象创建,statement对象的创建

StatementHandler 是一个非常核心接口,不仅要创建合适statement对象,再将参数放到statement对象中,执行sql,处理结果集.可以说这些步骤都是在statementHandle中

实现的,接下来咱们跟着源码一起来分析,还是以查询为例,接着上期的selectOne分析

再来看一下statement的uml图

接下来,我们需要设置参数到sql中了,JDBC 提供了三种 Statement 接口,分别是 Statement、PreparedStatement 和 CallableStatement。他们的uml图为:

statement:提供执行的sql语句

PreparedStatement:对输入参数执行动态替换,也就是将之前的?替换为具体的参数

CallableStatement:用于保存存储过程输出的结果

我们来来分析PreparedStatement

statement创建就是这样,重点看下参数是怎样设置进去的

我们来执行一条根据主键查询的sql语句,然后debug运行,看看参数如何设置进去的

每一个?都会在parameterMappings集合中生成一个对象属性,执行完之后,一条正正的sql就形成了

当我们执行完sql后就要开始处理查询结果了结果集的处理工作由结果集处理器 ResultSetHandler 执行。ResultSetHandler 是一个接口,它只有一个实现类 DefaultResultSetHandler。结果集的处理入口方法是 handleResultSets,下面来看一下该方法的实现。

这里注意啊一下,resultHandle是一个接口,我们可以实现自己的类,用来自定义结果集,map,list等等

MyBatis是什么?MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对象)到数据库中的记录。简介每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpathresource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。MyBatis工作流程(1)加载配置并初始化触发条件:加载配置文件配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将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)返回处理结果将最终的处理结果返回。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11921267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存