若依vue 实现 Oracle自定义分页
若依微服务、无需更改VUE,自定义Oracle分页逻辑
·
背景
由于当前若依微服务项目主要使用MySQL来进行开发,但是基于某些业务需要对接第三方的数据库Oracle,故使用动态切换数据源的方式在nacos上我并没有找到PageHelper分页插件配置,又在网上找了很久,终于花费一天半的时间让我摸索出了一个可靠的逻辑。
实体类
首先需要格外建立一个分页视图,里面的参数是你进行分页时需要的所有参数。
package com.ueit.message.domain;
/**
* 群组组员分页管理对象 message_group_members
*/
public class MessageGroupView
{
private String type;
private String mobile;
private Integer startIndex;
private Integer endIndex;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Integer getStartIndex() {
return startIndex;
}
public void setStartIndex(Integer startIndex) {
this.startIndex = startIndex;
}
public Integer getEndIndex() {
return endIndex;
}
public void setEndIndex(Integer endIndex) {
this.endIndex = endIndex;
}
}
控制层
接收原有参数的基础上,添加两个从前端传过来的值**(这里值是若依自带的,前端不要做修改)**。
逻辑:1.先传值带入查出显示在页面的数据;2.再查询出参数返回结果的总行数;3.模仿若依的响应分页返回给前端。
/* 其实这段应该写在业务层,不过当时没写那么多[滑稽护体]
* 查询群组组员管理Oracle列表
*/
@PreAuthorize(hasPermi = "message:groupMembers:list")
@GetMapping("/list/oracle")
public TableDataInfo listOracle(MessageGroupMembers messageGroupMembers,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "1") Integer pageSize)
{
// startPage();
MessageGroupView mgv = new MessageGroupView();
mgv.setMobile(messageGroupMembers.getMobile());
mgv.setType(messageGroupMembers.getType());
mgv.setStartIndex((pageNum-1)*pageSize+1);
mgv.setEndIndex(pageNum*pageSize);
List<MessageGroupMembers> list = messageGroupMembersService.selectMessageGroupMembersOracleList(mgv);
// 返回总行数
long total = messageGroupMembersService.selectMessageGroupMembersOracleTotal(mgv);
//模仿 若依 响应请求分页数据
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(list);
rspData.setMsg("查询成功");
rspData.setTotal(total);
return rspData;
}
业务层
/*
* 查询群组组员管理Oracle列表
*/
List<MessageGroupMembers> selectMessageGroupMembersOracleList(MessageGroupView messageGroupView);
/**
* 返回总行数
* @param mgv
* @return 返回总行数 long
*/
public long selectMessageGroupMembersOracleTotal(MessageGroupView mgv);
/*
* 查询群组组员管理Oracle列表
*/
@Override
public List<MessageGroupMembers> selectMessageGroupMembersOracleList(MessageGroupView messageGroupView) {
// //从第几条开始
// Integer startIndex = (pageNum - 1) * pageSize + 1;
// //从第几条结束
// Integer endIndex = startIndex + pageSize - 1;
// String type = messageGroupMembers.getType();
// String mobile = messageGroupMembers.getMobile();
return messageGroupMembersMapper.selectMessageGroupMembersOracleList(messageGroupView);
}
/*
* 查询群组组员管理Oracle列表
*/
@Override
public long selectMessageGroupMembersOracleTotal(MessageGroupView messageGroupView) {
return messageGroupMembersMapper.selectMessageGroupMembersOracleTotal(messageGroupView);
}
数据层
传入参数,得到结果,需要注意一下参数类型和返回值类型。
/*
* 查询群组组员管理Oracle列表
*/
@Slave
public List<MessageGroupMembers> selectMessageGroupMembersOracleList(MessageGroupView messageGroupView);
@Slave
public long selectMessageGroupMembersOracleTotal(MessageGroupView messageGroupView);
<select id="selectMessageGroupMembersOracleList" parameterType="MessageGroupView" resultMap="MessageGroupMembersResult">
select mobile, type, dept from (
select ROWNUM AS RN, ZY.mobile, ZY.type, ZY.dept
from (
select MOBILE, TYPE, DEPT from 表名
union
select MOBILE, TYPE, DEPT from 表名
union
select MOBILE, TYPE, DEPT from 表名
) ZY
<where>
ROWNUM <= #{endIndex}
<if test="type != null and type != ''"> and ZY.TYPE = #{type}</if>
<if test="mobile != null and mobile != ''"> and ZY.MOBILE = #{mobile}</if>
</where>
) where RN >= #{startIndex}
</select>
<select id="selectMessageGroupMembersOracleTotal" parameterType="MessageGroupView" resultType="Long">
select count(*)
from (
select MOBILE, TYPE, DEPT from 表名
union
select MOBILE, TYPE, DEPT from 表名
union
select MOBILE, TYPE, DEPT from 表名
) ZY
<where>
<if test="type != null and type != ''"> and ZY.TYPE = #{type}</if>
<if test="mobile != null and mobile != ''"> and ZY.MOBILE = #{mobile}</if>
</where>
</select>
结语
至此,便和前端接轨完成,此方法应该不是最佳,有大神有更优解还望赐教!
更多推荐
已为社区贡献6条内容
所有评论(0)