mybatis plus基本使用初体验01

文章介绍了MyBatis-Plus作为MyBatis的增强工具,如何简化开发和提高效率。通过创建数据库表,建立SpringBoot项目,配置相关依赖,展示了如何进行基本的CRUD操作,包括插入、删除、更新和查询。此外,还提到了通用Service的使用以及`@TableName`和`@TableId`注解在处理表名和主键时的作用。
摘要由CSDN通过智能技术生成

我们都知道MyBatis是目前比较常用的持久层框架;这个框架的使用也是很简单的,我们在使用的时候,只需要关注mapper的接口层和对应的xml文件即可。

但是MyBatis作为一个半自动框架,是需要我们自己手动编写sql语句的,对于一些单表的简单查询我们还是不大喜欢都需要自己来编写,虽然MyBatis也提供了代码生成器可以自动生成部分代码,但是依旧不够灵活。

所以MyBatis-Plus就出现了,MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus官方网站:官网

1.快速使用

1.1 创建数据库及数据库表

创建表
CREATE DATABASE `mybatis_plus`use `mybatis_plus`; 
CREATE TABLE `user` ( 
`id` bigint(20) NOT NULL COMMENT '主键ID', 
`name` varchar(30) DEFAULT NULL COMMENT '姓名', 
`age` int(11) DEFAULT NULL COMMENT '年龄', 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加测试数据
INSERT INTO user (id, name, age) VALUES 
(1, 'Jone', 18), 
(2, 'Jack', 20), 
(3, 'Tom', 28), 
(4, 'Sandy', 21),
(5, 'Billie', 24);

1.2 创建Spring Boot项目

pom.xml

引入相关依赖

 <!--mybatis-plus启动器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter-web</artifactId>
            <version>3.5.1</version>
        </dependency>

        <!--lombok用于简化实体类开发-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </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.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
主配置文件
spring:
  # 配置数据源信息
  datasource:
    # 配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    # 配置连接数据库的各个信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true
    username: root
    password: 12345678
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

1.3 基本的crud

MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接继承该类就可以直接使用了。

创建User类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;
    private String name;
    private Integer age;
}
创建UserMapper接口

这个接口需要继承BaseMapper接口,才能使用基本的crud方法。可以看到我们没有在mapper接口中编写任何方法,同时也没有编写对应的xml文件。此时,我们已经可以实现基本的crud了。

@Repository
public interface UserMapper extends BaseMapper<User> {

}
添加包扫描路径

在这里插入图片描述

1.4 开始测试

1.4.1 插入测试
@SpringBootTest
class MybatisplusApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert(){
        User user = new User();
        user.setName("picacho");
        user.setAge(18);
        int result = userMapper.insert(user);
        System.out.println("result:"+result);
        System.out.println("id:"+user.getId());
    }
}

测试效果:
在这里插入图片描述
这里,MyBatis-Plus默认使用雪花算法生成唯一主键插入到user表中。

1.4.2 删除测试
  • 通过id删除单个数据
@Test
    public void testDeleteById(){
        // 1614268020820037633, 这里删除前面插入的记录
        int result = userMapper.deleteById(1614268020820037633L);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

  • 通过id批量删除记录
    @Test
    public void testDeleteBatchIds(){
        List<Long> idsList = Arrays.asList(1L, 2L, 3L);
        int result = userMapper.deleteBatchIds(idsList);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

  • 通过map条件删除记录
    @Test
    public void testDeleteMap(){
        Map<String, Object> map = new HashMap<>();
        map.put("name", "Sandy");
        map.put("age", 21);
        int result = userMapper.deleteByMap(map);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

1.4.3 修改测试
    @Test
    public void testUpdateById(){
        User user = new User(5L, "picacho", 18);
        int result = userMapper.updateById(user);
        System.out.println("受影响的行数:" + result);
    }

测试效果:
在这里插入图片描述

1.4.4 查询测试

由于前面将测试数据都删除了,所以这里先插入一些数据后再查询。

  • 通过id查询记录
    @Test
    public void testSelectById(){
        User user = userMapper.selectById(5L);
        System.out.println(user);
    }

测试效果:
在这里插入图片描述

  • 通过多个id查询记录
    @Test
    public void testSelectBatchByIds(){
        List<Long> idsList = Arrays.asList(1614277703085600770L, 1614277704847208450L, 5L);
        List<User> userList = userMapper.selectBatchIds(idsList);
        System.out.println(userList);
    }

测试效果:
在这里插入图片描述

  • 通过map条件查询记录
    @Test
    public void testSelectByMap(){
        Map<String, Object> map = new HashMap<>();
        map.put("age", 18);
        map.put("name", "picacho0");
        List<User> userList = userMapper.selectByMap(map);
        System.out.println(userList);
    }

测试效果:
在这里插入图片描述

  • 查询所有记录
    @Test
    public void testSelect(){
        List<User> userList = userMapper.selectList(null);  // 这里没有使用条件选择器
        System.out.println(userList);
    }

测试效果:
在这里插入图片描述
可以看到,我们没有编写任何方法和sql语句,但是却能实现上面展示的各种方法,这是由于这些方法是MyBatis Plus提供的,sql语句是自动生成的。
在这里插入图片描述

2.通用Service

通用 Service CRUD 封装IService接口,进一步封装 CRUD。

采用 get 查询单行,remove 删除,list 查询集合,page 分页。前缀命名方式区分 Mapper 层避免混淆,泛型 T 为任意实体对象

2.1 IService

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

2.2 创建Service接口和实现类

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

2.3 测试基本方法

这里使用和mapper层基本一致,只是将具体实现提升到了service层。

2.3.1 测试查询记录
@Autowired
    private UserService userService;

    @Test
    public void testSelectCount(){
        long count = userService.count();
        System.out.println("查询的行数:" + count);
    }

测试效果:
在这里插入图片描述

2.3.2 测试批量插入
    @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("picacho" + i);
            user.setAge(20 + i);
            users.add(user);
        }
        // INSERT INTO t_user ( username, age ) VALUES ( ?, ? )
        userService.saveBatch(users);
    }

测试效果:
在这里插入图片描述
MyBatis-Plus的基本使用与MyBatis基本一致,只是不用我们自己去编写xml文件了,可以看到还是很好用的,同时我们也可以像使用MyBatis一样,自己编写xml文件;几乎可以说是无缝对接。

MyBatis Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上添加了许多实用的功能,可以极大地提高 MyBatis 的开发效率。 MyBatis Plus 的基本使用方法如下: 1. 引入 MyBatis Plus 的依赖 Maven 依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> ``` 2. 配置 MyBatis Plus 在 Spring Boot 的配置文件中添加 MyBatis Plus 的配置,如下: ```yaml mybatis-plus: # 实体扫描,多个用逗号分隔 typeAliasesPackage: com.example.demo.entity # mapper 扫描,多个用逗号分隔 mapperLocations: classpath:/mapper/*.xml # 配置数据库驱动、连接地址、用户名和密码 global-config: db-config: id-type: auto table-prefix: t_ ``` 3. 编写实体类 ```java @Data @AllArgsConstructor @NoArgsConstructor public class User { private Long id; private String name; private Integer age; private String email; } ``` 4. 编写 Mapper ```java @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 5. 使用 MyBatis Plus 提供的 API ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> getUserList() { return userMapper.selectList(null); } @Override public User getUserById(Long id) { return userMapper.selectById(id); } @Override public boolean addUser(User user) { return userMapper.insert(user) > 0; } @Override public boolean updateUser(User user) { return userMapper.updateById(user) > 0; } @Override public boolean deleteUser(Long id) { return userMapper.deleteById(id) > 0; } } ``` 以上就是 MyBatis Plus 的基本使用方法,通过 MyBatis Plus 提供的 API,我们可以很方便地进行 CRUD 操作。同时,MyBatis Plus 还提供了很多其他的实用功能,例如分页查询、条件查询、乐观锁、自动填充等等,可以根据具体需求进行使用
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

picacho_pkq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值