众所周知的,Mybatis作为一个优秀的ORM框架极大方便了我们对数据库CUID的操作,但是Mybatis对底层JDBC的封装同时也给我们底层调优带来了一些问题,例如前段时间,存在一个这样的业务场景,如果要从数据库当中读取 1000W 条数据来进行处理。也许我们都会考虑采用select limit之类的语句来分批处理,这不乏为一个较好的解决方案。但是我们更期望对读取的数据逐行处理(即流式处理)。这个时候JDBC可能采用返回游标的方式就可以完成。Oracle和MySQL在服务器端已经帮我们完成游标偏移,这样也使得客户端可以用较少内存来处理数据库返回的数据。废话不多说了,接下来我展示两个例子。
(1)数据库中存了100W个账号,我们需要读取出来并处理,采用Mybatis全量读出并处理方案。代码如下:
//DAO层
public interface DataMapper {
//void getHSUser();
List<HsUser> getAllUsers();
}
映射XML文件
<mapper namespace="ems.rm.datasourceservice1.DataMapper" >
<resultMap id="HSUserAccountMap" type="ems.rm.datasourceservice1.HsUser">
<id column="FUND_ACCOUNT" property="userAccount" jdbcType="VARCHAR"/>
</resultMap>
<