如何读取MyBatis查询到的多条记录

如何读取MyBatis查询到的多条记录,第1张

建议以这样的思路解决问题:

1、如果这3个查询的逻辑不复杂,可以在mybatis的mapper文件中将sql合并。

2、1无法解决问题,而三个list结果集的map结构相同,在后台可以用listaddAll()进行合并。

3、如果2仍然无法解决,那就只能根据业务特殊处理

你是说要将多个字段同时放到同一个数据块?

如果这样的话那你应该会定义一个结构体数组来存储这些数据,每条记录中的多个字段存到结构体数组的一个元素。

你可以看一下otl的用法,你这只是简单的从数据块select数据而已,就是读取一条记录存放到结构体,然后循环,因为你select出来的多个字段是一个数据流,你在解析这个数据流就能得到每个字段的值。最后就得到了一个存放你所需数据的结构体。

ps:简单点儿的话你也可以每次只select一个字段,多写几个就ok。比如:

for(要读取的条数)

{

select 字段1from table where

select字段2 from table where

}

1、定义

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

2、使用原因

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

3、总体流程

(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的四大对象

Executor

ParameterHandler

ResultSetHandler

StatementHandler

一个MappedStatement代表一个增删改查的详细信息

Configuration包含全局配置,所有映射文件信息,接口信息

MappedStatement:一个sql对应一个MappedStatement

MapperProxyFactory:生成MapperProxy实例

Executor:执行增删改查,其中调用StatementHandler处理

原理分析

1、获取SqlSessionFactory对象

把配置文件的信息解析并保存在Configuration对象中(包含所有的映射文件信息、接口信息等),返回包含了Configuration的DefaultSqlSession对象

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()build(inputStream);

2、获取SqlSession

返回SqlSession的实现类Default对象,包含了Executor和Configuration;会有拦截器链(interceptChainpluginAll(executor))对Executor进行插入修饰。

3、getMapper

getMapper使用MapperProxyFactory创建一个MapperProxy的代理对象,包含了DefaultSqlSession(Executor)

4、执行方法

创建MapperMethodInvoker(接口,有invoke方法),PlainMethodInvoker写入本次方法查询相关信息(MapperMethod),MapperMethod包括SqlCommand和MethodSignature。调用MapperMethodInvokerinvoke方法执行 *** 作=>PlainMethodInvoker中调用MapperMethodexcute方法。MapperMethodexcute是真正执行方法。调用MapperStatment

通过调用代理类执行方法,创建StatementHandler(ParameterHandler,ResultSetHandler)处理器对象,使用处理器调用底层JDBC执行SQL返回结果。

总结:

责任链模式+动态代理+反射机制

插件编写

>

配置文件

<resultMap type="Integer" id="count">

<result column="RecordCount" jdbcType="INTEGER" javaType="Integer" />

</resultMap>

<resultMap type="OrderForm" id="orders">

<result column="OrderId" property="id" jdbcType="VARCHAR" javaType="String"/> </resultMap>

<select id="getOrders" statementType="CALLABLE" parameterType="Map" resultMap="count,orders" >

{call Page_Up_Get_OrderState(#{id,mode=IN,jdbcType=VARCHAR})}

</select>

以上就是关于如何读取MyBatis查询到的多条记录全部的内容,包括:如何读取MyBatis查询到的多条记录、什么是mybatis 为什么要使用my batis、【mybatis-高级篇】等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9561185.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存