当前位置: 首页 > article >正文

springBoot整合mybatisplus

目录

1、mybatisPlus的简介

2、特点:

3、开发步骤:

(1)导入依赖:

(2)编写配置文件:(application.yml)

(3)编写实体类:

(4)编写mapper文件:

(5)编写service文件:

(6)测试:

4、service层的相关方法:

5、mapper层的相关方法:

6、自定义方法:


1、mybatisPlus的简介

mybatisplus的文档地址:简介 | MyBatis-Plus

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

2、特点:

  1. 简化开发:MyBatis Plus提供了一套简化的CRUD接口,使开发人员无需编写大量的重复的SQL代码。
  2. 高度可定制:MyBatis Plus支持自定义的SQL语句和映射,开发人员可以根据自己的需求进行定制化开发。
  3. 强大的代码生成器:MyBatis Plus提供了一套强大的代码生成器,可以根据数据库表自动生成对应的实体类、Mapper接口、Service接口和Controller等代码,大大提高了开发效率。
  4. 支持多种数据库:MyBatis Plus不仅支持MySQL、Oracle等常见数据库,还支持一些非关系型数据库,如MongoDB、Redis等。

3、开发步骤:

(1)导入依赖:

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
    <groupId>com.baomidou</groupId>

    <artifactId>mybatis-plus-boot-starter</artifactId>

    <version>3.5.2</version>

</dependency>

<dependency>
    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

</dependency>

<!-- Druid依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>

    <artifactId>druid-spring-boot-starter</artifactId>

    <version>1.2.8</version>

</dependency>

(2)编写配置文件:(application.yml)

spring:
  #数据源
  datasource:
    #1.JDBC
    type: com.alibaba.druid.pool.DruidDataSource
    #驱动类
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myschool?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: root
    druid:
      #2.连接池配置
      #初始化连接池的连接数量 大小,最小,最大
      initial-size: 20
      min-idle: 20
      max-active: 100
      #配置获取连接等待超时的时间
      max-wait: 10000
      #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 30000
      # SQL 心跳指令
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: true
      test-on-return: false
mybatis-plus:
   configuration:
       #与小驼峰命名相互转换
      map-underscore-to-camel-case: true
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #日志配置
   type-aliases-package: com.yzch.domain
    #映射文件的配置
   mapper-locations: classpath:/mapper/*Mapper.xml

(3)编写实体类:

package com.yzch.domain;



import java.io.Serializable;

import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableName;

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


/**
*
* @TableName t_user
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@TableName(value ="t_user")
public class TUser implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
    *
    */

    private Integer userId;
    /**
    *
    */
    @ExcelProperty("用户名")
    private String userName;
    /**
    *
    */
    @ExcelProperty("年龄")
    private Integer userAge;
    /**
    *
    */
    @ExcelProperty("性别")
    private String userSex;
    /**
    *
    */
    @ExcelProperty("收入")
    private Integer userIncome;
    /**
    *
    */
    @ExcelProperty("省份")
    private String province;
    /**
    *
    */
    @ExcelProperty("城市")
    private String city;
    /**
    * 职业
    */
    @ExcelProperty("职业")
    private String userOccupation;
    /**
    * 是否有车,0是没有,1是有
    */
    @ExcelProperty("车")
    private Integer userIsCar;


}

(4)编写mapper文件:

package com.yzch.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yzch.domain.TUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface TUserMapper  extends BaseMapper<TUser> {

}

(5)编写service文件:

package com.yzch.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yzch.domain.TUser;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface TUserService extends IService<TUser> {

}
package com.yzch.service.impl;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yzch.domain.TUser;
import com.yzch.mapper.TUserMapper;
import com.yzch.service.TUserService;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.*;

@Service
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser> implements TUserService {
 
}

注:到目前为止,我们就搭建完成了,可以试试写代码了。

(6)测试:

    @Autowired
    private TUserService tUserService;
    @Autowired
    private TUserMapper tUserMapper;
    public void test(){
        List<TUser> tUsers = tUserService.list();
        List<TUser> tUsers1 = tUserMapper.selectList(null);
    }

4、service层的相关方法:

//新增
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)  batchSize 插入批次数
boolean saveBatch(Collection<T> entityList, int batchSize);
//新增或保存
// TableId 注解属性值存在则更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入   batchSize 插入批次数
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);

//删除
// 根据 queryWrapper 设置的条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);

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

//查询单条记录
// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

//list 
// 查询所有
List<T> list();
// 查询列表
List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

//page分页查询
// 无条件分页查询
IPage<T> page(IPage<T> page);
// 条件分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 无条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);


5、mapper层的相关方法:

@Test
void selectUsers(){
    List<User> list = userMapper.selectList(null);
    list.forEach(System.out::print);
}

@Test
void insertUser(){
    User u1=new User();
    u1.setName("郭小嘉六号");
    u1.setEmail("877224@qq.com");
    u1.setAge(88);
    int insert = userMapper.insert(u1);
    System.out.println(insert);
}

@Test
void updateUser(){
    User u1=new User();
    u1.setId("100");
    u1.setName("张三");
    u1.setEmail("877224@qq.com");
    u1.setAge(20);
    userMapper.updateById(u1);
}

//执行此方法的时候,需要在实体类的Id属性上添加@TableId(value = "user_id")注解

@Test
void deleteUserById(){
    
    QueryWrapper<User> wrapper=new QueryWrapper<User>();
    wrapper.eq("id","100");
    int delete = userMapper.delete(wrapper);
    System.out.println(delete);
}

 //批量删除
Collection<Long> idList=new ArrayList<Long>();
idList.add(1L);
idList.add(2L);
idList.add(3L);
int i = userMapper.deleteBatchIds(idList);
System.out.println(i);

6、自定义方法:

//自定义方法
@Select("SELECT t1.*,t2.`address_name` FROM USER t1\n" +
"   INNER JOIN address t2\n" +
"     ON t1.`id`=t2.`id`")
List<UserAddressVO> selectUserAddress();


http://www.kler.cn/a/310875.html

相关文章:

  • 软件测试面试大全(含答案+文档)
  • Django基础用法+Demo演示
  • 力扣104 : 二叉树最大深度
  • 知识图谱6:neo4j查询语句
  • pySpark乱码
  • ML 系列: 第 23 节 — 离散概率分布 (多项式分布)
  • 学习风格的类型
  • 内核是如何接收网络包的
  • FLUX屠榜了小红书,平台这会也真假难辨
  • PMP 报考条件是有哪些?
  • 【mysql】mysql中窗口函数lag()用法
  • HarmonyOS开发实战( Beta5.0)蓝牙实现服务端和客户端通讯详解
  • 面向对象设计的五大原则(SOLID 原则)
  • Jsp学习笔记(详解)
  • 【2025】儿童疫苗接种预约小程序(源码+文档+解答)
  • python 实现collatz sequence考拉兹序列算法
  • 如何使用下拉字段创建WordPress表单(简单方法)
  • 1.熟悉接口测试(Postman工具)
  • JavaWeb笔记整理——Redis
  • 程序员装新机
  • 【架构设计】多级缓存:应用案例与问题解决策略
  • Linux入门学习:Linux权限理解
  • PyQGIS开发 1 环境配置
  • web渗透—RCE
  • 单片机中为什么要使用5v转3.3v,不直接使用3.3V电压
  • 【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)