您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Mybatis-plus学习记录

1.新建spring-boot项目引入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>Vueadmin-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Vueadmin-api</name>
    <description>Vueadmin-api</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2. 新建application.yml引入数据库配置

spring:
 datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   username: root
   password: root
   url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
mybatis-plus:
 configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.新建实体类

package com.example.vueadminapi.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
   private Long id;
   private int age;
   private String name;
   private String email;
}

4. 新建实体类对应Mapper接口(继承BaseMapper<实体类>)

package com.example.vueadminapi.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.vueadminapi.pojo.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {

}

5. 项目启动类 添加扫描注解

package com.example.vueadminapi;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.vueadminapi.mapper")
public class VueadminApiApplication {

   public static void main(String[] args) {
       SpringApplication.run(VueadminApiApplication.class, args);
   }

}

6. 测试

    @Autowired
    private UserMapper userMapper;
    @Test
    void contextLoads() {
        List<User> users = userMapper.selectList(null);
        for (User user : users) {
            System.out.println(user);
        }
    }

测试方法集合

  1. 测试insert方法
 @Test
    public  void TestInsert(){
        User user = new User();
        user.setAge(18);
        user.setEmail("gek821330.com");
        user.setName("张三");
        int result = userMapper.insert(user);
        System.out.println("result:"+result);
        System.out.println("id:"+user.getId());
    }
  1. 测试delete方法
//   根据id删除
       int result = userMapper.deleteById(1505752384428L);
        System.out.println("result:"+result);

使用deleteByMap(多条件删除)

//  使用deleteByMap
        HashMap<String, Object> map = new HashMap<>();
        map.put("name","张三2");
        map.put("age",18);
        int result = userMapper.deleteByMap(map);
        System.out.println("result:"+result);

在这里插入图片描述

使用deleteBatchIds(相当于在调用where in )

 List<Long> list = Arrays.asList(2L, 3L);
        int result = userMapper.deleteBatchIds(list);
        System.out.println("result:"+result);

在这里插入图片描述

  1. 测试Update 方法

updateById

    @Test
    public  void  TestUpdate(){
        User user = new User();
        user.setId(1L);
        user.setName("李四");
        user.setAge(20);
        int result = userMapper.updateById(user);
        System.out.println("result:"+result);
    }

在这里插入图片描述

  1. 测试select 方法

selectById方法

   @Test
    public void TestSelect(){
        User user = userMapper.selectById(1L);
        System.out.println(user);
    }

在这里插入图片描述

selectByMap(多条件查询)

        HashMap<String, Object> map = new HashMap<>();
        map.put("name","李四");
        map.put("age",20);
        List<User> users = userMapper.selectByMap(map);
        users.forEach(System.out::println);

在这里插入图片描述

selectBatchIds(where id in )

   List<Long> ids = Arrays.asList(1L, 2L);
        List<User> users = userMapper.selectBatchIds(ids);
        users.forEach(System.out::println);

在这里插入图片描述

selectList

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

在这里插入图片描述

自定义方法

  1. 在userMapper 接口中定义方法名
@Repository
public interface UserMapper extends BaseMapper<User> {
    /**
     * 根据id查询为map集合
     * @param id
     * @return
     */
    Map<String,Object> selectMapById(Long id);
}

  1. 在resources下新建mapper 在UserMapper.xml中编写sql
<?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.example.vueadminapi.mapper.UserMapper">
    <select id="selectMapById" resultType="map">
        select name,age,email from user where id=#{id}
    </select>
</mapper>
  1. 测试
    @Test
    public void TestSelf(){
        Map<String, Object> map = userMapper.selectMapById(2L);
        System.out.println(map);
    }

在这里插入图片描述

测试Service

1. Service基本配置

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

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.vueadminapi.pojo.User;

public interface UserService extends IService<User> {
}

  1. 写一个UserServiceImpl 实现自己创建的UserService 然后继承mybatis-plus自带的ServiceImpl
package com.example.vueadminapi.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.vueadminapi.mapper.UserMapper;
import com.example.vueadminapi.pojo.User;
import com.example.vueadminapi.service.UserService;

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

}

2.测试Sevice的方法

count方法

   @Autowired
    private UserService userService;
    @Test
    public  void TestService(){
        long count = userService.count();
        System.out.println(count);
    }

在这里插入图片描述

批量添加 saveBatch

    @Test
    public  void TestService(){
        //count
//        long count = userService.count();
//        System.out.println(count);
        //批量添加
        List<User> list=new ArrayList<>();
        for (int i = 3; i < 10; i++) {
            User user = new User();
            user.setName("gek"+i);
            user.setAge(20+i);
            list.add(user);
        }
        boolean b = userService.saveBatch(list);
        System.out.println(b);
    }

在这里插入图片描述

注解使用

当表名和实体类的名字不一致的时候

  1. @TableName
  • 可以在实体类上面加上TableName注解(“表名”)

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_user")
public class User {
    private Long id;
    private int age;
    private String name;
    private String email;
}

在这里插入图片描述

第二种方法:配置项添加全局的前缀,下面的示列表示所有实体类都会加上t_这个前缀

#设置mybatis-plus的全局配置
  global-config:
    db-config:
      table-prefix: t_
  1. @TableId(将属性对应的字段指定为主键),因为mybatis-plus默认是以id为主键,若表不是id为主键的话,会报错

@Data
@AllArgsConstructor
@NoArgsConstructor
//@TableName("t_user")
public class User {
    @TableId
    private Long uid;
    private int age;
    private String name;
    private String email;
}

@TableId(value) value属性是当实体类注解字段名称和数据库主键字段名称不一致的时候,可以设置

package com.example.vueadminapi.pojo;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
//@TableName("t_user")
public class User {
    @TableId(value = "uid")
    private Long id;
    private int age;
    private String name;
    private String email;
}

@TableId(Type) type属性是主键生成策略

    /**
     * 数据库ID自增
     * <p>该类型请确保数据库设置了 ID自增 否则无效</p>
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
     */
    NONE(1),
    /**
     * 用户输入ID
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 分配ID (主键类型为number或string),
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
     *
     * @since 3.3.0
     */
    ASSIGN_ID(3),
    /**
     * 分配UUID (主键类型为 string)
     * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
     */
    ASSIGN_UUID(4);
//表示id自增
    @TableId(value = "uid",type = IdType.AUTO)

通过全局配置主键的生成策略

#设置mybatis-plus的全局配置
  global-config:
    db-config:
      table-prefix: t_
	#设置主键生成策略
      id-type: auto

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进