springboot+mybatisplus动态表名、多表分页

本文介绍了如何在SpringBoot项目中使用MyBatisPlus实现动态表名和多表分页功能,包括服务层接口的定义,ServiceImpl的实现,以及Mapper接口和XML文件中的SQL语句配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot+mybatisplus动态表名、多表分页

一、动态表名

1、service接口
IPage<TallyListHeade> queryTallyListHeadePageList(Page<TallyListHeade> page, TallyListHeade tallyListHeade);
2、serviceImpl实现类
@Override
    public IPage<TallyListHeade> queryTallyListHeadePageList(Page<TallyListHeade> page, TallyListHeade tallyListHeade) {
        QueryWrapper<TallyListHeade> queryWrapper = new QueryWrapper<>();
        String tableName = null;
        String trans = tallyListHeade.getTrans();
        if ("11".equals(trans)) {
            tableName = "v_before_tally_in";
        } else if ("12".equals(trans)) {
            tableName = "v_before_tally_out";
        }
        String startDate = tallyListHeade.getStartDate();
        String endDate = tallyListHeade.getEndDate();
        String shipNameEn = tallyListHeade.getShipNameEn();

        String gs = tallyListHeade.getGs();
        queryWrapper.eq("t.GS", gs);

        //to_char(t.ARRIVALDATE,'yyyy-mm')
        if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
            queryWrapper.apply("TO_CHAR(t.Shipdate, 'YYYY-MM-DD') between {0} and {1}", startDate, endDate);
        } else if (StringUtils.isNotBlank(startDate)) {
            queryWrapper.apply("TO_CHAR(t.Shipdate, 'YYYY-MM-DD') >= {0}", startDate);
        } else if (StringUtils.isNotBlank(endDate)) {
            queryWrapper.apply("TO_CHAR(t.Shipdate, 'YYYY-MM-DD') <= {0}", endDate);
        }

        //UPPER(TRANSPORT_NAME) like UPPER('%" + shipname + "%')"
        if (StringUtils.isNotEmpty(shipNameEn)) {
            queryWrapper.apply("UPPER(t.SHIP_NAME_EN) LIKE UPPER('%" + shipNameEn + "%')");
        }
        TallyListHeade info = new TallyListHeade();
        info.setTableName(tableName);
        return page.setRecords(tallyListMapper.queryTallyListHeadePageList(page, queryWrapper, info));
    }
4、mapper接口

分页插件:Page

分页条件搜索的关键部分:"@Param(Constants.WRAPPER)QueryWrapper "

动态表名设置部分:“@Param(“tallyListHeade”) TallyListHeade tallyListHeade)”

List<TallyListHeade> queryTallyListHeadePageList(Page<TallyListHeade> page, @Param(Constants.WRAPPER)QueryWrapper<TallyListHeade> queryWrapper,@Param("tallyListHeade") TallyListHeade tallyListHeade);

5、mapper的xmlsql语句

接受表名参数:“${tallyListHeade.tableName}”

分页固定写法:" ${ew.customSqlSegment}"

<select id="queryTallyListHeadePageList" resultType="org.jeecg.modules.customs.tally.entity.TallyListHeade"
            parameterType="org.jeecg.modules.customs.tally.entity.TallyListHeade">
        select t.*,decode(listguid,'','未生成','已生成') istally from  ${tallyListHeade.tableName}  t
        ${ew.customSqlSegment}
</select>

二、多表分页

和上边的区别是不用传递动态表名称这个参数,sql写成多表查询方式,然后通过apply方法可以动态的拼接各种条件。

1、service接口
IPage<ArrivalList> queryArrivalListPageList(Page<ArrivalList> page, ArrivalList arrivalList);
2、serviceImpl实现类
    @Override
    public IPage<ArrivalList> queryArrivalListPageList(Page<ArrivalList> page, ArrivalList arrivalList) {

        QueryWrapper<ArrivalList> queryWrapper = new QueryWrapper<>();

        String guid = arrivalList.getGuid();
        String parentBillNo= arrivalList.getParentBillNo();
        queryWrapper.eq("T.GUID",guid);
        //UPPER(PARENT_BILL_NO) like UPPER('%" + PARENT_BILL_NO + "%')";
        if(StringUtils.isNotEmpty(parentBillNo)){
            queryWrapper.apply("UPPER(t.PARENT_BILL_NO) LIKE UPPER('%" + parentBillNo + "%')");
        }

        return page.setRecords(arrivalListMapper.queryArrivalListPageList(page, queryWrapper));
    }
4、mapper接口
List<ArrivalList> queryArrivalListPageList(Page<ArrivalList> page,  @Param(Constants.WRAPPER)QueryWrapper<ArrivalList> queryWrapper);
5、mapper的xmlsql语句
    <select id="queryArrivalListPageList" resultType="org.jeecg.modules.customs.arrival.entity.ArrivalList"
            parameterType="org.jeecg.modules.customs.arrival.entity.ArrivalList" >
         select
           t.GUID,
           t.ID,
           a.WRAP_CNAME,
           a.WRAP_ENAME
        from T_ARRIVAL_LIST t
   left join
             T_BASE_WRAP a
          on t.WRAP_TYPE = a.WRAP_ENAME
        ${ew.customSqlSegment}
	</select>
SpringBoot 中使用 MybatisPlus 进行分页查询可以按照以下步骤进行操作: 1. 在 pom.xml 中添加 MybatisPlus分页插件的依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> ``` 2. 创建实体类和 Mapper 接口,使用注解进行配置。例如,如果要进行两张的联分页查询,可以创建一个包含两个的实体类,其中使用 `@Table` 注解指定,使用 `@TableField` 注解指定字段: ```java @Data @TableName("table1 t1") public class Table1AndTable2Entity { @TableField("t1.id") private Integer id; @TableField("t1.name") private String name; @TableField("t2.field1") private String field1; @TableField("t2.field2") private String field2; } ``` ```java public interface Table1AndTable2Mapper extends BaseMapper<Table1AndTable2Entity> { List<Table1AndTable2Entity> selectTable1AndTable2(Page<Table1AndTable2Entity> page); } ``` 3. 在 Service 层中调用 Mapper 的分页查询方法: ```java @Service public class Table1AndTable2ServiceImpl implements Table1AndTable2Service { @Autowired private Table1AndTable2Mapper table1AndTable2Mapper; @Override public Page<Table1AndTable2Entity> selectTable1AndTable2(Page<Table1AndTable2Entity> page) { return page.setRecords(table1AndTable2Mapper.selectTable1AndTable2(page)); } } ``` 4. 在 Controller 层中接收前端传入的分页参数,并调用 Service 层的方法进行查询: ```java @RestController @RequestMapping("/table1AndTable2") public class Table1AndTable2Controller { @Autowired private Table1AndTable2Service table1AndTable2Service; @GetMapping("/list") public Result<List<Table1AndTable2Entity>> list(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) { Page<Table1AndTable2Entity> page = new Page<>(pageNum, pageSize); Page<Table1AndTable2Entity> pageResult = table1AndTable2Service.selectTable1AndTable2(page); return Result.success(pageResult.getRecords(), pageResult.getTotal()); } } ``` 这样,就可以使用 MybatisPlus 进行分页查询了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值