MybatisPlus

 官网:MyBatis-Plus

起步依赖

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </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>

配置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出sql语句
    map-underscore-to-camel-case: true #开启驼峰映射
  mapper-locations: classpath*:/mappers/*.xml  #加载mapperxml文件
  type-aliases-package: com.qf.entity #别名扫描

实体映射

package com.example.entity;

import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import lombok.Data;
@Data
@TableName("tb_goods")
public class TbGoods implements Serializable {
        /**
        * 标记该属性对应的字段是一个主键
        */
        @TableId(type = IdType.AUTO)
        private Integer goodsId;
        /**
        * 当属性名和字段名不一致,必须通过@TableField映射
        */
        @TableField("goods_stock")
        private Integer goodsStock1;
        /**
        * 
        */
        private Double goodsPrice;
        /**
        * 
        */
        private String goodsName;
}
package com.example.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
@Data
@TableName("tb_order")
public class TbOrder implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private String orderId;
    /**
     *
     */
    private Integer orderNum;
    /**
     *
     */
    private Double orderAmount;
    /**
     *
     */
    private Integer goodsId;
}

添加

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class TestGoodsMapper {
​
    @Autowired
    private GoodsMapper goodsMapper;
​
​
    @Test
    public void testSave(){
​
        TbGoods tbGoods = new TbGoods();
        tbGoods.setGoodsName("华为");
        tbGoods.setGoodsPrice(100.0);
        tbGoods.setGoodsStock1(10);
        goodsMapper.insert(tbGoods);
​
​
    }
​
}
​
注意:
//标记id为主键,同时这个主键是自增长的
@TableId(type = IdType.AUTO)

2.2:根据id删除

    @Test
    public void test1(){
        int i = goodsMapper.deleteById(2);
    }

2.3:根据 columnMap 条件,删除记录

columnMap 中的key必须是字段名不能是entity的属性名

@Test
    public void test2(){
​
        //删除条件
        Map where = new HashMap(){{
            put("goods_stock",100);
            put("goods_name","小米");
        }};
​
​
        int i = goodsMapper.deleteByMap(where);
    }

2.4:根据 entity 条件,删除记录

 @Test
    public void test3(){
​
​
        TbGoods tbGoods = new TbGoods();
        tbGoods.setGoodsId(12);
        tbGoods.setGoodsName("小米");
​
        UpdateWrapper updateWrapper = new UpdateWrapper(tbGoods);
​
        int i = goodsMapper.delete(updateWrapper);
    }

2.5:范围删除

   @Test
    public void test4(){
​
        //范围删除
        UpdateWrapper<TbGoods> updateWrapper = new UpdateWrapper<>();
​
        updateWrapper.gt("goods_stock",100).likeRight("goods_name","小米");
​
        goodsMapper.delete(updateWrapper);
    }

2.6:根据id批量删

  @Test
    public void testdelete1 (){
​
        List ids = new ArrayList(){{
            add(23);
            add(24);
            add(25);
        }};
​
​
        int i = iMemberMapper.deleteBatchIds(ids);
        System.out.println(i);
​
    }

2.7:根据id update

 @Test
    public void test5(){
​
​
        TbGoods goods = new TbGoods();
        goods.setGoodsId(3);
        goods.setGoodsName("小米");
​
        int i = goodsMapper.updateById(goods);
​
    }

2.8:UpdateWrapper

   @Test
    public void test6(){
​
        UpdateWrapper<TbGoods> updateWrapper = new UpdateWrapper<>();
​
        updateWrapper.eq("goods_id",3)
                .set("goods_name","苹果")
                .set("goods_stock",1000);
​
​
​
​
        int i = goodsMapper.update(null,updateWrapper);
    }

2.9:根据 ID 查询

 @Test
    public void testselect1 (){
​
​
        WxbMemeber memeber = iMemberMapper.selectById(21);
        System.out.println(memeber);
​
​
    }
​
@TableField(exist = false)//表示该属性不为数据库表字段,但又是必须使用的。
private List<Orders> orders;

2.10:查询(根据ID 批量查询)

​
    @Test
    public void testSelectByIds (){
​
        List ids = new ArrayList(){{
            add(24);
            add(28);
        }};
​
        List<User> list = userMapper.selectBatchIds(ids);
​
        for (User user : list) {
​
            System.out.println(user);
​
        }
​
    }

2.11:查询(根据 columnMap 条件)

columnMap的key必须为字段名

  @Test
        public void selectMap (){
​
            Map map =new HashMap(){{
                put("sex","1");
                put("id","22");
            }};
            List<User> list = userMapper.selectByMap(map);
            for (User user : list) {
                System.out.println(user);
            }
​
​
        }

2.12:根据 entity 条件

 @Test
    public void testQuerWraper (){
​
        User user = new User();
        user.setSex("1");
​
​
        //条案构造器
        Wrapper<User> userWrapper = new QueryWrapper<>(user);
​
​
​
        List<User> users = iUserMapper.selectList(userWrapper);
        for (User user1 : users) {
            System.out.println(user1);
        }
​
    }
​

2.13:QueryWrapper范围查询

  @Test
    public void test7(){
​
        QueryWrapper<TbGoods> queryWrapper = new QueryWrapper<>();
​
        queryWrapper.eq("goods_id",1)
                    .or()
                    .like("goods_name","小米");
​
​
        List<TbGoods> tbGoods = goodsMapper.selectList(queryWrapper);
​
        tbGoods.forEach(System.out::println);
    }

2.14:条件+分页查询(单表)

首先:配置拦截器,该拦截器可以拦截selectPage方法,并实现物理分页

package com.qfedu.config;
​
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
//Spring boot方式
@Configuration
public class MybatisPlusConfig {
​
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

其次:调用selectPage方法

  @Test
    public void test8(){
​
​
        //设置分页
        IPage page = new Page(1,2);
​
​
        //条件
        QueryWrapper<TbGoods> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("goods_name","小米");
​
​
        IPage pageinfo = goodsMapper.selectPage(page, queryWrapper);
​
​
        //获取分页信息
        pageinfo.getRecords().forEach(System.out::println);   //获取当前页数据
        long pages = pageinfo.getPages();  //总页数
​
​
    }

三:复杂查询

需求:分页查询订单包含订单对应的商品信息

mapper接口

package com.qf.mapper;
​
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qf.entity.TbGoods;
import com.qf.entity.TbOrder;
import org.apache.ibatis.annotations.Param;
​
import java.util.List;
​
public interface GoodsMapper extends BaseMapper<TbGoods> {
​
​
    public IPage<TbOrder> findOrderAndGoodsInfoByPage(@Param("page") IPage page, @Param("tbOrder") TbOrder tbOrder);
​
​
}
​

mapper xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qf.mapper.GoodsMapper">
​
<!-- public List<TbOrder> findOrderAndGoodsInfoByPage(@Param("page") IPage page, @Param("tbOrder") TbOrder tbOrder);-->
​
​
    <resultMap id="findOrderAndGoodsInfoByPageMap" type="TbOrder">
        <id column="order_id" property="orderId"></id>
        <result column="order_num" property="orderNum"></result>
        <association property="tbGoods" javaType="tbGoods">
            <id property="goodsId" column="goods_id"></id>
            <result column="goods_name" property="goodsName"></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 tbOrder.orderNum!=''">
                and  tb_order.order_num = #{tbOrder.orderNum}
            </if>
        </where>
    </select>
</mapper>

单元测试

  @Test
    public void test9(){
​
        //设置分页
        IPage page = new Page(1,1);
​
​
        //条件
        TbOrder tbOrder = new TbOrder();
        tbOrder.setOrderNum(20);
​
        //分页查询
        IPage<TbOrder> pageInfo = goodsMapper.findOrderAndGoodsInfoByPage(page, tbOrder);
​
        //获取当前页数据
        pageInfo.getRecords().forEach(System.out::println);
​
        //获取总页数
        System.out.println(pageInfo.getPages());
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值