MybatisPlus(MP)

1.MybatisPlus(MP)介绍

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

2.MP的特点

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作。
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错。
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题。
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作。
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )。
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用。
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询。
分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库。
内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询。
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作。

3.ORM思想

3.1ORM说明

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的ORM产品,而有些程序员更倾向于创建自己的ORM工具。
总结:以面向对象的方式操作数据库

3.2ORM特点

1.对象与数据库中表 一一映射关系。
2.对象中的属性与数据库中的字段 一一映射。
3.以面向对象的方式操作数据库。由框架动态生成Sql语句,实现了跨数据库的操作。

4.MP入门案例

4.1导入jar包

<!--spring整合mybatis-plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>

4.2编辑POJO对象

在这里插入图片描述

4.3编辑Mapper接口

说明:MP将常用的CURD操作进行封装,以后用户需要使用,只需要继承公共的业务接口即可。
编辑接口类,继承,必须泛型
![在这里插入图片描述](https://img-blog.csdnimg.cn/eaa3bad31a1c45dc8c3295fb4e294012.png在这里插入图片描述
编辑配置文件
在这里插入图片描述

4.4入门案例

4.4.1插入数据

/**
 * 插入数据
 * */
@Test
void contextLoads() {
    User user = new User();
    user.setUsername("admin888")
            .setPassword("123456")
            .setEmail("123@qq.com")
            .setPhone("15833331111")
            .setStatus(true)
            .setCreated(new Date())
            .setUpdated(user.getCreated());
    int rows = userMapper.insert(user);
    System.out.println(rows);
}

4.4.2根据id查询数据

/**
 * 案例一:根据id查询
 * */
@Test
public void test01(){
    int id = 1;
    User user = userMapper.selectById(id);
    System.out.println(user);
}

4.4.3 根据其他属性进行查询,username=“admin110”

条件构造器,用来封装where的条件

条件构造器,会根据对象中不为null的元素动态拼接Sql
QueryWrapper<User> queryWrapper = new QueryWrapper<>(temp);

 /**
     * 案例二:根据其他属性进行查询
     * 根据username="admin110" 进行查询
     * 组件:条件构造器,用来封装where的条件
     * 方式一:利用对象封装数据
     * */
    @Test
    public void test02(){
        User temp = new User();
        temp.setUsername("admin110"); // =号操作
        //条件构造器,会根据对象中不为null的元素动态拼接Sql
        QueryWrapper<User> queryWrapper = new QueryWrapper<>(temp);
        //如果可以保证查询结果为一个
        User user = userMapper.selectOne(queryWrapper);
        System.out.println(user);
//        //不能保证查询结果为一个,使用List集合接
//        List<User> userlist = userMapper.selectList(null);
    }

4.4.3 根据id查询大于5的数据

转义字符方式

转义字符: > gt; < lt = eq
>= ge <=le !=ne

/**
 * 案例三:查询id大于5的数据
 * 转义字符: > gt;     < lt       = eq
 *          >= ge      <=le      !=ne
 */
@Test
public void test03(){
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.gt("id",5);    //id>5
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

4.4.4查询username 包含admin的数据,并且按照id降序

知识点:
1.like "%admin%" 左右都有%
2.likeleft "%admin" 左边有%
3.likeright "admin%" 右边有%

/**
 * 查询username 包含admin的数据,并且按照id降序
 * 知识点:
 *      1.like  "%admin%"  左右都有%
 *      2.likeleft  "%admin"    左边有%
 *      3.likeright  "admin%"   右边有%
 */
@Test
public void test04(){
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.like("id", "admin").orderByDesc("id");
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

4.4.5查询id=1,2,11,12的数据

方式一:利用条件构造器查询

定义数组用包装类

/**
 * 查询id=1,2,11,12
 *
 * */
@Test
public void test05(){
    Integer[] ids = {1,2,11,12};
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.in("id", ids);
    //方式一:利用条件构造器查询
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}
方式二:利用API查询
@Test
public void test05(){
    Integer[] ids = {1,2,11,12};
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.in("id", ids);
    //方式二:利用API查询
    List list = Arrays.asList(ids);
    List<User> userList1 = userMapper.selectBatchIds(list);
    System.out.println(userList1);
}

4.4.5动态查询数据,利用电话/邮箱查询数据

API:eq(boolean true拼接/false不拼接,column,Object val)
StringUtils.hasLength()

/**
 * 需求:动态查询数据,利用电话/邮箱查询数据
 *      eq(boolean true拼接/false不拼接,column,Object val)
 *      StringUtils.hasLength()
 * */
@Test
public void test06(){
String phone = null;
String email = "";
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.hasLength(phone),"phone", phone)
        .eq(StringUtils.hasLength(email),"email", email);
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

4.4.6只查询主键信息

selectObjs获取主键信息关联查询使用

/**
 * 条件只查询主键信息
 * API:selectObjs
 * */
@Test
public void test07(){
    List<Object> ids = userMapper.selectObjs(null);//获取主键信息
    System.out.println(ids);
}

4.4.7根据id修改数据

/**
 * 需求:用户修改操作
 * 1.根据id修改数据
 * */
@Test
public void test08(){
    User user = new User();
    user.setId(22).setUsername("admin111").setPhone("110111");
    userMapper.updateById(user);
    System.out.println("更新成功");
}

4.4.8password=123456的phone改为10029,email改为100129@qq.com

/**
 * 要求:password=123456的phone改为10029,email改为100129@qq.com
 *      1.entity:主要目的封装set条件
 *      2.wrapper:封装修改条件的条件构造器
 * */
@Test
public void test09(){
    User user = new User();
    user.setPhone("10029").setEmail("100129@qq.com");
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.eq("password", "123456");
    userMapper.update(user,updateWrapper);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值