要在Java后端实现iReport分页,你可以使用以下步骤:

  1. 引入相关依赖 在项目的pom.xml文件中添加iReport和MyBatis的相关依赖。
<dependencies>
    <!-- iReport -->
    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports</artifactId>
        <version>6.17.0</version>
    </dependency>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
</dependencies>
  1. 创建数据源 在Java项目中创建一个数据源,用于连接数据库。这里以MySQL为例。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DataSource {
    private static final String URL = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";
    private static final String PASSWORD = "your_password";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}
  1. 创建Mapper接口和XML文件 创建一个Mapper接口和对应的XML文件,用于定义查询方法。
// UserMapper.java
import org.apache.ibatis.annotations.Select;
import java.util.List;

public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> findAll();
}
<!-- UserMapper.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
    <select id="findAll" resultType="com.example.entity.User">
        SELECT * FROM user
    </select>
</mapper>
  1. 创建分页查询方法 在Service层创建一个分页查询方法,使用MyBatis的RowBounds对象进行分页。
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> findAll(int pageNum, int pageSize) {
        int offset = (pageNum - 1) * pageSize;
        return userMapper.findAll(new RowBounds(offset, pageSize));
    }
}
  1. 生成Jasper报表文件 使用iReport Designer工具设计报表模板,并将其导出为Jasper文件。
  2. 在Java代码中填充报表数据并导出PDF 使用JasperFillManager类填充报表数据,并使用JasperExportManager类将报表导出为PDF文件。
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JasperReportUtil {
    public static void exportPdf(String jasperFilePath, String outputFilePath, List<?> dataSource) {
        try {
            // 加载Jasper文件
            File jasperFile = new File(jasperFilePath);
            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperFile);

            // 填充报表数据
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataSource);
            Map<String, Object> parameters = new HashMap<>();
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);

            // 导出PDF文件
            OutputStream outputStream = new FileOutputStream(outputFilePath);
            JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 调用分页查询方法和导出PDF方法 在Controller层调用Service层的分页查询方法和JasperReportUtil类的导出PDF方法。
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String exportUsersPdf(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                 @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
        List<User> users = userService.findAll(pageNum, pageSize);
        String jasperFilePath = "/path/to/your/jasper/file";
        String outputFilePath = "/path/to/your/output/pdf/file";
        JasperReportUtil.exportPdf(jasperFilePath, outputFilePath, users);
        return "PDF文件已生成";
    }
}

这样,当你访问/users接口时,就会根据分页参数生成相应的PDF文件。