当前位置:   article > 正文

springboot --Mybatis动态SQL&pageHelper分页插件_springboot mybatis自定义sql pagehelper问题

springboot mybatis自定义sql pagehelper问题

一、Mybatis动态SQL

  1. 动态SQL实现更新
    创建VideoSqlProvider类,自定义方法updateVideo,返回值是String类型,具体见参考文档:动态SQL参考文档

    public class VideoSqlProvider {
    
        public String updateVideo(final Video video){
            return new SQL(){{
                UPDATE("video");	//表名
                //条件写法.
                if(video.getTitle()!= null){
                    SET("title=#{title}");
                }
                if(video.getSummary()!= null){
                    SET("summary=#{summary}");
                }
                
                //.......
    
                WHERE("id=#{id}");
            }}.toString();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  2. 修改mapper层的SQL用法
    使用@UpdateProvider注解,type值是上面类的类名VideoSqlProvider.classmethod选择对应的方法名"updateVideo"
    添加、删除、查询:@InsertProvider 插入
    @DeleteProvider 删除
    @SelectProvider 查询

    /**
         * 更新
         * @param video
         * @return
         */
    //    @Update("update video set title = #{title} where id = #{id}")   //原更新方式
        @UpdateProvider(type = VideoSqlProvider.class,method = "updateVideo")   //动态SQL更新方式
        int update(Video video);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

二、pageHelper分页助手插件

  1. pom.xml文件配置相关依赖
    这里使用的是5.x的版本

    <!-- 分页插件依赖 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.1.10</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  2. 创建PageHelperConfig 类

    使用@Configuration注解,自定义pageHelper方法,方法返回一个PageInterceptor对象,使用@Bean注解,把方法交给spring容器管理

    @Configuration
    public class PageHelperConfig {
    
        @Bean
        public PageInterceptor pageHelper() {
            PageInterceptor pageHelper = new PageInterceptor();
            Properties p = new Properties();
            p.setProperty("offsetAsPageNum","true");//设置为true代表,可以将offset当做pageNum使用
            p.setProperty("rowBoundsWithCount","true");//表示进行select count(*) 查询
            p.setProperty("reasonable","true");
            p.setProperty("returnPageInfo", "check");
            p.setProperty("params", "count=countSql");
            pageHelper.setProperties(p);
            return pageHelper;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  3. 修改controller层的查询方法
    使用@RequestParam注解,定义两个参数pagesize ,并赋予默认值;后面使用了map集合,只获取需要的数据,减轻服务器的消耗

    //查询所有video信息
        @RequestMapping("/find_all")
        public Object findAll(
                @RequestParam(value = "page",defaultValue = "1")int page,
                @RequestParam(value = "size",defaultValue = "5")int size
        ){
            PageHelper.startPage(page,size);   //设置初始页
            List<Video> list = videoService.findAll();
            PageInfo<Video> pageInfo = new PageInfo<>(list);
    
            Map<String,Object> map = new HashMap<>();
            map.put("total_size",pageInfo.getTotal());  //总数量
            map.put("list",pageInfo.getList());    //当前页数据
            map.put("now_page",page);         //当前页
            map.put("total_page",pageInfo.getPages());   //总页数
            return map;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  4. 测试

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/735088
推荐阅读
相关标签
  

闽ICP备14008679号