Mybatis-Plus简述

 一. MP实现原理

官网:MyBatis-Plus

对象的方式操作数据库,单表几乎不写Sql.

  1. 对象与表一一对应@TableName("item")
  2. 对象的属性与表的字段一一对应@TableField("id") 如果字段名称与属性名称一致,则省略,包含驼峰规则 (@TableId(type = IdType.AUTO)主键自增)
  3. MP将常见的CURD的接口方法进行了封装,只需要Mapper层实现接口BaseMapper.
  4. MP根据自定的接口,动态的生成CURD的Sql,从此单表操作,程序员无需编辑Sql.

二. 具体配置流程:

导入jar包

说明: MybatisPlus的包 内部已经添加了Mybatis,所以包应该2选1.

		
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.3
        

实现POJO对象与表映射

@Data
@Accessors(chain = true)
@TableName("item") //对象与表一一映射
public class Item extends BasePojo{
    @TableId(type = IdType.AUTO)//主键自增
    //@TableField("id")      //如果字段名称与属性名称一致,则省略,包含驼峰规则
    private Integer id;         //商品Id号
    private String title;       //商品标题信息
    private String sellPoint;   //卖点信息
    private Integer price;      //商品价格
    private Integer num;        //商品数量
    private String images;       //商品图片
    private Integer itemCatId;  //商品分类ID号
    private Boolean status;     //状态信息    0 下架 1 上架
}

Mapper接口继承BaseMapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

//必须添加泛型,因为泛型对象与表关联
public interface ItemMapper extends BaseMapper {

}

Mybatis-Plus简述_第1张图片

修改YML映射文件

#SpringBoot整合Mybatis-plus
mybatis-plus:
  #指定别名包
  type-aliases-package: com.jt.pojo
  #扫描指定路径下的映射文件
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
  # 一二级缓存默认开始 所以可以简化

 三. 测试:

1) 增

对象不为null的属性自动插入表中对应字段中

    /**
     * 2.测试数据新增入库操作
     * 核心: 以对象的方式操作数据库
     */
    @Test
    public void test02(){
        Item item = new Item();
        item.setTitle("商品标题信息")
            .setSellPoint("卖点信息")
                    .setNum(100);
        itemMapper.insert(item);
    }

2) 删

Mybatis-Plus简述_第2张图片

3) 改

 

4) 查

①简单查询

    // 查询所有数据
    public void test01(){
        //查询全部数据,不需要条件
        List list = itemMapper.selectList(null);
    }
    // 查询id=1的数据
    public void test03(){
       Item item = itemMapper.selectById(1);
    }

    /**
     * 查询: 只查询主键信息,
     * 适用场景: 适用关联查询!!!    主键可以被其它的关联
     */
    public void test10(){
        List idList = itemMapper.selectObjs(null);
    }

    /**
     * 4.根据title/sellPoint查询数据
     *   查询titile="手机" and sellPoint="贵就好"
     * 核心:
     *      1.以对象的方式操作数据库.
     *      2.根据对象中不为null的属性,充当条件
     */
    public void test04(){
        //对象的方式封装数据,只能实现and连接
        Item item = new Item();
        item.setTitle("手机").setSellPoint("贵就好");
        //条件构造器: 动态拼接where条件的  set赋值解析之后变为 =号 默认使用and进行拼接
        QueryWrapper queryWrapper = new QueryWrapper<>(item);
        List list = itemMapper.selectList(queryWrapper);
    }

    /**
     * 查询 价格大于500,小于200000
     * 1.条件构造器的连接符:
     *      1.等号  =   eq
     *      2.大于  >   gt
     *      3.小于  <   lt
     *      4.大于等于 >=  ge
     *      5.小于等于 <=  le
     *      6.不等于  !=  ne
     *  2.条件间关联用法  默认使用and连接,
     *                  如果使用or,则写or方法
     */
    public void test05(){
       QueryWrapper queryWrapper = new QueryWrapper<>();
       queryWrapper.gt("price",500)
                   //.or()
                   .lt("price",200000);
       List list = itemMapper.selectList(queryWrapper);
    }
    // 按照条件查询单条数据
    public void test01(){
       QueryWrapper queryWrapper = new QueryWrapper<>();
       queryWrapper.gt("price",500)
                   //.or()
                   .lt("price",200000);
       Item item = itemMapper.selectOne(queryWrapper);
    }

    /**
     * 查询: title中包含"华为"的数据
     * Sql: select * from item where title like "%华为%"
     * 知识点:
     *      1. 以xxx开头  "xxx%"  右侧 LikeRight
     *      2. 以xxx结尾  "%xxx"  左侧 likeLeft
     *      3. xxx       "%xxx%" like
     */
    public void test07(){
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.like("title","华为");
        List list = itemMapper.selectList(queryWrapper);
    }

    /**
     * 查询: id为 1,2,3,4的数据
     * 必须用引用类型的数组
     * Sql: select * from item where id in (1,2,3,4)
     */
    public void test08(){
        Integer[] ids = {1,2,3,4}; // 不能使用基本类型int
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.in("id",ids);
        List list = itemMapper.selectList(queryWrapper);
        //2.API2 数组转化为集合
        List idList = Arrays.asList(ids);
        List list2 = itemMapper.selectBatchIds(idList);

    }

②复杂查询

    /**
     * 查询价格大于600的商品,并且要求按照 价格降序排列.
     * Sql:select * from item where price>600 order by price desc
     */
    public void test06(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.gt("price",600)
                    .orderByDesc("price");
        List list = itemMapper.selectList(queryWrapper);
    }

    /**
     * 查询: 根据对象中不为null的数据,查询数据库
     * 核心知识点: 动态sql拼接
     */
    public void test09(){
       String title = "";
       String sellPoint = "工艺好";
       QueryWrapper queryWrapper = new QueryWrapper<>();
       queryWrapper.eq(StringUtils.hasLength(title),"title",title);
       queryWrapper.eq(StringUtils.hasLength(sellPoint),"sell_point",sellPoint);

       List list = itemMapper.selectList(queryWrapper);
    }

③分页查询

    /**
     * 1.获取满足条件的记录总数
     * 2.进行分页操作
     * 原则:
     *      1.手写Sql 业务层级简单,Sql高效直观.
     *      2.利用MP实现  业务层复杂, Sql不写
     *  Sql: select * from item limit 起始位置,条数
     * @param pageResult
     * @return
     */
    @Override
    public PageResult getItemList(PageResult pageResult) {
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.like("title", pageResult.getQuery());

        //2.完成分页操作
        //2.1 准备一个分页对象,MP基于初始化条件,获取分页其它数据
        IPage page = new Page<>(pageResult.getPageNum(),
                                      pageResult.getPageSize());
        page = itemMapper.selectPage(page,queryWrapper);

        //2.2 获取总数,获取记录数
        long total = page.getTotal();
        List list = page.getRecords();

        return pageResult.setTotal(total).setRows(list);
    }

 配置文件制定数据库类型

@Configuration  //标识配置类
public class MybatisPlusConfig {


    //MybatisPlusInterceptor MP拦截器 负责指定数据库类型
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB));
        return interceptor;
    }
}

你可能感兴趣的:(mybatis,java,数据库)