栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot整合Mybatis-Plus,linux和windows架构区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot整合Mybatis-Plus,linux和windows架构区别

  • Mybatis-Plus的条件构造器

    • 1、测试方法
  • 2、条件构造器的常用方法

  • 自定义SQL

    • 1、编写Mapper.xml文件
  • 2、在UserMapper接口中添加自定义方法

  • 3、在UserService接口中添加自定义方法

  • 4、在UserServicelmpl类中重写方法

  • 5、测试方法

MyBatis-Plus介绍


官网地址:https://mybatis.plus

1、简介

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

2、特性
  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

3、支持数据库
  • mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver

  • 达梦数据库 、 虚谷数据库 、 人大金仓数据库

表结构设计


1、表结构

设计了一张user用户表,表结构如下。

2、建表

执行以下SQL语句建表

DROP TABLE IF EXISTS user;

CREATE TABLE user (

id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘ID’,

name varchar(32) DEFAULT NULL COMMENT ‘姓名’,

age int(11) DEFAULT NULL COMMENT ‘年龄’,

course varchar(32) DEFAULT NULL COMMENT ‘课程’,

fraction int(11) DEFAULT NULL COMMENT ‘分数’,

PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;

3、添加初始数据

执行以下SQL语句添加初始数据。

INSERT INTO user VALUES (‘1’, ‘张三’, ‘20’, ‘java’, ‘89’);

INSERT INTO user VALUES (‘2’, ‘李四’, ‘19’, ‘C’, ‘64’);

INSERT INTO user VALUES (‘3’, ‘王五’, ‘18’, ‘HTML’, ‘90’);

INSERT INTO user VALUES (‘4’, ‘小熊’, ‘20’, ‘Javascript’, ‘76’);

INSERT INTO user VALUES (‘5’, ‘小马’, ‘17’, ‘C++’, ‘77’);

INSERT INTO user VALUES (‘6’, ‘小李’, ‘18’, ‘JAVA’, ‘59’);

INSERT INTO user VALUES (‘7’, ‘小王’, ‘18’, ‘C’, ‘60’);

INSERT INTO user VALUES (‘8’, ‘小张’, ‘18’, ‘JAVA’, ‘58’);

INSERT INTO user VALUES (‘9’, ‘小白’, ‘23’, ‘python’, ‘61’);

搭建项目


1、项目结构

2、新建Springboot项目

pom.xml文件中需要引入以下依赖。

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-devtools

runtime

true

mysql

mysql-connector-java

runtime

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

com.baomidou

mybatis-plus-boot-starter

3.1.0

3、在 application.properties配置文件中添加相关的配置信息

#链接数据库配置

spring.datasource.url=jdbc:mysql://localhost:3306/mp?serverTimezone=GMT%2B8

spring.datasource.username=root

spring.datasource.password=root

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#mybatis-plus相关配置

#xml扫描,多个目录用逗号或者分号隔离(告诉Mapper 对应的xml文件位置)

mybatis-plus.mapper-locations= classpath:mapper

@TableId(type = IdType.AUTO)

private Integer id;

//姓名

private String name;

//年龄

private Integer age;

//科目

private String course;

//分数

private Integer fraction;

}

2、编写Mapper接口

UserMapper.java接口

public interface UserMapper extends baseMapper {

}

注: Mapper接口需要继承baseMapper接口,该接口中封装了一些CRUD方法,所以继承该接口后,就

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

不需要编写mapper.xml 文件,即可获得CRUD功能。

3、编写业务层接口

UserService.java接口

public interface UserService extends IService {

}

注: UserService接口需要继承IService接口,该接口进一步封装了CRUD采用get 查询单行 、remove 删除、 list 查询集合、 page 分页、 前缀命名方式区分 Mapper 层避免混淆。

4、编写业务层实现类

UserServiceImpl.java类

@Service

@Transactional //事务

public class UserServiceImpl extends ServiceImpl implements UserService {

}

5、编写测试Controller

UserController.java类

@RestController

@RequestMapping("/user")

public class UserController {

@Autowired

private UserService userService;

@RequestMapping("/findById")

public User findById(Integer id){

User user = userService.getById(id);

return user;

}

@RequestMapping("/findAll")

public List findAll(){

List userList = userService.list();

return userList;

}

@RequestMapping("/save")

public String save(){

User user = new User();

user.setName(“小三”);

user.setAge(18);

user.setCourse(“C++”);

user.setFraction(88);

userService.save(user);

return “新增一条数据成功!”;

}

}

运行项目后,浏览器上测试:

根据id查询用户

查询全部数据

查询方法为IService接口中封装的,常用方法如下。

Save方法

// 插入一条记录(选择字段,策略插入)

boolean save(T entity);

// 插入(批量)

boolean saveBatch(Collection entityList);

// 插入(批量)

boolean saveBatch(Collection entityList, int batchSize);

参数说明

| 类型 | 参数名 | 描述 |

| — | — | — |

| T | entity | 实体对象 |

| Collection | entityList | 实体对象集合 |

| int | batchSize | 插入批次数量 |

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 | 插入批次数量 |

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列表 |

Update方法

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset

boolean update(Wrapper updateWrapper);

// 根据 whereEntity 条件,更新记录

boolean update(T entity, Wrapper updateWrapper);

// 根据 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 | 更新批次数量 |

Get方法

// 根据 ID 查询

T getById(Serializable id);

// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last(“LIMIT 1”)

T getOne(Wrapper queryWrapper);

// 根据 Wrapper,查询一条记录

T getOne(Wrapper queryWrapper, boolean throwEx);

// 根据 Wrapper,查询一条记录

Map getMap(Wrapper queryWrapper);

// 根据 Wrapper,查询一条记录

V getObj(Wrapper queryWrapper, Function mapper);

参数说明

| 类型 | 参数名 | 描述 |

| — | — | — |

| Serializable | id | 主键ID |

| Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |

| boolean | throwEx | 有多个 result 是否抛出异常 |

| T | entity | 实体对象 |

| Function | mapper | 转换函数 |

List方法

// 查询所有

List list();

// 查询列表

List list(Wrapper queryWrapper);

// 查询(根据ID 批量查询)

Collection listByIds(Collection idList);

// 查询(根据 columnMap 条件)

Collection listByMap(Map columnMap);

// 查询所有列表

List> listMaps();

// 查询列表

List> listMaps(Wrapper queryWrapper);

// 查询全部记录

List listObjs();

// 查询全部记录

List listObjs(Function mapper);

// 根据 Wrapper 条件,查询全部记录

List listObjs(Wrapper queryWrapper);

// 根据 Wrapper 条件,查询全部记录

List listObjs(Wrapper queryWrapper, Function mapper);

参数说明

| 类型 | 参数名 | 描述 |

| — | — | — |

| Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |

| Collection | idList | 主键ID列表 |

| Map | columnMap | 表字段 map 对象 |

| Function | mapper | 转换函数 |

Page方法

// 无条件翻页查询

IPage page(IPage page);

// 翻页查询

IPage page(IPage page, Wrapper queryWrapper);

// 无条件翻页查询

IPage> pageMaps(IPage page);

// 翻页查询

IPage> pageMaps(IPage page, Wrapper queryWrapper);

参数说明

| 类型 | 参数名 | 描述 |

| — | — | — |

| IPage | page | 翻页对象 |

| Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |

分页


1、创建分页配置类

MybatisPlusConfig.java类

@Configuration

public class MybatisPlusConfig {

@Bean

public PaginationInterceptor paginationInterceptor() {

return new PaginationInterceptor();

}

}

2、编写分页测试方法

在上方的测试Controller中添加分页测试方法,代码如下

/**

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678446.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号