springboot整合mybatisplus实现增删改查(一)---spring boot 集成mybatis-plus中BaseMapper

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

据说公司项目要使用mybatis-plus,以下简称MP,作为小白的我有点慌,毕竟没有用过,而且即便是mybatis也已经很久没用过了,趁着这两天有时间,赶紧学习以下,也顺便记录以下。

我只是记录了以下我认为接下来项目中可能会用到的知识点,而且只是粗略的过了一遍,具体详细的使用看官方文档:https://mybatis.plus/guide/  另外我想说,这官方文档真的太详细了,给文档编写者点赞!

整合MP系列文章暂时先只记录我到目前为止学习的知识点,以后用到会继续补充,贴一个git的提交列表吧,大体就这些:

首先说以下我的测试环境,本想在前几篇博客用的环境基础之上整合MP的,但是好像包冲突了,找了很久也没找到springboot-mybatis-MP三者相匹配的版本,于是就干脆新创建一个项目了,我的环境是:springboot2.3.3.RELEASE+MP3.4.0+Mysql5.7。

首先贴一下依赖包(之前都是边学边写博客,用到啥依赖现引入,这次是学了两天之后再记录以下博客的,其间用到的所有依赖一并导入):

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- lombok依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mybatis-plus依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <!-- mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- 代码生成器依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!-- 模板引擎依赖 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>

    </dependencies>

数据库:

User实体类:


@Data
@TableName(value = "t_user")
public class User {

    @TableId(value = "user_id",type = IdType.AUTO)
    private Integer userId;
    private String userName;
    private Integer age;

}

yml文件配置只贴MP相关的:

mybatis-plus:
  configuration:
    # sql输出到控制台  方便查看
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

另外,在源码MybatisConfiguration类中有以下截图的这么一段配置,默认开启了驼峰命名,所以不用再配置。

编写Mapper类:


public interface UserMapper extends BaseMapper<User> {

}

看下这个BaseMapper类:

配置扫描包,我新建一个MybatisPlusConfig配置类,将包扫描也加到这上面,以后所有MP相关的配置都将加在这个类里,现在还没有添加任何配置:

@Configuration
@MapperScan("com.example.springbootmp.domain.repository")
public class MybatisPlusConfig {

}

顺便说一下@MapperScan注解,因为我看有的博客上在Mapper接口上添加了@Mapper注解,其实这是不必要的,@MapperScan注解不就是为了避免你在每个接口上加@Mapper注解吗?

至此,我们已经获得了CURD功能。

测试一下插入:

    @Test
    public void aInsert() {
        User user = new User();
        user.setUserName("zhangsan");
        user.setAge(20);
        userMapper.insert(user);
    }

执行后看数据库中:

虽然已经保存成功了,但是BaseMapper接口提供的保存方法实只有一个insert方法:int insert(T entity);  没有批量保存的方法,关于批量的方法,mp还为我们提供了IService接口,这里面有批量相关的方法,这个以后再介绍,先看下官方文档:

测试一下删除:

    @Test
    public void bDelete() {
        userMapper.deleteById(1);
        List<Integer> ids = new ArrayList<>();
        ids.add(2);
        ids.add(3);
        userMapper.deleteBatchIds(ids);
        LambdaQueryWrapper<User> queryWrapper = new QueryWrapper<User>().lambda();
        queryWrapper.eq(User::getUserId,4);
        userMapper.delete(queryWrapper);
        HashMap map = new HashMap();
        map.put("user_id",5);
        userMapper.deleteByMap(map);
    }

如上:删除方法还好点,提供了一个deleteBatchIds方法,可以进行批量删除,至于这个玩意LambdaQueryWrapper,它叫做条件构造器,可以看官方文档,有很详细的说明,总之这个删除可以按照条件删除,还可以传一个map,按照map删除,但是这个deleteByMap很鸡肋,看下源码你就知道了,它只能按照表字段删除,也就是说封装如map的条件必须是表字段,这在实际开发中谁用啊,直接从实体中获取属性多方便,你这还得巴拉巴拉表,看下字段名,顺便贴下deleteByMap的源码:

测试一下修改:

    @Test
    public void cUpdate() {
        User user = userMapper.selectById(1);
        user.setUserName(null);
        user.setAge(50);
        userMapper.updateById(user);
        User user1 = userMapper.selectById(2);
        user1.setAge(30);
        userMapper.updateById(user1);
    }

执行结果:

如上:修改成功,更新相关的方法有很多,就不一一测试了。

 需要留意的是userName为空,并没有更新,updateById会忽略调空值,打印的sql如下:

UPDATE t_user SET age=?, sex=?, created_time=?, updated_time=?, created_by=?, updated_by=? WHERE user_id=?

想要空值的时候也进行更新操作,可以通过注解@TableField(updateStrategy = FieldStrategy.IGNORED)进行忽略
此时打印的sql如下:

UPDATE t_user SET user_name=?, age=?, updated_time=?, updated_by=?, version=? WHERE user_id=?

更多的关于注解的使用之后单独记录,先简单看下源码中的注释:

测试一下查询:

查询方法比较多,就不截图了,详情看官方文档吧!

    @Test
    public void dSelect() {
        LambdaQueryWrapper<User> queryWrapper = new QueryWrapper<User>().lambda();
        queryWrapper.eq(User::getUserId,1);
        User user1 = userMapper.selectOne(queryWrapper);
        System.out.println(user1);
        List<Integer> ids = new ArrayList<>();
        ids.add(1);
        ids.add(2);
        List<User> userList = userMapper.selectBatchIds(ids);
        System.out.println(userList);
        LambdaQueryWrapper<User> queryWrapper1 = new QueryWrapper<User>().lambda();
        queryWrapper1.gt(User::getAge,10);
        List<User> userList1 =userMapper.selectList(queryWrapper1);
        System.out.println(userList1);
    }

这里需要注意一个地方,就是这个selectById()方法,默认使用的主键名是id,如果数据库中表中主键名称不为id,如user_id,此时需要使用@TableId注解手动指定,如@TableId(value = "user_id")。

只测试了几个方法,感兴趣的可以自己试下其它方法。

是不是很简单,只要继承一个BaseMapper接口就可以获得CURD能力,最起码到目前为止还没写xml,至此,快速体验阶段结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值