乐优商城项目总结day(7)

好久不见. 提交于 2019-11-30 16:08:40

乐优商城项目总结day(7)

1.mapper-spring-boot-starter(通用mapper)的使用

1.1.实体类

在这里插入图片描述
实体类上加上javax.persistence包下@Table注解用来指定表名,表的主键字段使用javax.persistence包下@Id注解,@KeySql是通用mapper中用来指定主键自增长策略。

1.2.dao层

在这里插入图片描述
该类所在的包需要使用@MapperScan("所在包名")声明,继承通用mapper中Mapper接口并指定对应的pojo就能使用,同时还能继承其他Mapper接口来进行增强,能够非常方便的对单表进行增删改查。

1.3.dao层的使用

Mapper接口中自带的方法:
在这里插入图片描述
都是一些基于单表的增删改查。

select用法

Category category = new Category();
category.setParentId(pid);
List<Category> categoryList = categoryDao.select(category);

参数中传入对象,对象的属性与值即为查询的条件。

selectByExample用法

适用于单表的动态条件查询,用法例如:

public PageResult<Brand> queryBrandByPage(Integer page, Integer rows, String sortBy, Boolean desc, String key) {
        // 分页
        PageHelper.startPage(page, rows);
        // 过滤
        Example example = new Example(Brand.class);
        if(StringUtils.isNotBlank(key)) {
            example.createCriteria().orLike("name", "%" + key + "%")
                    .orEqualTo("letter", key.toUpperCase());
        }
        // 排序
        if(StringUtils.isNotBlank(sortBy)) {
            String orderByClause = sortBy + (desc ? " DESC" : " ASC");
            example.setOrderByClause(orderByClause);
        }
        // 查询
        List<Brand> brandList = brandDao.selectByExample(example);
        if(CollectionUtils.isEmpty(brandList)) {
            throw new LyException(ExceptionEnum.BRAND_NOT_FOUND);
        }
        // 解析分页结果
        PageInfo<Brand> brandPageInfo = new PageInfo<>(brandList);

        return new PageResult<>(brandPageInfo.getTotal(), brandList);
    }

创建Example对象需要传入对应实体类的class对象,通用mapper通过反射的机制可以拿到你传入类的表信息和表字段名称,并可通过createCriteria设置条件,·setOrderByClause进行字段排序,最后组装成相应sql。

分页用法

此外,使用通用mapper进行分页时可配合PageHelper同时使用。PageHelper大致的原理是在该线程的ThreadLocal中保存对应的页数和分页数量,通过mybatis拦截器进行拦截,并在要执行的sql后面拼上limit函数以及ThreadLocal中的保存的页数和分页数量。
查询出的List<T>将会被拦截并组装成Page<T>对象,其实质也是继承了ArrayList。因为强转不够优雅,因此可以使用PageInfo对象进行解析拿到分页详情。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!