一般情况向下,需要分页显示的列表数据多数来自于视图。但是实际开发中很多时候在数据库中建立视图是不容易办到的。
这是,我们一般是在mapper文件中定义一个查询,并实现分页功能。这就带来一个问题,我们无法使用lambda形式的查询,只能在sql中进行查询条件的拼装。为了能够像拥有实体视图那样方便的使用lambda形式的查询,这里给出了一个方案:
1. 使用代码生成工具生成主表的crud代码,注意生成代码的时候最好给实体类一个后缀(例如View)
2.将实体类的 TableName 注解改为 (对应视图的sql形式) as XXX_view,如下:
@Data
@Accessors(chain = true)
@TableName(value = """
(
select t2.ORDER_MAKE_ID,t4.CUSTOMER_NAME, t3.MATERIAL_NAME
from work_order_make t2,
data_material t3,
data_customer t4
where t2.MATERIAL_ID = t3.MATERIAL_ID
and t2.CUSTOMER_ID = t4.CUSTOMER_ID
) work_order_make_view
""")
public class WorkOrderMakeView implements Serializable {
/**
* 制料ID
*/
private Integer orderMakeId;
private String customerName;
private String materialName;
}
3.现在就可以使用lambda形式的查询了,例如:
@Test
void testView() {
List<WorkOrderMakeView> records = orderMakeViewService.lambdaQuery().page(new Page<>(0, 10)).getRecords();
System.out.println("records = " + records);
}