通用mapper+pagehelper分页插件的使用

点击进入我的个人博客

一、环境搭建

1.导入maven依赖
        <!--通用mapper起步依赖-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>
2.dao接口编写
//继承通用mapper提供的接口
public interface BrandMapper extends Mapper<Brand> {
}
3.Brand实体类编写
@Table(name="tb_brand")
public class Brand implements Serializable{
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
	private Integer id;//品牌id

    @Column(name = "name")
	private String name;//品牌名称

    @Column(name = "image")
	private String image;//品牌图片地址
	
    @Column(name = "letter")
	private String letter;//品牌的首字母
	
    @Column(name = "seq")
	private Integer seq;//排序
4.配置@MapperScan(“dao包路径”)

注意:这个注解是通用mapper提供的

二、查询方法

1.查询所有
selectAll ()//返回List
2.通过id查询
selectByPrimaryKey ( id )//返回实体类
selectOne ( brand )//返回实体类,参数是实体类

三、新增方法

1.新增并且算上null值
insert ( brand )
2.新增不算上null值
  • Selective是排除null值的
insertSelective ( brand )//推荐使用

四、更新方法

1.更新并且算上null值
updateByPrimaryKey ( brand )

2.更新不算上null值
updateByPrimaryKeySelective ( brand )//推荐使用

五、删除方法

1.通过id删除
deleteByPrimaryKey ( id )

六、按条件查询

  • controller层
    /**
     * 多条件查询
     * @param brand
     * @return
     */
    @PostMapping("/search")
    public Result<List<Brand>> search(@RequestBody Brand brand){
        List<Brand> brandList = brandService.findList ( brand );
        return new Result<> ( true,StatusCode.OK,"根据条件查询品牌成功",brandList);
    }

  • service层
    public List<Brand> findList(Brand brand) {
        //自定义条件搜索对象 Example
        Example example = new Example ( Brand.class );
        Example.Criteria criteria = example.createCriteria ( );//条件构造器

        if (brand!=null){

            //brand.name!=null 并且不为""
            if (!StringUtils.isEmpty ( brand.getName () )){
                //根据名字模糊查询 where name like '%华为%'
                /*
                    第一个参数是String类型(对应数据表的列名)
                    第二个参数是Object类型(对应的value值)
                */
                criteria.andLike ( "name","%"+brand.getName ()+"%" );
            }

            //brand.letter!=null 并且不为""
            if (!StringUtils.isEmpty ( brand.getLetter () )){
                //根据首字母查询 and letter='H' (因为首字母就一个字符,不用like)
                criteria.andEqualTo ( "letter",brand.getLetter () );
            }
        }
        return brandMapper.selectByExample ( example );
    }

在使用上建议把条件查询逻辑抽调一个方法,可以方便复用

更多criteria的方法可以查看源码:

  • 以下是截取的一部分源码的方法
        public Example.Criteria andIsNull(String property) {
            this.addCriterion(this.column(property) + " is null");
            return (Example.Criteria)this;
        }

        public Example.Criteria andIsNotNull(String property) {
            this.addCriterion(this.column(property) + " is not null");
            return (Example.Criteria)this;
        }

        public Example.Criteria andEqualTo(String property, Object value) {
            this.addCriterion(this.column(property) + " =", value, this.property(property));
            return (Example.Criteria)this;
        }

        public Example.Criteria andNotEqualTo(String property, Object value) {
            this.addCriterion(this.column(property) + " <>", value, this.property(property));
            return (Example.Criteria)this;
        }

        public Example.Criteria andGreaterThan(String property, Object value) {
            this.addCriterion(this.column(property) + " >", value, this.property(property));
            return (Example.Criteria)this;
        }

七、分页查询

1.pagehelper分页插件
  • maven依赖
        <!--mybatis分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

2.代码实现
  • controller层
    /**
     * 分页查询
     * @param page
     * @param size
     * @return
     */
    @GetMapping("/search/{page}/{size}")
    public Result<PageInfo<Brand>> findByPage(@PathVariable Integer page,
                                              @PathVariable Integer size){
        PageInfo<Brand> brandPageInfo = brandService.findByPage ( page, size );
        return new Result<> ( true,StatusCode.OK,"分页查询品牌成功",brandPageInfo);
    }

  • service层
    public PageInfo<Brand> findByPage(Integer page, Integer size) {
        //开启分页查询
        PageHelper.startPage ( page,size );
        //封装分页bean
        PageInfo<Brand> brandPageInfo = new PageInfo<> ( brandMapper.selectAll ( ) );
        return brandPageInfo;
    }

八、分页条件查询

    public PageInfo<Brand> findByPageAndList(Integer page, Integer size, Brand brand) {
        //调用抽取出来的条件查询方法获得查询条件
        Example example = createExample ( brand );
        //开启分页查询
        PageHelper.startPage ( page,size );
        //封装分页bean
        PageInfo<Brand> brandPageInfo = new PageInfo<> ( brandMapper.selectByExample ( example ) );
        return brandPageInfo;
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值