【Mybatis-Plus】Mybatis-Plus快速入门

这篇具有很好参考价值的文章主要介绍了【Mybatis-Plus】Mybatis-Plus快速入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mybatis-Plus

前期准备

Mybatis-Plus简述

Mybatis-Plus是基于Mybatis的数据库操作组件,其实现的功能完全是Mybatis的功能拓展,不改变Mybatis的使用方式,可以兼容Mybatis的操作方式。

创建一个数据库、一个表进行基础操作:

CREATE DATABASE mybatis_plus

CREATE TABLE `user`(
	id BIGINT(20) NOT NULL COMMENT '主键ID', 
	NAME VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(id)
)

INSERT INTO USER(id, NAME, age, email) VALUES 
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com')

创建一个Spring项目,项目通过Spring Initlizer创建,不导入任何依赖包,在POM.xml文件中进行依赖导入。

依赖导入

分别导入mybatis-plus、数据库驱动、lombok依赖

<!--        Mybatis-plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
<!--        mysql驱动-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

<!--        lombok简化开发-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

配置数据库信息

在自动生成的resource文件夹下的application.properties配置文件中配置数据库信息:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimeZone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

创建对应于数据库表的实体类:entity/User

//@Data注解用于简易生成get和set方法
@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

创建Mybatis用于操作User表的的映射接口:mapper/Usermapper

//使接口继承BaseMapper<>并指明实体类,可以直接使用其中定义的方法,注意这样必须在主类中添加MapperScan注解
//也可以添加到配置类中
@Repository
public interface UserMapper extends BaseMapper<User> {
}

在主类上添加MapperScan注解

@SpringBootApplication
@MapperScan("com.qinghe.demomptest.mapper")
public class DemomptestApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemomptestApplication.class, args);
    }
}

测试调用获取全部数据的方法:

@SpringBootTest
class DemomptestApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void findAll() {
        //注意selectList()中传入的是条件,nulll代表没有条件
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }
}

获取结果:

[User(id=1, name=Jone, age=18, email=test1@baomidou.com), User(id=2, name=Jack, age=20, email=test2@baomidou.com), User(id=3, name=Tom, age=28, email=test3@baomidou.com), User(id=4, name=Sandy, age=21, email=test4@baomidou.com), User(id=5, name=Billie, age=24, email=test5@baomidou.com)]

添加sql输出日志

在application.properties中添加如下配置信息:

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

这之后在执行sql后会在控制台输出sql的执行结果以及生成的sql语句,方便于排错与高效开发。+

Mybatis-Plus实现基础操作与其基本原理

添加操作的实现

@Test
public void testAdd() {
    User user = new User();
    user.setName("Maria");
    user.setAge(30);
    user.setEmail("Maria@qq.com");
    int insert = userMapper.insert(user);
    System.out.println(insert);
}

插入结果为:

1661768561988714498 Maria 30 Maria@qq.com

我们没有设置id的值,但是Mybatis-Plus帮我们进行了设置,这就是Mybatis-Plus的主键生成策略,我们可以使用注解来选用不同的主键生成策略:

在主键的属性上面添加注解:

//生成一个19位的唯一随机数作为主键值(雪花策略)
@TableId(type = IdType.ASSIGN_ID)

//生层一个随机数的值作为主键值
@TableId(type = IdType.ASSIGN_UUID)

//设置主键值自增
@TableId(type = IdType.AUTO)

//需要手动设置主键值
@TableId(type = IdType.INPUT)

//不使用任何策略
@TableId(type = IdType.NONE)

雪花策略:

使用1位符号、41位时间戳、10位工作进程(5数据+5机器id)、12位随机序列号

保证绝对不会出现重复以及高效率,一般都使用ASSIGN_ID策略,也就是默认的这个策略。

修改操作的实现

通过调用userMapper.updateById()来进行属性值的修改,使用.updateById的方式进行修改,可以通过传入user对象的方式来进行修改方法底层会自动根据user对象的id与其属性值进行修改

    @Test
    public void testUpdate() {
        User user = new User();
        user.setId(1661768561988714498L);
        user.setName("Maria666");

        //使用.updateById的方式进行修改,可以通过传入user对象的方式来进行修改
        //方法底层会自动根据user对象的id与其属性值进行修改
        int count = userMapper.updateById(user);
        System.out.println(count);
    }

Mybatis-Plus实现自动填充

在测试数据库表中添加两个属性create_time和update_time,其数据类型为datetime,在实体类中也添加对应属性(注意在实体类中使用驼峰试命名、在数据库中使用下划线进行命名)这两个属性分别是在插入时设置内容以及在插入和数据修改时设置内容。

要实现插入和修改时自动填充内容的功能,我们在要进行设置的属性中添加注解@TableField(fill = FieldFill.xxx)

例如下面这样:

    //设置其在什么时候设置内容(insert代表插入即第一次时设置内容)
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    //INSERT_UPDATE代表在插入以及修改的时候设置内容
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

这个注解要配合handler中的方法使用,创建一个handler类并实现MetaObjectHandler接口(mybatis-plus中的接口):

//使用Spring的自动配置
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    //insertFill方法会在插入时执行。
    @Override
    public void insertFill(MetaObject metaObject) {
        //这个方法中,第一个参数是要设置的属性名、第二个参数是设置的内容,第三个是固定要传入的对象,也是这个方法的形参
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

乐观锁

乐观锁适用于希望自己在更新一条记录时,这条记录不会被其他人更新的情况(线程安全)。

乐观锁通过加入版本的方式控制线程,若事务在开启时与结束时检查版本一致,则允许修改并更新版本号,若不一致则不允许修改(说明有其他事务也在对其进行修改)

在数据库表中添加一个属性version,类型为int,同时在实体类中也添加该属性并在其上添加@Versioin注解。

    //乐观锁的版本属性
    @Version
	@TableField(fill = FieldFill.INSERT)
    private Integer version;

之后创建一个配置类(config.MpConfig),在配置类中添加乐观锁插件的代码:

@Configuration
@MapperScan("com.qinghe.demomptest.mapper")
public class MpConfig {
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

测试,先查询再修改:

    @Test
    public void testOptimsiticLocker() {
        //根据id查询
        User user = userMapper.selectById(1662022315828776962L);
        //修改,注意不需要手动设置Version的变化,Mybatis-Plus在底层已经帮忙实现了这个功能
        user.setName("LiSA");
        userMapper.updateById(user);
    }

此时version会自动+1

复杂查询功能在Mybatis-Plus的实现

多id批量查询

使用userMapper.selectBatchIds(Collection)进行查询:

    @Test
    public void testSelect1() {
        //这样的List传进去会自动把id为1,2,3,4的数据查询出来
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3, 4));
        System.out.println(users);
    }

复杂条件查询,向形参中传入map键值对进行查询(userMapper.selectByMap()):

    @Test
    public void testSelect2() {
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("name", "Jack");
        columnMap.put("age", 20);
        List<User> users = userMapper.selectByMap(columnMap);
        System.out.println(users);
    }

但以上两种方式都不常用,常用的是条件构造器方式进行查询。

分页查询

在配置类中引入分页查询的依赖

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

方法测试:

    @Test
    public void testSelectPage() {
        //分页的使用,创建一个Page对象,其中要传入两个数,第一个数是当前页,第二个数是每一页的页面大小
        Page<User> page = new Page(1, 3);
        //调用selectPage方法进行分页查询,再通过调用userPage来获取页面的相关信息
        Page<User> userPage = userMapper.selectPage(page, null);
        //获取总页数
        long pages = userPage.getPages();
        //获取当前页码
        long current = userPage.getCurrent();
        //获取当前页的数据集合
        List<User> records = userPage.getRecords();
        //获取总记录数
        long total = userPage.getTotal();
        //当前页是否有下一页
        boolean next = userPage.hasNext();
        //当前页是否有上一页
        boolean previous = userPage.hasPrevious();
    }

删除操作

使用.deleteById实现删除操作

    @Test
    public void testDeleteById() {
        int result = userMapper.deleteById(1L);
        System.out.println(result);
    }

使用.deleteBatchIds()实现批量删除

int result = userMapper.deleteBatchIds(Arrays.asList(1, 2,3));

简单条件删除,使用.deleteByMap(Map),相当于给删除添加Where语句,与修改那里一样,就是变成delete

  • 逻辑删除

    物理删除是指将记录从数据库中真正删除,逻辑删除是指给字段上一个标志位,标志位为0代表正常,标志位为1代表其在逻辑上被删除了

在数据表中添加deleted字段,类型为int

Mybatis-Plus中默认1为逻辑上删除了,0为逻辑上没有删除,可以通过配置进行修改:

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

在实体类中添加注解:

    //逻辑是否删除的注解
    @TableLogic
    @TableField(fill = FieldFill.INSERT)
    private Integer deleted;

添加了注解之后、所有的删除语句就会变成Update并将deleted标签更改为1的语句,从而实现逻辑删除。

而配置了逻辑删除情况的Mybatis-Plus在进行查询时会自动添加wehre deleted = 0也就是说逻辑删除的语句不会被查询到,但其在数据库物理中确实存在。

条件构造器

当需要进行一些复杂的数据库操作时,要用到条件构造器(wrapper)。

gt、ge、le、lt、isNul、isNotNull

gt(greater than‘大于)、ge(greater equal 大于等于)、le(less equal 小于等于)、lt(less than 小于)

    @Test
    public void testWapper() {
        //创建一个Wrapper条件构造器,注意QueryWrapper是条件构造器的扩展
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        //设置条件构造器的条件,.ge是大于等于(greaterequal)
        queryWrapper.ge("age", 21);
        //调用selectList并传入条件构造器来获取列表
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

eq、ne

eq(等于)、ne(not equal 不等于)

queryWrapper.eq("name", "LiSA");

between、notBetween

queryWrapper.between("age", 24, 40);

模糊查询 like、notLike、likeLeft、likeRight

like代表只要有这个字符就查出来(%张%)

notLike代表没有这个字符

likeLeft代表以模糊的字符为结尾(%张)、likeRight代表以模糊的字符为开头(张%)

queryWrapper.likeLeft("name", "A");

OrderBy、orderByDesc、orderByAsc

orderByAsc 升序排列、orderByDesc 降序排列文章来源地址https://www.toymoban.com/news/detail-465738.html

queryWrapper.orderByAsc("id");

到了这里,关于【Mybatis-Plus】Mybatis-Plus快速入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-plus从入门到精通

    MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,在MyBatis的基础上对其进行扩展,用于简化MyBatis操作,提高开发效率。它继承了MyBatis原生的所有特性,并且添加了一些额外的功能,如自动化代码生成、通用增删改查操作、条件构造器等。MyBatis-Plus是为了满足日常开发中对简

    2024年02月15日
    浏览(44)
  • 【MyBatis-Plus】入门案例与简介

    1. 入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率。 开发方式 基于MyBatis使用MyBatisPlus 基于Spring使用MyBatisPlus 基于SpringBoot使用MyBatisPlus SpringBoot刚刚我们学习完成,它能快速构建Spring开发环境用以整合其他技术,使用起来是非常简

    2024年02月10日
    浏览(26)
  • 快速理解Mybatis-plus中BaseMapper、IService和ServiceImpl

    在使用Mybatis-plus(MP)中,我们主要会用到BaseMapper、IService和ServiceImpl,但一直以来都是照猫画虎的使用,对三者的关系一直比较迷糊。 本文将从持久层Mapper和业务层Service对三者的关系以及基本的作用进行介绍。 最后在用一个例子,从Controller层完整的走一遍流程。 ps:仔细

    2024年02月08日
    浏览(27)
  • Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!

    详细信息以及具体配置方法解析–》官方文档:https://baomidou.com/ velocity 和 freemarker 选择导入,velocity 对应vm的模板,freemarker 对应flt模板,自定义模板,需要将导入进的配置下的模板复制到自己项目的resource下 01:Mybatis-Plus 下的模板 02:自己项目 resource 新建 templates 03:maven:

    2023年04月19日
    浏览(30)
  • 手搭手入门Mybatis-Plus配置多数据源

    https://baomidou.com/ 为简化开发而生 MyBatis-Plus(opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 无侵入 :只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小 :启动即会自

    2024年02月07日
    浏览(26)
  • MetaGPT前期准备与快速上手

    大家好,MetaGPT 是基于大型语言模型(LLMs)的多智能体协作框架,GitHub star数量已经达到31.3k+。 接下来我们聊一下快速上手 一、环境搭建 python 环境最好是 3.9 1.python 环境 利用 anaconda 创建 python3.9 的虚拟环境 2. MetaGpt 下载 也可以采取以下方式 二、MetaGPT配置 1.调用 ChatGPT API

    2024年01月22日
    浏览(27)
  • 【热门框架】Mybatis-Plus入门介绍看这一篇文章就足够了

    MyBatis-Plus 是在 MyBatis 的基础上进行了封装,提供了更加便捷的开发方式,具有简化开发、提高效率等优点。以下是 MyBatis-Plus 的一些特点和用法: 通用 CRUD 操作:MyBatis-Plus 提供了通用的 CRUD 接口,可以直接调用,无需再编写 SQL 语句。例如,可以通过继承 BaseMapper 接口来实现

    2024年02月02日
    浏览(30)
  • Spring Boot入门(14):使用Mybatis-Plus轻松实现高效自定义SQL操作!

            在上几期,我们既讲了如何整合Mybatis-Plus进行数据库的增删改查,也讲解了如何使用MP的 Wrapper 构造器,但若是遇到复杂业务逻辑,如多表联查、动态拼接条件等,这些操作往往会让代码变得冗长且难以维护。但是,有了Mybatis-Plus这个优秀的框架,我们可以轻松实现

    2024年02月10日
    浏览(25)
  • Spring Boot入门(14):使用Mybatis-Plus执行自定义SQL | 超级详细,建议收藏

            在上几期,我们既讲了如何整合Mybatis-Plus进行数据库的增删改查,也讲解了如何使用MP的 Wrapper 构造器,但若是遇到复杂业务逻辑,如多表联查、动态拼接条件等,这些操作往往会让代码变得冗长且难以维护。但是,有了Mybatis-Plus这个优秀的框架,我们可以轻松实现

    2024年02月12日
    浏览(22)
  • Mybatis Plus | 快速入门

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它对 Mybatis 的基础功能进行了增强,但未做任何改变。使得我们可以可以在 Mybatis 开发的项目上直接进行升级为 Mybatis-plus,正如它对自己的定位,它能够帮助我们进

    2024年02月03日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包