Mybatisplus学习之基本的增删改查CRUD以及自定义方法(三)

本文介绍了如何在Mybatis Plus中实现自定义Mapper接口,包括插入、删除、修改、查询操作的示例,以及如何在xml文件中编写SQL。还展示了如何在UserMapper中添加自定义方法并进行测试。
摘要由CSDN通过智能技术生成

目录

1、BaseMapper

2.测试插入

 3、删除

4、修改

5、查询

6、自定义方法

①在UserMapper接口中定义我们自己的方法

 ②在xml文件中写sql

 ③测试


1BaseMapper

我们在上篇讲过,自己创建的Mapper接口需要继承我们的BaseMapper,其为我们提供了非常丰富而方法。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.baomidou.mybatisplus.core.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteById(T entity);

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);

    int delete(@Param("ew") Wrapper<T> queryWrapper);

    int deleteBatchIds(@Param("coll") Collection<?> idList);

    int updateById(@Param("et") T entity);

    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

    T selectById(Serializable id);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

    default T selectOne(@Param("ew") Wrapper<T> queryWrapper) {
        List<T> ts = this.selectList(queryWrapper);
        if (CollectionUtils.isNotEmpty(ts)) {
            if (ts.size() != 1) {
                throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records", new Object[0]);
            } else {
                return ts.get(0);
            }
        } else {
            return null;
        }
    }

    default boolean exists(Wrapper<T> queryWrapper) {
        Long count = this.selectCount(queryWrapper);
        return null != count && count > 0L;
    }

    Long selectCount(@Param("ew") Wrapper<T> queryWrapper);

    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

    <P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);

    <P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
}

2.测试插入


    @Test
    public void testInsert(){
        User user = new User(null,"张三丰",140,"wudang@128.com");
        int insert = userMapper.insert(user);//返回的是受影响的行数
        System.out.println(insert);
    }

sql语句
INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )

数据库插入成功

 3、删除

    @Test
    public void testDelete(){
        int i = userMapper.deleteById(1L);//根据主键id进行删除
        System.out.println(i);

        Map<String,Object> map = new HashMap<>();
        map.put("name","Tom");
        map.put("age",28);
        //根据map来删除,注意,map里面的字段与数据库字段需要保持一致哦
        int i1 = userMapper.deleteByMap(map);
        System.out.println(i1);
    }


sql语句分别为 
DELETE FROM user WHERE id=?
DELETE FROM user WHERE name = ? AND age = ?

4、修改

    @Test
    public void testUpdate(){
        User user = new User(4L,"hhhh",null,null);
//        user.setId(2L);
//        user.setName("jackson");
        userMapper.updateById(user);
    }


注意:为null的字段不会被修改,如果是""则会被修改

5、查询

  @Test
    public void testSelect(){
//        根据主键ID来查询
        User user = userMapper.selectById(4L);
        System.out.println(user);
        System.out.println();
        List<Long> ids = Arrays.asList(4l,5l,6l);
//        根据id批量查询
        List<User> users = userMapper.selectBatchIds(ids);
        //使用Java8新特性方法引用输出,如果想学Java8新特性的可以去前面看我的文章哦
        users.forEach(System.out::println);
        System.out.println();

        Map<String,Object> map = new HashMap();
        map.put("name","田七");
//        通过map查询
        List<User> userList = userMapper.selectByMap(map);
        userList.forEach(System.out::println);

    }

6、自定义方法

很多时候我们需要自己定义方法,那怎么办呢?之前我们在讲Mybatis的时候知道,如果我们自己在mapper接口中写了方法后需要在mapper.xml文件中去写sql语句,这里也是一样的。第一篇文章的时候我们就说过了,mp只是对Mybatis的增强而不做任何改变。

①在UserMapper接口中定义我们自己的方法

 ②在xml文件中写sql

这里需要注意,我们的xml写在哪儿呢?这需要我们在application.yml配置文件中进行配置。其实,也不用配置,因为我们有个默认的地方。

 这个就是默认的路径,所以我们不需要写,任何配置。只需要在其路径中写我们的xml文件就行。

 如果按照默认的话,xml一定要写在resources下面的mapper文件下面,记得,这个地方的文件夹一定要叫mapper

 

 ③测试

    @Test
    public void testMap(){
        Map<String, Object> map = userMapper.getMapById(9L);
        System.out.println(map);
    }


输出结果为:
{name=赵六, id=9, email=44}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢编程的夏先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值