MyBatis-Plus学习笔记(尚硅谷)

目录

一、简介 

1、框架结构 

二、入门案例 

1、创建数据库及表

 2、测试BaseMapper自带的方法

 3、测试自定义功能

4、通用Service 


一、简介 

 官网:简介 | MyBatis-Plus

mybatis-plus在mybatis基础只做增强不做改变

1、框架结构 

MyBatis-Plus学习笔记(尚硅谷)_第1张图片

二、入门案例 

1、创建数据库及表

创建表

CREATE TABLE USER( 
id BIGINT(20) NOT NULL COMMENT '主键ID', 
NAME VARCHAR(30) DEFAULT NULL COMMENT '姓名', 
age INT(11) DEFAULT NULL COMMENT '年龄', 
email VARCHAR(50) DEFAULT NULL COMMENT '邮箱', 
PRIMARY KEY(id) 
)ENGINE=INNODB DEFAULT CHARSET=utf8; 

添加数据

INSERT INTO USER(id,NAME,age,email) VALUES
(1,'Jone',18,'[email protected]'),
(2,'Jack',20,'[email protected]'),
(3,'Tom',28,'[email protected]'),
(4,'Sandy',21,'[email protected]'),
(5,'Billie',24,'[email protected]');

导入依赖

        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        

        
        
            org.projectlombok
            lombok
            true
        

         
        
            mysql
            mysql-connector-java
            runtime
        

连接数据库

spring:
  # 配置数据源信息
  datasource:
    # 配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    # 配置连接数据库的各个信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&userSSL=false
    username: root
    password: 

注意:

1、驱动类 driver-class-name

spring boot 2.0 (内置jdbc5驱动),驱动类使用:

driver-class-name:com.mysql.jdbc.Driver

spring boot 2.1及以上 (内置jdbc8驱动),驱动类使用:

driver-class-name:com.mysql.cj.jdbc.Driver

否则运行测试用例时会出现WARN信息

2、连接地址url

MySQL5.7版本的url:

jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&userSSL=false

MySQL8.0版本的url:

jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&characterEncoding=utf-8&userSSL=false

否则运行测试用例会抛出异常

 2、测试BaseMapper自带的方法

可以在配置文件中添加下面代码,结果就会显示数据库语句

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

package com.springboot.mybatisplus;

import com.springboot.mybatisplus.mapper.UserMapper;
import com.springboot.mybatisplus.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.jws.soap.SOAPBinding;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SpringBootTest
public class MyBatisPlusTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectList(){
        //通过条件构造器查询一个list集合,若没有条件,则可以设置null为参数
        List list=userMapper.selectList(null);
        list.forEach(System.out::println);
    }

    @Test
    public void testInsert(){
        //测试增加一条用户信息
        //INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
        User user=new User();
        user.setName("张三");
        user.setAge(18);
        user.setEmail("[email protected]");
        int result=userMapper.insert(user);
        System.out.println("result:"+result);
        System.out.println("id:"+user.getId());
    }

    @Test
    public void testDelete(){
        //DELETE FROM user WHERE id=?
//        int result = userMapper.deleteById(0);
//        System.out.println(result);

        //DELETE FROM user WHERE name = ? AND age = ?
//        Map map=new HashMap<>();
//        map.put("name","张三");
//        map.put("age",23);
//        int result=userMapper.deleteByMap(map);
//        System.out.println(result);

        //通过多个id实现批量删除
        //DELETE FROM user WHERE id IN ( ? , ? , ? )
        List list=Arrays.asList(1L,2L,3L);
        int result=userMapper.deleteBatchIds(list);
        System.out.println(result);
    }

    @Test
    public void testUpdate(){
        //UPDATE user SET name=?, email=? WHERE id=?
        User user=new User();
        user.setId(4L);
        user.setName("李四");
        user.setEmail("[email protected]");
        int result=userMapper.updateById(user);
        System.out.println(result);
    }

    @Test
    public void testSelect(){
        //SELECT id,name,age,email FROM user WHERE id=?
//        User user=userMapper.selectById(1L);
//        System.out.println(user);

        //SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )
//        List list=Arrays.asList(1L,2L,3L);
//        List users=userMapper.selectBatchIds(list);
//        users.forEach(System.out::println);

        //SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
//        Map map=new HashMap<>();
//        map.put("name","Jack");
//        map.put("age",20);
//        List users=userMapper.selectByMap(map);
//        users.forEach(System.out::println);

        //SELECT id,name,age,email FROM user
        List users=userMapper.selectList(null);
        users.forEach(System.out::println);
    }
}

 3、测试自定义功能

添加模板步骤

mybatis-mapper







MyBatis-Plus学习笔记(尚硅谷)_第2张图片

 mybatis-config


    


    

userMapper类

@Repository //持久层
public interface UserMapper extends BaseMapper {

    /**
     * 根据id查询用户信息为map集合
     * @param id
     * @return
     */
    Map selectMapById(Long id);
}

 UserMapper.xml





    

测试

    @Test
    public void testSelect(){

        //select id,name,age,email from user where id=?
        Map map=userMapper.selectMapById(1L);
        System.out.println(map);
    }

4、通用Service 

官方说明:

  • 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
  • 泛型 T 为任意实体对象
  • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
  • 对象 Wrapper 为 条件构造器

 说明:泛型为要操作的实体表所对应的Java实体类

核心方法:

1、Save 新增

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection entityList);
// 插入(批量)
boolean saveBatch(Collection entityList, int batchSize);

参数说明

类型 参数名 描述
T entity 实体对象
Collection entityList 实体对象集合
int batchSize 插入批次数量

 2、SaveOrUpdate 新增或修改

// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList, int batchSize);

参数说明

类型 参数名 描述
T entity 实体对象
Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper
Collection entityList 实体对象集合
int batchSize 插入批次数量

 3、Remove 删除

// 根据 entity 条件,删除记录
boolean remove(Wrapper queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection idList);

参数说明

类型 参数名 描述
Wrapper queryWrapper 实体包装类 QueryWrapper
Serializable id 主键 ID
Map columnMap 表字段 map 对象
Collection idList 主键 ID 列表

4、Update 修改

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList, int batchSize);

参数说明

类型 参数名 描述
Wrapper updateWrapper 实体对象封装操作类 UpdateWrapper
T entity 实体对象
Collection entityList 实体对象集合
int batchSize 更新批次数量

案例测试

UserService接口

public interface UserService extends IService {

}

 UserServiceImpl

@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
}

MybatisPlusServiceTest测试类

//查询操作
@Test
    public void testGetCount(){
        //查询总记录数
        //SELECT COUNT( * ) FROM user
        long count=userService.count();
        System.out.println("总记录数:"+count);
    }

//插入操作
    @Test
    public void testInsertMore(){
        //批量添加
        //INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? )
        List list=new ArrayList<>();
        for (int i = 1; i <=10 ; i++) {
            User user=new User();
            user.setName("ybc"+i);
            user.setAge(20+i);
            list.add(user);
        }
        boolean b = userService.saveBatch(list);
        System.out.println(b);

    }

报错:java.sql.BatchUpdateException: Duplicate entry '0' for key 'user.PRIMARY'

解决:给主键设置自增

你可能感兴趣的:(mybatis,学习)