记录pagehelper 出现 :For input string: “list“

本文介绍了一种将数据封装到PageInfo对象并将其添加到Model的方法,此过程通常用于分页显示数据。

将数据放到model中时使用PageInfo包装
PageInfo pageInfo = new PageInfo(goodsList);
model.addAttribute(“pageInfo”,pageInfo);

<think>好的,用户想了解如何在若依框架中编写查询图书借阅记录的功能。我需要先回忆一下若依框架的基本结构和常用的开发模式。若依是基于Spring Boot和MyBatis的权限管理系统,所以应该涉及控制器、服务层、Mapper层和实体类。 首先,用户需要查询借阅记录,这可能涉及到数据库中的借阅表。假设有一个名为book_borrow的表,包含借阅ID、用户ID、图书ID、借阅时间、归还时间等字段。需要创建对应的实体类BookBorrow,并在Mapper中编写查询方法。 然后,考虑前端可能需要传递查询条件,比如用户ID、图书名称、借阅时间范围等。这时候需要创建一个QueryBO类来封装这些参数,比如BookBorrowQueryBO,包含相应的字段。 接下来在Service层,需要实现根据查询条件过滤数据的方法。这里可能需要使用MyBatis的动态SQL,比如在XML文件中编写<if>标签来判断参数是否为空,并拼装SQL条件。例如,如果用户传了图书名称,就需要关联图书表进行模糊查询。 分页查询也是常见的需求,若依集成了PageHelper,可以在Service方法中调用startPage方法,然后调用Mapper的查询方法,返回分页结果。 控制器层需要接收前端的请求参数,调用Service层的方法,并将结果包装成统一的返回格式。可能需要使用@GetMapping或@PostMapping注解,参数用@RequestBody接收。 另外,权限控制方面,若依使用@PreAuthorize注解,可能需要为这个接口添加相应的权限标识,比如@PreAuthorize("@ss.hasPermi('library:borrow:list')"),确保只有有权限的用户才能访问。 前端部分可能需要使用Vue组件,比如在页面中添加表单元素,输入查询条件,调用后端的API接口,然后使用表格展示数据。这部分可能需要用到axios发送请求,处理分页参数等。 需要注意的是,关联查询时,比如要显示图书名称而不是图书ID,需要在SQL中进行JOIN操作,或者在实体类中添加额外的字段,并使用resultMap进行映射。 还有异常处理和参数校验,比如日期格式是否正确,是否必填等,可以使用@Validated注解配合校验注解,如@NotNull、@DateTimeFormat等。 最后,测试接口是否正常工作,可以使用Postman或Swagger发送请求,检查返回的数据是否符合预期,分页是否正确,条件查询是否有效等。 总结一下,步骤大概是:设计数据库表结构,创建实体类,编写Mapper接口和XML,实现Service层逻辑,添加控制器接口,处理权限和参数校验,最后前端调用展示数据。过程中要注意MyBatis的动态SQL使用,分页处理,以及前后端的数据交互格式。</think>若依框架中查询图书借阅记录的实现可分为以下几个步骤(以经典Spring Boot+MyBatis技术栈为例): 1. **实体类创建** ```java // 借阅记录实体 @Data public class BookBorrow { private Long borrowId; private Long userId; private Long bookId; private Date borrowTime; private Date returnTime; private String status; // 关联字段(非数据库字段) private String bookName; private String userName; } ``` 2. **Mapper层实现** ```xml <!-- BookBorrowMapper.xml --> <select id="selectBorrowList" resultType="BookBorrow"> SELECT b.borrow_id, b.user_id, b.book_id, b.borrow_time, b.return_time, b.status, u.user_name, bk.book_name FROM book_borrow b LEFT JOIN sys_user u ON b.user_id = u.user_id LEFT JOIN book bk ON b.book_id = bk.book_id <where> <if test="bookName != null and bookName != ''"> AND bk.book_name LIKE CONCAT('%', #{bookName}, '%') </if> <if test="userName != null and userName != ''"> AND u.user_name LIKE CONCAT('%', #{userName}, '%') </if> <if test="status != null and status != ''"> AND b.status = #{status} </if> </where> ORDER BY b.borrow_time DESC </select> ``` 3. **Service层实现** ```java @Service public class BookBorrowServiceImpl implements BookBorrowService { @Autowired private BookBorrowMapper bookBorrowMapper; @Override public TableDataInfo selectBorrowList(BookBorrow borrow) { startPage(); // 使用PageHelper分页 List<BookBorrow> list = bookBorrowMapper.selectBorrowList(borrow); return getDataTable(list); } } ``` 4. **Controller层接口** ```java @RestController @RequestMapping("/library/borrow") public class BookBorrowController { @Autowired private BookBorrowService borrowService; @PreAuthorize("@ss.hasPermi('library:borrow:list')") @GetMapping("/list") public TableDataInfo list(BookBorrow borrow) { return borrowService.selectBorrowList(borrow); } } ``` 5. **前端实现(Vue示例)** ```vue <template> <div> <el-form :model="queryParams" ref="queryForm" :inline="true"> <el-form-item label="图书名称" prop="bookName"> <el-input v-model="queryParams.bookName" placeholder="请输入图书名称"/> </el-form-item> <el-form-item label="借阅状态" prop="status"> <el-select v-model="queryParams.status"> <el-option label="全部" value=""/> <el-option label="在借" value="0"/> <el-option label="已还" value="1"/> </el-select> </el-form-item> <el-button type="primary" @click="handleQuery">搜索</el-button> </el-form> <el-table :data="borrowList"> <el-table-column prop="bookName" label="图书名称"/> <el-table-column prop="userName" label="借阅人"/> <el-table-column prop="borrowTime" label="借阅时间"/> <el-table-column prop="returnTime" label="归还时间"/> <el-table-column prop="status" label="状态"> <template slot-scope="scope"> {{ scope.row.status === '0' ? '在借' : '已还' }} </template> </el-table-column> </el-table> <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> </div> </template> <script> export default { data() { return { // 查询参数 queryParams: { pageNum: 1, pageSize: 10, bookName: undefined, status: undefined }, borrowList: [], total: 0 }; }, methods: { getList() { listBorrow(this.queryParams).then(response => { this.borrowList = response.rows; this.total = response.total; }); }, handleQuery() { this.queryParams.pageNum = 1; this.getList(); } } }; </script> ``` **关键实现要点**: 1. 多表关联查询时使用`LEFT JOIN`连接用户表和图书表 2. 使用MyBatis动态SQL处理条件筛选 3. 通过PageHelper实现分页功能 4. 前端表格展示时进行状态枚举值转换 5. 使用若依的权限注解`@PreAuthorize`控制访问权限 6. 查询参数对象建议继承`BaseEntity`以支持分页参数自动绑定 实际开发中还需注意: 1. 添加合适的索引优化查询性能 2. 日期范围查询可扩展`beginTime`/`endTime`参数 3. 复杂查询建议使用QueryWrapper构建动态条件 4. 做好SQL注入防护(若依已内置防护)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值