MyBatis-Plus 从入门到中级

一、简介

1、官网

http://mp.baomidou.com

2、特点

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

3、支持数据库

mysql 、mariadb 、oracle 、db2 、h2 、hsql 、sqlite 、postgresql 、sqlserver 、presto 、Gauss 、Firebird、Phoenix 、clickhouse 、Sybase ASE 、 OceanBase 、达梦数据库 、虚谷数据库 、人大金仓数据库 、南大通用数据库 。

4、框架结构

        

二、快速入门

1、创建数据库

创建数据库:mybatis_plus

创建数据表:user

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');

 2、创建SpringBoot工程

    

3、引入依赖

注意:SpringBoot版本修改为2.3.4

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

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

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

4、修改配置文件

在 application.properties 配置文件中添加 MySQL 数据库的相关配置:

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456

注意:如果定义了mysql驱动的依赖的版本为5,例如:

<version>5.1.47</version> 

则数据库连接配置为: 

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456

5、创建实体类

创建包 entity,编写实体类 User.java,并使用lombok简化实体类的编写:

package com.ape.mybatisplus.entity;

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

查看编译结果:

6、创建mapper接口

创建包 mapper,编写Mapper 接口: UserMapper.java
package com.ape.mybatisplus.mapper;

public interface UserMapper extends BaseMapper<User> {
    
}

7、启动类添加注解

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

package com.ape.mybatisplus;

@SpringBootApplication
@MapperScan("com.ape.mybatisplus.mapper")
public class MybatisPlusApplication {
    ......
}

8、测试

添加测试类,进行功能测试:

package com.ape.mybatisplus;

@SpringBootTest
class MybatisPlusApplicationTests {

	//@Autowired //默认按类型装配。是spring的注解
	@Resource //默认按名称装配,找不到与名称匹配的bean,则按照类型装配。是J2EE的注解
	private UserMapper userMapper;

	@Test
	void testSelectList() {
		//selectList()方法的参数:封装了查询条件
		//null:无任何查询条件
		List<User> users = userMapper.selectList(null);
		users.forEach(System.out::println);
	}
}

通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

补充、查看sql输出日志

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

三、通用Mapper

MP中的基本CRUD在内置的BaseMapper中都已得到了实现。

创建MapperTests测试类:

package com.atguigu.mybatisplus;

@SpringBootTest
public class MapperTests {

    @Resource
    private UserMapper userMapper;
}

1、Create

@Test
public void testInsert(){

    User user = new User();
    user.setName("Helen");
    user.setAge(18);
    //不设置email属性,则生成的动态sql中不包括email字段

    int result = userMapper.insert(user);
    System.out.println("影响的行数:" + result); //影响的行数
    System.out.println("id:" + user.getId()); //id自动回填
}

2、Retrieve

@Test
public void testSelect(){

    //按id查询
    User user = userMapper.selectById(1);
    System.out.println(user);

    //按id列表查询
    List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
    users.forEach(System.out::println);

    //按条件查询
    Map<String, Object> map = new HashMap<>();
    map.put("name", "Helen"); //注意此处是表中的列名,不是类中的属性名
    map.put("age", 18);
    List<User> users1 = userMapper.selectByMap(map);
    users1.forEach(System.out::println);
}

3、Update

@Test
public void testUpdate(){

    User user = new User();
    user.setId(1L);
    user.setAge(28);

    //注意:update时生成的sql自动是动态sql
    int result = userMapper.updateById(user);
    System.out.println("影响的行数:" + result);
}

4、Delete

@Test
public void testDelete(){

    int result = userMapper.deleteById(5);
    System.out.println("影响的行数:" + result);
}

四、通用Service

MP中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑

1、创建Service接口

创建 service 包,创建 UserService,继承 IService

package com.ape.mybatisplus.service;

public interface UserService extends IService<User> {
    
}

2、创建Service实现类

创建 impl 包,创建 UserServiceImpl,继承 ServiceImpl,实现 UserService

package com.ape.mybatisplus.service.impl;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

3、创建测试类

创建ServiceTests

package com.ape.mybatisplus;

@SpringBootTest
public class ServiceTests {

    @Resource
    private UserService userService;

}

4、测试记录数

@Test
public void testCount(){

    int count = userService.count();
    System.out.println("总记录数:" + count);
}

5、测试批量插入

@Test
public void testSaveBatch(){

    // SQL长度有限制,海量数据插入单条SQL无法实行,
    // 因此MP将批量插入放在了通用Service中实现,而不是通用Mapper
    ArrayList<User> users = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        User user = new User();
        user.setName("Helen" + i);
        user.setAge(10 + i);
        users.add(user);
    }
    userService.saveBatch(users);
}

五、自定义Mapper

当通用Mapper无法满足我们的需求时,我们可以自定义基于Mapper接口的xml文件,并在xml文件中配置SQL语句

1、接口方法定义

在UserMapper接口中定义如下方法:

List<User> selectAllByName(String name);

2、创建xml文件

在resources目录中创建mapper目录,创建UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.ape.mybatisplus.mapper.UserMapper">

   <sql id="Base_Column_List">
       id, name, age, email
   </sql>

    <select id="selectAllByName" resultType="com.ape.mybatisplus.entity.User">
        select
        <include refid="Base_Column_List"/>
        from user
        where
        name = #{name}
    </select>
</mapper>

注意:MP中mapper目录是持久层映射文件的默认目录,如果是其他目录,需要配置mapper-locations,例如:

mybatis-plus.mapper-locations=classpath:xml/*.xml

3、测试条件查询

在MapperTests中创建如下测试用例:

@Test
public void testSelectAllByName(){
    List<User> users = userMapper.selectAllByName("Helen");
    users.forEach(System.out::println);
}

 六、自定义Service

1、添加接口方法

UserService中添加接口方法:

List<User> listAllByName(String name);

2、实现接口方法

@Override
public List<User> listAllByName(String name) {
    // baseMapper对象指向当前业务的mapper对象
    return baseMapper.selectAllByName("Helen");
}

4、测试

ServiceTests中添加测试方法:

@Test
public void testListAllByName(){
    List<User> users = userService.listAllByName("Helen");
    users.forEach(System.out::println);
}

MyBatis-Plus(简称MP)是一个基于MyBatis框架的增强工具,旨在简化基于MyBatis的开发。它提供了许多便捷的功能和特性,帮助开发者更高效地操作数据库。 要从入门到精通MyBatis-Plus,可以按照以下步骤进行学习: 1. 熟悉MyBatis:首先,你需要了解并熟悉MyBatis框架的基本概念和用法。MyBatis是一个优秀的持久层框架,通过使用SQL和存储过程,可以将数据库操作映射为Java方法。 2. 引入MyBatis-Plus:在你的项目中引入MyBatis-Plus的依赖。你可以在Maven或Gradle中添加相应的依赖项,以集成MyBatis-Plus。 3. 配置MyBatis-Plus:在你的项目配置文件中,配置MyBatis-Plus的相关参数,如数据源、实体类的包扫描路径等。这些配置项可以根据你的具体需求进行调整。 4. 实体类映射:使用注解或XML配置方式,将实体类与数据库表进行映射。 MyBatis-Plus提供了`@TableName`注解和XML配置文件两种方式来实现映射。 5. 基础CRUD操作:通过继承`BaseMapper`接口,你可以直接使用MyBatis-Plus提供的方法进行基础的CRUD操作,如插入、更新、删除和查询等。同时,MyBatis-Plus还提供了一些方便的查询构造器,例如`Wrapper`和`QueryWrapper`。 6. 分页查询:MyBatis-Plus提供了分页查询的支持。你可以使用`Page`类来进行分页查询,并通过`PageHelper`来实现分页参数的设置。 7. 自动填充:MyBatis-Plus支持自动填充功能,可以自动填充创时间、更新时间等字段。你可以通过实现`MetaObjectHandler`接口来自定义填充逻辑。 8. 逻辑删除:MyBatis-Plus还提供了逻辑删除功能,可以通过注解或全局配置的方式实现逻辑删除操作。 9. 性能优化:MyBatis-Plus也提供了一些性能优化的功能,如批量插入、批量更新、懒加载等。 10. 动态SQL:MyBatis-Plus支持动态SQL的构和执行。你可以使用`@SqlParser`注解来解析动态SQL,并通过`@SqlStatement`注解来执行动态SQL。 以上是从入门到精通MyBatis-Plus的基本步骤,希望对你有所帮助。祝学习愉快!如果有更多问题,欢迎继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值