MyBatis-Plus【启程篇】

一、初始MyBatis-Plus

官方网址:https://baomidou.com/
在这里插入图片描述
官方对MyBatis-Plus的解释: MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
总结: MP可以看作是MyBatis的好大哥。黑风寨的二把手,李云龙的和尚。魂斗罗的2P。有了MP,MyBatis可以不再写xxxmapper.xml便可以实现对数据库的持久化操作。可谓是便捷省事。

二、如何使用

在这里都是参考官网的教程,如有遗漏可移步官网参考,不喜勿喷,礼貌学习。

1、环境准备

  1. jdk1.8
  2. SpringBoot/Spring【官方推荐SpringBoot】
  3. Maven3.6.6
  4. Eclipse

2、新建数据库

既然是持久层矿建MyBatis的增强工具,那么必然需要一个数据库来进行相关的操作。

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL AUTO_INCREMENT 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)
);

为了方便测试,所以往数据库中新加一些数据,方便测试。

DELETE FROM user;

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

3、新建SpringBoot项目,并前期工作

  1. SpringBoot
  2. MySQL/Oracel
  3. MyBtais-PLUS
  4. Lombok
	<dependencies>
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.5.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>
		</dependency>
	</dependencies>

连接数据库配置文件以及SQL日志

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/mybatis_plus?characterEncoding=UTF-8&useSSL=true&useUnicode=true&serverTimezone=UTC
    username: root
    password: 123456
    
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

新建几个包:mapper、servcie、test、pojo…具体的项目目录结构如下:
在这里插入图片描述

4、编写各层代码

pojo层对数据表的实体进行封装

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class User {
	private Long id;
	private String name;
	private Integer age;
	private String email;

	public User(String name, Integer age, String email) {
		super();
		this.name = name;
		this.age = age;
		this.email = email;
	}
}

1️⃣通用Mapper

mapper层使用MP的通用Mapper进行操作,需要注意的是: 使用MP的通用Mapper必须要继承BaseMapper的这个类,这个类是有泛型的,反省对应着你的数据库的POJO类。

@Repository("userMapper")
public interface UserMapper extends BaseMapper<User>{
}

2️⃣通用Service

MP的通用Service是MP所提供的一种对原始mapper层的CRUD的封装调用
使用:

  1. 想要使用MyBatis-Plus的通用Service,首先我们需要写一个Service,然后继承MyBatis-Plus的通用Service(IService)。
  2. 然后再写一个ServiceImpl并且继承MyBatis-Plus的ServiceImpl<M extends BaseMapper, T>,当然还要实现我们写的Service。

1、

public interface IUserService extends IService<User>{
}

2、

@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper , User> implements IUserService{
}

5、在启动类上加@MapperScann注解扫描mapper的包

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

@SpringBootApplication
// 扫描Mapper接口所在的包
@MapperScan("com.wei.mapper")
public class DhcMpProjectApplication {
	public static void main(String[] args) {
		SpringApplication.run(DhcMpProjectApplication.class, args);
	}
}

6、编写测试类进行测试

package com.wei;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.w3c.dom.html.HTMLBaseElement;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wei.mapper.UserMapper;
import com.wei.pojo.User;

@SpringBootTest
public class MyTest {
	// 注入Mapper的Bean
	@Autowired
	private UserMapper userMapper;
	
	/**
	 * 新增数据 参数是一个实体对象
	 */
	@Test
	public void test2() {
		// 新增用户信息 INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
		User user = new User("joker",23,"joker@qq.com");
		int insert = userMapper.insert(user);
		System.out.println("成功插入"+insert+"条数据");
		// 在MyBatis里默认是使用雪花算法创建id 不会默认使用数据库里面的自增主键
		System.out.println("id:"+user.getId());
	}
	
	/**
	 * 通过id删除数据
	 */
	@Test
	public void test3() {
		// 根据id删除 DELETE FROM user WHERE id=?
		int deleteById = userMapper.deleteById(1529380500983910401L); 
		System.out.println("成功删除"+deleteById);
	}
	
	/**
	 * 通过map条件集合删除
	 */
	@Test
	public void test4() {
		// 根据条件删除数据 可以删除多个 DELETE FROM user WHERE name = ? AND age = ?
		Map<String, Object> map = new HashMap<>();
		map.put("name", "张三");
		map.put("age", 23);
		int deleteByMap = userMapper.deleteByMap(map);
		System.out.println("删除了"+deleteByMap);
	}
	
	/**
	 * 批量删除
	 */
	@Test
	public void test5() {
		// 批量删除 DELETE FROM user WHERE id IN ( ? , ? )
		Collection<Long> ids = new ArrayList<>();
		ids.add(5L);
		ids.add(2L);
		int deleteBatchIds = userMapper.deleteBatchIds(ids);
		System.out.println("删除了"+deleteBatchIds+"条数据");
	}
	
	/**
	 * 修改方法 参数为一个实体对象
	 */
	@Test
	public void test6() {
		// 根据id修改数据 UPDATE user SET name=?, age=?, email=? WHERE id=?
		User user  = new User(1L,"koppy",45,"koppy@163.com");
		int updateById = userMapper.updateById(user);
		System.out.println("修改了"+updateById+"条数据");
	}
	
	/**
	 * 查询方法 参数是一个条件warpper
	 */
	@Test
	public void test7() {
		List<Long> list = Arrays.asList(1L,2L,3L);
		List<User> selectBatchIds = userMapper.selectBatchIds(list);
		selectBatchIds.forEach(System.out::println);
	}
	
	/**
	 * 查询方法 参数是一个条件map
	 */
	@Test
	public void test8() {
		Map<String, Object> maps  =new HashMap<>();
		maps.put("name", "koppy");
		maps.put("age", 45);
		List<User> selectByMap = userMapper.selectByMap(maps);
		selectByMap.forEach(System.out::println);
	}
	
	/**
	 * 查询方法 参数是一个条件warpper
	 */
	@Test
	public void test9() {
		Map<String, Object> maps  =new HashMap<>();
		maps.put("name", "koppy");
		maps.put("age", 45);

		List<User> selectByMap = userMapper.selectList(null);
		selectByMap.forEach(System.out::println);
	}
}

至此,MP的入门就到此为止了!

三、 总结:

  1. 对于MP的使用,可以帮助我们达到快速开发的目的,但是正所谓任何事物都有其双面性,我们往往只关注其便捷,有利的一面,却忽略了他的前期工作,在学此篇之前,我们必须要熟练掌握JDBC的所有操作以及数据库的相关知识。
  2. 在对MP的使用上,如果采用SpringBoot进行操作,必须要在起动类上加上MapperScan的注解
  3. 使用通用Mapper需要继承BaseMapper<T Entity >
  4. 使用通用Service 需要在接口上继承IService<T Entity>的接口,同时还要再实现类上继承ServiceImpl<M extends BaseMapper<T>, T>接口,同时实现 IService
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@WAT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值