springboot整合mybatis与动态分页查询

1、配置application.properties

server.port=4003

#mysql数据库连接信息
spring.datasource.url=jdbc:mysql://ip:port/database?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

mybatis.type-aliases-package=com.entity
mybatis.mapper-locations=classpath:mappers/*.xml
mybatis.config-location=classpath:mybatis/mybatis-config.xml

mapper.xml

<!--动态查询的语句 --> 
<select id="getAllDashboards" resultMap="dashboard">
        SELECT
        <include refid="baseColumns"/>
        FROM t_dashboard
        WHERE delete_flag='0'
        <if test="userId!= null">
            AND user_id=#{userId}
        </if>
        <if test="_parameter !=null">
            AND is_shared=#{isShared}
        </if>
        <if test="dashboardName!= null">
            AND dashboard_name LIKE CONCAT(CONCAT('%', #{dashboardName}), '%')
        </if>
        ORDER BY update_time DESC , create_time DESC
    </select>

mapper.java

//有多个参数时,需要使用@Param来指定参数,否则查询报错
List<Dashboard> getAllDashboards(@Param("userId")String userId,@Param("isShared")String isShared,@Param("dashboardName")String dashboardName);

service.java

public List<Dashboard> getAllDashboards(String dashboardName,String isShared,String userId) {
        return dashboardMapper.getAllDashboards(dashboardName,isShared,userId);
    }

controller

   /**
    *此分页查询使用的是pageHelper插件
    *Result是一个自定义的返回类,build()方法即创建返回对象Result
    *success为返回成功方法
    *pageInfo携带查询的数据以及分页信息,前端直接取数据就好
    */
    @GetMapping("/getAll")
    public Result getAllDashboards(@RequestParam(value="page",defaultValue="1") int currentPage,
                                   @RequestParam(value="pagesize",defaultValue="10") int pageSize,
                                   @RequestParam("dashboardName")String dashboardName,
                                   @RequestParam("isShared")String isShared,
                                   @RequestParam("userId")String userId
                                   ){
        PageHelper.startPage(currentPage, pageSize);
        PageInfo<Dashboard> pageInfo=new PageInfo<>(dashboardService.getAllDashboards(dashboard));
        return Result.build().success("获取Dashboards成功",pageInfo);
    }

 

需要注意几个小问题

  1. 传入参数是对象时,需要使用@ResquestBody注解,可以将对象转化为json字符串,不然谁知道你传进来的啥,怎么解析
  2. mybatis中的映射<resultType>只能在返回结果中使用如:reultType="dashboard"
  3. 有个参数的问题一直报错,报错原因是找不到该参数的get方法,将该参数的非空判断改为_parameter !=null就好了,具体原因未知
  4. 动态查询有一个很别扭的问题就是我要查询的是Dashboard的集合,然而却让我使用dashboard作为参数,刚开始还在想是不是有问题,但是再写一个包装类挺麻烦,后来发现其实没什么问题,输入的条件只是属于dashboard而已,当然可能封装起来更好,便于扩展。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先需要在pom.xml文件中添加mybatis-plus和mysql的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 然后在application.yml文件中添加数据库连接信息: ```yml spring: datasource: url: jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root ``` 接着在MyBatis的Mapper接口中定义分页查询方法: ```java public interface UserMapper extends BaseMapper<User> { /** * 分页查询用户列表 * * @param page 分页对象 * @param user 查询参数 * @return 用户列表 */ IPage<User> selectUserPage(Page<User> page, User user); } ``` 其中,`Page`是MyBatis-Plus提供的分页查询对象,`User`是查询参数。 在具体的Mapper实现类中实现该方法: ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public IPage<User> selectUserPage(Page<User> page, User user) { return baseMapper.selectUserPage(page, user); } } ``` 最后在Controller中调用该方法并返回分页结果: ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/list") public IPage<User> list(Page<User> page, User user) { return userService.selectUserPage(page, user); } } ``` 其中,`Page`是SpringBoot提供的分页对象,`User`是查询参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值