一、Mybatis动态SQL
-
动态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(); } }
-
修改mapper层的SQL用法
使用@UpdateProvider
注解,type
值是上面类的类名VideoSqlProvider.class
,method
选择对应的方法名"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);
二、pageHelper分页助手插件
-
pom.xml文件配置相关依赖
这里使用的是5.x的版本<!-- 分页插件依赖 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency>
-
创建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; } }
-
修改controller层的查询方法
使用@RequestParam
注解,定义两个参数page
和size
,并赋予默认值;后面使用了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; }
-
测试