今天写了一段代码就是将数据库中几万条记录查出来写到一个txt文件中!我使用了ibatis,就在发现rowhandler能够处理超大数据集!就写了一个测试文件和大家一起分享一下!
1.写了一个User类
package com.test.bean;
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.新建一个user.xml,写入一个查询语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="user">
<typeAlias alias="user" type="com.test.bean.User"/>
<select id="getUser" resultClass="java.util.HashMap">
<![CDATA[
select * from tb_user
]]>
</select>
</sqlMap>
3.新建一个sqlmap-config.xml,在里边配置数据源等信息,并且引入user.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="root"/>
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<property name="Pool.TimeToWait" value="500"/>
<property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="1"/>
<property name="Pool.PingConnectionsNotUsedFor" value="1"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/test/config/user.xml"/>
</sqlMapConfig>
4.新建一个测试文件RowHandlerTest.java
public class RowHandlerTest extends TestCase implements RowHandler{
StringBuilder s = new StringBuilder();
public void testRowHandler() throws Exception{
String resource = "com/test/config/sqlmap-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
RowHandlerTest rht = new RowHandlerTest();
sqlMapClient.queryWithRowHandler("getUser", null, rht);
StringBuilder s = rht.getXmlDocument();
String dirPath = "D:"+File.separatorChar;
File file = new File(dirPath,"test.txt");
FileUtils.writeStringToFile(file, s.toString());
}
public void handleRow(Object o) {
Map map = (Map)o;
s.append(map.get("id"));
s.append("/t");
s.append(map.get("username"));
s.append("/t");
s.append(map.get("password"));
s.append("/r/n");
}
public StringBuilder getXmlDocument() {
return s;
}
}
通过测试就会发现在d盘下多了一个test.txt文件,里边存放了数据库中查出来的记录!