MyBatis-Plus | 快速入门(上)

简介: MyBatis-Plus | 快速入门(上)

0a1e9010baa649b797c82c6ca106ff9f.png



一、快速入门


1.1 入门案例


入门案例制作步骤:

(1)新建模块并导入mybatis-plus起步依赖


734282c91bef4cdba02c75a847b94bc0.png

<!--        mybatis-plus起步依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
<!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--        druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.10</version>
        </dependency>

(2)编写application.yml文件

server:
  port: 8080
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/mybatis-plus?useSSL=false
    username: root
    password: 123456
# mybatis-plus日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


(3)根据数据库表字段新建实体类


7ba72fed47f540f78462ad16d5de3606.png



c6cd3c29829741f3b8fcdf1c270f8f8d.png

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private String password;
    private Integer age;
    private String tel;
}

(4)编写mapper接口并测试查看运行结果

@Mapper
public interface UserMapper extends BaseMapper<User> {
// 没有写任何接口方法
}
@SpringBootTest
class Demo1ApplicationTests {
    @Autowired
    private UserMapper mapper;
    @Test
    public void contextLoads() {
//        测试查询全部
        List<User> users = mapper.selectByMap(null);
        System.out.println(users);
    }
}

0f390a9eda3a43e2b1ebe4104aefe8c3.png


1.2 简介


Mybatis-Plus(简称MP)是基于Mybatis框架基础上开发的增强型工具,旨在简化开发,提高效率。mybatis-plus官网mybatis-plus


MybatisPlus特性
无侵入:只做增强不做改变
强大的CRUD操作:内置通用Mapper,少量配置即可实现单表CRUD操作
支持Lambda:编写查询条件无需担心字段写错
内置分页查询
支持主键自动生成


二、标准CRUD制作

2.1 CRUD操作

@SpringBootTest
class MybatisPlus1ApplicationTests {
    @Autowired
    private UserMapper mapper;
    @Test
    public void testUserMapper() {
//        查询所有
        List<User> users = mapper.selectByMap(null);
        System.out.println(users);
    }
    /**
     * 测试添加操作
     * 对于自增的字段:如果没有设置,则自动生成一个值;
     * 对于非自增字段:如果可以为空,不生成;如果不可以为空,报错。
     */
    @Test
    public void insert() {
        User user = new User();
        user.setId(3L);
        user.setName("sesssok");
        user.setPassword("1333");
        user.setAge(3);
        int i = mapper.insert(user);
        System.out.println(i);
    }
    /**
     * 测试删除操作
     */
    @Test
    public void delete() {
//        批量删除--
//        (Collection接口下有set、list、queue三个接口)根据id删除
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        mapper.deleteBatchIds(list);
//        根据map对象删除-根据某个字段删除
        Map map = new HashMap();
        map.put("age", 23);
        mapper.deleteByMap(map);
    }
    /**
     * 测试修改操作
     */
    @Test
    public void update() {
        User user = new User();
        user.setId(3L);
        user.setAge(19);
//        修改所有
//        mapper.update();
//        根据id修改
        int i = mapper.updateById(user);
        System.out.println(i);
    }
}


下面是核心接口,附上源码和注释:

public interface BaseMapper<T> extends Mapper<T> {
//    插入一条记录
    int insert(T entity);
//    根据id删除
    int deleteById(Serializable id);
//    将map中的元素设置为删除的条件,多个条件之间是AND关系
    int deleteByMap(@Param("cm") Map<String, Object> columnMap);
//    将实体对象进行封装,包装为删除条件(类似上面)
    int delete(@Param("ew") Wrapper<T> queryWrapper);
//    根据id集合批量删除
    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
//    根据id更新
    int updateById(@Param("et") T entity);
//    根据条件更新,Wrapper是条件
    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
//    根据id查询
    T selectById(Serializable id);
//    根据id(ids)批量查询
    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
//    根据键值查询
    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
//    根据实体条件查询一个,如果查到多个,就会报错
    T selectOne(@Param("ew") Wrapper<T> queryWrapper);
//    条件查询总记录数
    Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
//    条件查询集合
    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
//    条件查询map集合
    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
//    分页查询
    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}

2.2 分页查询

配置分页插件:

@Configuration
public class MpConfig {
    /**
     * 设置Mybatis-Plus可以使用分页功能的插件
     * @return
     */
    @Bean
    public MybatisPlusInterceptor interceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}


调用分页方法并查看测试结果:

    /**
     * 测试分页
     */
    @Test
    public void testPage() {
        IPage page = new Page();
        page.setCurrent(1); // 设置当前页码
        page.setSize(5); // 设置每页显示数
        mapper.selectPage(page, null);
        System.out.println("当前页码-->" + page.getCurrent() + ",每页显示数-->" + page.getSize());
        System.out.println("总页数-->" + page.getPages() + ",总记录数-->" + page.getTotal() + ",数据-->" + page.getRecords());
    }


a3fa8f72ee4647818bcf93b1c41530fc.png


三、DQL


3.1 3种查询条件格式


查询条件格式 使用QueryWrappe泛型类 使用QueryWrapper泛型类+lambda 使用LambdaQueryWrapper泛型类


(1)新建一个模块

f23154448d9f4222a0973822fd0c0cb5.png

(2)导入MyBatis-Plus相关依赖

    <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.10</version>
        </dependency>


(3)使用方法

@SpringBootTest
class Demo1ApplicationTests {
    @Autowired
    private UserMapper mapper;
    @Test
    public void testSelectCon1() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.lt("age",20); // 查询age<20的记录
        System.out.println(mapper.selectList(wrapper));
    }
    @Test
    public void testSelectCon2() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.lambda().lt(User::getAge,20);
        System.out.println(mapper.selectList(wrapper));
    }
    @Test
    public void testSelectCon() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.lt(User::getAge,20);
        System.out.println(mapper.selectList(wrapper));
    }
}


并列关系 或者关系
默认(.and()) .or()


    @Test
    public void testSelectCon4() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.lt(User::getAge, 18).or();
        wrapper.gt(User::getAge, 20); // age<18 || age>20
        // 链式写法1--or
        wrapper.lt(User::getAge, 18).or()
                .gt(User::getAge, 20); // age<18 || age>20
        // 链式写法2--and
        wrapper.gt(User::getAge, 10).lt(User::getAge, 18); // age>18 && age<18
        System.out.println(mapper.selectList(wrapper));
    }


(4)在yml配置文件设置关闭mybati-plus和SpringBoot的banner图案

426a6a07df41460b85cb741b887280c4.png

  # spring--banner: off
  main:
    banner-mode: off
# mybatis-plus--banner: false
mybatis-plus:
  global-config:
    banner: false


(5)新建logback.xml文件清除日志


112c5b944a544b67b7ee8647a18b8412.png


1ae80e8b40aa46cb95129a02d8b2f53c.png

  # 标准日志输出
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


上面的输出不利于我们调试代码,因此在yml文件中添加如上代码,使控制台输出相关日志。


33eed577969044878a9affcbd8d84de8.png


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
SQL Java 数据库连接
MyBatis快速入门以及环境搭建和CRUD的实现
MyBatis快速入门以及环境搭建和CRUD的实现
30 0
|
7月前
|
SQL Java 关系型数据库
Mybatis知识【Mybatis快速入门】第二章
Mybatis知识【Mybatis快速入门】第二章
|
5天前
|
SQL Java 数据库连接
【MyBatisPlus】通俗易懂 快速入门 详细教程
【MyBatisPlus】通俗易懂 快速入门 详细教程
89 0
|
5天前
|
SQL Java 数据库连接
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
58 0
|
9月前
|
Java 关系型数据库 MySQL
MyBatis(简化数据库操作的持久层框架)--快速入门[上]
MyBatis(简化数据库操作的持久层框架)--快速入门[上]
66 0
|
10月前
|
Java 关系型数据库 MySQL
SpringBoot使用Mybatis 快速入门
SpringBoot使用Mybatis 快速入门
76 0
SpringBoot使用Mybatis 快速入门
|
5天前
|
XML 算法 Java
MyBatis-Plus 实战教程一 快速入门(二)
MyBatis-Plus 实战教程一 快速入门
52 0
|
5天前
|
Java 关系型数据库 数据库连接
MyBatis-Plus 实战教程一 快速入门(一)
MyBatis-Plus 实战教程一 快速入门
57 0
|
7月前
|
XML SQL 算法
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门(下)
3.常见注解 在刚刚的入门案例中,我们仅仅引入了依赖,继承了BaseMapper就能使用MybatisPlus,非常简单。但是问题来了: MybatisPlus如何知道我们要查询的是哪张表?表中有哪些字段呢?
78 0
|
7月前
|
SQL Java 数据库连接
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门(上)
大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。
54 0