IBatis学习关于大型数据集的问题

    技术2022-05-19  24

    在IBatis中使用RowHandler接口来解决大型数据集的问题:

       RowHandler接口定义非常简单:

            public interface RowHandler(){

                     void handlerow(Object valueObject) ;

            }

     

    其中每一条记录与对应的pojo类的xml文件中的查询语句的resultClass相对应:Xxx.xml--><select ···resultClass>,使用的时候强转一下valueobject的类型即可。

    例:

    配置文件中:Employee.queryOneEmployee

     

     <select id="queryOneEmployee" resultClass="employee">  <![CDATA[   select empNo,ename,job,mgr,hireDate,sal,comm,deptNo from emp  ]]>  </select>

    定义一个类继承RowHeadler接口

    public class EmpRowHandler implements RowHandler{  private List<Employee> empList=new ArrayList<Employee>(); public List<Employee> getEmpList() {  return empList; }    public void handleRow(Object valueObject) {  Employee employee=(Employee)valueObject;  employee.setSal(500.0);//修改查询结果的属性  empList.add(employee); }

     

    测试代码片段:

        sqlmap.startTransaction();      EmpRowHandler handler=new EmpRowHandler();      sqlmap.queryWithRowHandler("Employee.queryOneEmployee", handler);

       List<Employee> list=handler.getEmpList();      for(Employee emp:list)   {    System.out.println(emp.getSal());   }      sqlmap.commitTransaction();

     

    在测试片段中,将查询结果放到对象handler 中,通过对valueObject 的操作获取查询的结果的每一行,通过重写handleRow()方法,实现对查询结果的过滤(可以进行你想要的任何操作)。

     


    最新回复(0)