-对多个主键 多表 多个字段组合查询 多字段排序的情况下实现真分页的存储过程

CREATE procedure TEACHERS_SEARCH @schoolid as int=0, @teacher_name as nvarchar(50)='', @push_status as tinyint=0, @count as tinyint=0, --真分页统计 @pageSize as int=10, --当前页需要显示的记录数 @topSize as int=10 --包括该页前面的记录总数 as --@status 0:全部;1:在课件区;2:在blog区;3:既在课件区又在blog区; declare @str nvarchar(2000) declare @str_search nvarchar(1000) set @str_search='1=1' if(@schoolid<>0) set @str_search=@str_search+' and teacher.schoolid='+str(@schoolid) if(@teacher_name<>'') set @str_search=@str_search+' and teacher.name like '''+@teacher_name +'%''' if(@push_status=1) set @str_search=@str_search+' and TeacherRecommand.status in (1,3)' if(@push_status=2) set @str_search=@str_search+' and TeacherRecommand.status in (2,3)' if(@push_status=3) set @str_search=@str_search+' and TeacherRecommand.status in (1,2)' if(@count=0) set @str=' select * from (SELECT top '+ str(@pageSize) +' * from ( select top '+ str(@topSize) +' Teacher.schoolid,Teacher.teacherid,teacher.name as teacher_name,school.name as school_name,teacher.email,teacher.telephone, TeacherRecommand.status,School.rainbowsite as rainbowsite FROM Teacher INNER JOIN School ON Teacher.schoolid = School.schoolid LEFT OUTER JOIN TeacherRecommand ON Teacher.schoolid = TeacherRecommand.schoolid AND Teacher.teacherid = TeacherRecommand.teacherid WHERE '+@str_search +' order by teacher.schoolid desc,teacher.teacherid desc) a order by schoolid asc,teacherid asc) b order by schoolid desc,teacherid desc' else set @str=' SELECT count(*) FROM Teacher INNER JOIN School ON Teacher.schoolid = School.schoolid LEFT OUTER JOIN TeacherRecommand ON Teacher.schoolid = TeacherRecommand.schoolid AND Teacher.teacherid = TeacherRecommand.teacherid WHERE '+@str_search --print @str exec (@str) GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LambdaQueryWrapper 是 MyBatis-Plus 提供的一种查询构造器,可以方便地进行条件查询排序分页等操作。多表查询可以通过联表查询实现,具体操作如下: 1. 首先需要在实体类中定义关联表的字段,例如: ``` public class User { private Long id; private String username; private Long roleId; // 省略其他字段 @TableField(exist = false) private Role role; } ``` 这里的 roleId 是用户表中的一个外键,关联到角色表的主键 id。而 role 字段则是一个不存在于数据库中的字段,用于存储关联查询的结果。 2. 在查询时使用 LambdaQueryWrapper 进行条件构造,例如: ``` LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getUsername, "admin") .leftJoin(Role.class, User::getRoleId, Role::getId) .orderByDesc(User::getId); ``` 这里使用了 leftJoin 方法进行关联查询,第一个参数是关联的表名,第二个参数是当前表的关联字段,第三个参数是关联表的主键字段。orderByDesc 方法则是对结果进行降序排序。 3. 最后使用 MyBatis-Plus 提供的 Page 类进行分页查询,并且将查询结果设置到关联字段中,例如: ``` Page<User> page = new Page<>(1, 10); IPage<Map<String, Object>> result = userMapper.selectMapsPage(page, wrapper); List<Map<String, Object>> records = result.getRecords(); for (Map<String, Object> record : records) { User user = BeanUtil.mapToBean(record, User.class, true); Role role = BeanUtil.mapToBean(record, Role.class, true); user.setRole(role); } page.setRecords(records); return page; ``` 这里使用了 selectMapsPage 方法进行分页查询,返回的结果是一个 Map 列表。然后使用 BeanUtil 工具类将 Map 转换为实体对象,最后将关联查询的结果设置到 user 对象的 role 字段中。最终返回的是一个分页结果对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值