mybatis-plus数据库专项应用解析

内容导读

mybatis-plus概述

mybatis-plus案例解析

mybatis-plus接口与分页应用

一、mybatis-plus概述

1、mybatis-plus(mp)介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

mybatis-plus官网:https://mybatis.plus

2、mybatis-plus部署配置

创建工程,引入pom.xml依赖:

<dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
    </dependency>
    <dependency>
      <!--mybatis-plus依赖-->
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
    </dependency>
</dependencies>

数据源配置:

spring: datasource:
  druid:
    driver-class-name: com.mysql.jdbc.Driver username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=utf8&useSSL=false
  max-active: 60 #连接池配置

到此,工程已经成功整合了mp。

二、mybatis-plus案例解析

1、创建实体类TbGoods 

package com.mysoft.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; 
import com.baomidou.mybatisplus.annotation.TableId; 
import com.baomidou.mybatisplus.annotation.TableName; 
import lombok.Data;
import java.io.Serializable;

@Data
@TableName("tb_goods")	//表名注解,标识实体类对应的表 
public class TbGoods implements Serializable {
    //主键注解 
    @TableId(type=IdType.AUTO)
    private Integer goodsId;
    //字段注解
    @TableField("goods_stock")
    //字段注解(非主键) 
    private Integer goodsStock;
    //商品价格
    private Double goodsPrice;
    //商品名称
    private String goodsName;
}

2、定义 GoodsMapper接口

package com.mysoft.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper; 
import com.qf.entity.TbGoods;
import org.apache.ibatis.annotations.Insert; 
import  org.apache.ibatis.annotations.Mapper;

@Mapper
public interface GoodsMapper extends BaseMapper<TbGoods> {
    //以下可以自定义curd
}

3、单元测试

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class DemoTest{
     // 声明商品操作对象
      @Autowired
      private GoodsMapper goodsMapper
      
      /**
      * 添加记录
      */
      @Test
      public void test1(){
       TbGoods tbGoods=new TbGoods();
       tbGoods.setGoodsStock(10);
       tbGoods.setGoodsPrice(99.0);
       tbGoods.setGoodsName("华为");
        // 插入数据  
       int n=goodsMapper.insert(tbGoods);
     }
}

4、sql日志输出配置application.yml

mybatis-plus:
 configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出sql语句

三、mybatis-plus接口与分页应用

1、增删改查操作接口

(1)删除

@Test
publicvoid  test2(){
   // goodsMapper对象见上边2.3
   int i =goodsMapper.deleteById(1);
}

@Test
publicvoid  test3(){
ArrayList ids = new ArrayList<Integer>(); 
  ids.add(2);
  ids.add(3);
  ids.add(4);
  //批量删除
  goodsMapper.deleteBatchIds(ids);
}

@Test
publicvoid  test4(){
//where
Map where = new HashMap(){{
put("goods_name","小米");
put("price",199);
}};
goodsMapper.deleteByMap(where);

}

@Test
publicvoid  test5(){
//条件构造器
UpdateWrapper<TbGoods>  goodsUpdateWrapper = new UpdateWrapper<>();
goodsUpdateWrapper.gt("goods_price",100).or().likeRight("goods_name","小米");
goodsMapper.delete(goodsUpdateWrapper);
    
}

(2)修改

   // goodsMapper对象见上边2.3
@Test
public void test6(){
 TbGoods tbGoods=new TbGoods();
 tbGoods.setGoodsId(7);
 tbGoods.setGoodsName("小米");
 tbGoods.setGoodsPrice(98.0);
 goodsMapper.updateById(tbGoods);
}

@Test
public void test7(){
 //条件构造器
 UpdateWrapper<TbGoods> updateWrapper=new UpdateWrapper<>();
 updateWrapper.set("goods_price",101).set("goods_name","苹果").ge("goods_stock",10);
   // goodsMapper对象见上边2.3 
goodsMapper.update(null,updateWrapper);
}

(3)查询

   // goodsMapper对象见上边2.3
@Test
public void test8(){
 TbGoodst bGoods=goodsMapper.selectById(7);
 System.out.println(tbGoods);
}

 @Test
public void test9(){
  ArrayList ids=new ArrayList<Integer>();
  ids.add(2);
  ids.add(3);
  ids.add(4);
  goodsMapper.selectBatchIds(ids).forEach(System.out::println);
 }

@Test
public void test10(){
//条件构造器
 QueryWrapper<TbGoods> queryWrapper=new QueryWrapper<>();
 queryWrapper.gt("goods_stock",10).eq("goods_name","小米");
   // goodsMapper对象见上边2.3
 List<TbGoods> tbGoods=goodsMapper.selectList(queryWrapper);
 tbGoods.forEach(System.out::println);
}

//单表的条件+分页查询
@Test
public void test11(){
    //分页信息
    IPage<TbGoods> page=new Page<>(1,2);
    //条件构造器
    QueryWrapper<TbGoods> queryWrapper=new QueryWrapper<>();
    queryWrapper.like("goods_name","苹果");
    IPage<TbGoods> pageInfo=goodsMapper.selectPage(page,queryWrapper);
    //取分页的信息
    long total=pageInfo.getTotal();//总记录数
    System.out.println(total);
    long pages=pageInfo.getPages();//总页数
    System.out.println(pages);
    pageInfo.getRecords().forEach(System.out::println);//当前页数据
    }

2、mybatis-plus分页功能

(1)添加查询

实体类Goods:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Goods{
    private int goodsId;
    private Double goodsPrice;
    private String goodsName;
    @TableField(fill=FieldFill.INSERT)
    private Date createTime;
    @TableField(fill=FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

实现MetaObjectHandler接口:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler{
  //insert
  @Override
  public void insertFill(MetaObjectmetaObject){
  this.strictInsertFill(metaObject,"createTime",Date.class,newDate());
  //起始版本3.3.0(推荐使用)
  this.strictInsertFill(metaObject,"updateTime",Date.class,newDate());
  //起始版本3.3.0(推荐使用)
  }

    //update
  @Override
  public void updateFill(MetaObject metaObject){
      this.strictUpdateFill(metaObject,"updateTime",Date.class,newDate());
    //起始版本3.3.0(推荐)
    }
}

(2)分页查询

需求:分页+条件,展示订单及其商品信息。

定义接口OrderMapper:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qf.entity.TbOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface OrderMapper extends BaseMapper<TbOrder>{
  //需求:分页+条件展示订单及其商品信息
 public IPage<TbOrder> 
findOrderAndGoodsInfoByPage(@Param("page")IPage<TbOrder>page,@Param("tbOrder")TbOrdertbOrder);
}

定义OrderMapper.xml:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC"-//mybatis.org//DTDMapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mysoft.mapper.OrderMapper">
    <!--//需求:分页+条件,展示订单及其商品信息
 publicIPage<TbOrder>findOrderAndGoodsInfoByPage(@Param("page")
 IPage<TbOrder>page,@Param("tbOrder")TbOrdertbOrder);-->
  <resultMap id="findOrderAndGoodsInfoByPageMap" type="tborder">
    <id property="orderId"column="order_id"></id>
    <result column="order_num" property="orderNum"></result>
    <association property="tbGoods" javaType="tbGoods">
      <result property="goodsName" column="goods_name"></result>
    </association>
  </resultMap>
 <select id="findOrderAndGoodsInfoByPage" resultMap="findOrderAndGoodsInfoByPageMap">
   select * from tb_order left join tb_goods on tb_order.goods_id=tb_goods.goods_id
   <where>
     <if test="tbOrder.orderNum!=null">
        and order_num=#{tbOrder.orderNum}
     </if>
    </where>
  </select>
</mapper>

配置:

mapper-location: classpath*:/mappers/*.xml
type-aliases-package: com.mysoft.entity

单元测试:

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class DemoTest{
 //声明订单操作对象
 @Autowried
 private OrderMappe orderMapper;

  @Test
  publicvoidtest12(){
    //分页信息
    IPage<TbOrder>page=new Page<>(1,2);
    //where
    TbOrder tbOrder=new TbOrder();
    tbOrder.setOrderNum(2);
    IPage<TbOrder> pageInfo = orderMapper.findOrderAndGoodsInfoByPage(page,tbOrder);
    //取分页的信息
    long total=pageInfo.getTotal();//总记录数
    System.out.println(total);
    long pages=pageInfo.getPages();//总页数
    System.out.println(pages);
    pageInfo.getRecords().forEach(System.out::println);//当前页数据
  }

}

3、更多自定义查询

@SpringbootTest
public class MyTest{
    @Test
    publicvoidtest13(){
        LambdaUpdateChainWrapper<TbGoods> updateChainWrapper=new 
        LambdaUpdateChainWrapper<>(goodsMapper);
        updateChainWrapper.set(TbGoods::getGoodsName,"小米1")
            .set(TbGoods::getGoodsPrice,199)
            .eq(TbGoods::getGoodsId,7)
            .update();
    }
    
    @Test
    publicvoidtest14(){
        LambdaUpdateChainWrapper<TbGoods> updateChainWrapper=new 
        LambdaUpdateChainWrapper<>(goodsMapper);
        updateChainWrapper.eq(TbGoods::getGoodsId,7).remove();
    }
    
    @Test
    publicvoidtest15(){
        LambdaQueryChainWrapper<TbGoods> queryChainWrapper=new 
         LambdaQueryChainWrapper<>(goodsMapper);
         queryChainWrapper.gt(TbGoods::getGoodsStock,9)
            .list()
            .forEach(System.out::println);
    }   
}

更多精彩内容请关注本站!!!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值