mybatis-plus 使用总结

Java开发组件

1.IDEA
2.JDK
3.Git
4.Maven安装配置
5.Mysql
6.Mybatis
7.Mybatis-plus
8.Nacos
9.Openfeign
10.Gateway
11.xxl-job-admin

12.Skywalking
13.Sentinel
14.Arthas

15.Redis
16.Mongodb
17.ES
18.StarRocks
19.Datax

-----------------mybatis-plus 使用总结-----------------

1.mybatis-plus 简介
简单配置,及可单表实现增删改查,分页插件
多表查询还是可以使用mybaits

2.pom.xml添加依赖项:

com.baomidou
mybatis-plus-boot-starter
3.5.3.1

3.定义接口继承mybatisplus: public interface UserMapper extends BaseMapper {}

类名驼峰转下划线作为表名
名为id的字段作为主键,自动增长
变量名驼峰转下划线作为表的字段名

MybatisPlus中比较常用的几个注解如下:当定义的表名和数据库表面不一致时:
@TableName:用来指定表名
@TableId:用来指定表中的主键字段信息
@TableField:用来指定表中的普通字段信息

@TableName("tb_user")
public class User {

 @TableId(value = IdType.AUTO) //默认是ASSIGN_ID
private Long id;

@TableField("username")
private String username;

@TableField("'order'")
private Integer order;

@TableField("is_married")
private Boolean isMarried;

@TableField(exist = false)
private String address;

IdType枚举:
AUTO:数据库自增长
INPUT:通过set方法自行输入
ASSIGN_ID:分配 ID,接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIdentifierGenerator雪花算法
使用@TableField的常见场景:
成员变量名与数据库字段名不一致
成员变量名以is开头,且是布尔值
成员变量名与数据库关键字冲突
成员变量不是数据库字段

MybatisPlus是如何获取实现CRUD的数据库表信息的?
默认以类名驼峰转下划线作为表名
默认把名为id的字段作为主键
默认把变量名驼峰转下划线作为表的字段名
MybatisPlus的常用注解有哪些?
@TableName:指定表名称及全局配置
@TableId:指定id字段及相关配置
@TableField:指定普通字段及相关配置
IdType的常见类型有哪些?
AUTO、ASSIGN_ID、INPUT
使用@TableField的常见场景是?
成员变量名与数据库字段名不一致
成员变量名以is开头,且是布尔值
成员变量名与数据库关键字冲突
成员变量不是数据库字段

4.测试mybatisplus方法
public class UserMapperTest {

@Autowired
private UserMapper userMapper;

@Test
void testInsert(){
    User user =new User();
    user.setId(5l);
    user.setUsername("denny");

    userMapper.insert(user);
}
  1. mp支持的常见配置,
    MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置。例如:

mybatis-plus:
type-aliases-package: com.itheima.mp.domain.po # 别名扫描包
mapper-locations: "classpath:/mapper/**/.xml" # Mapper.xml文件地址,默认值
configuration:
map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
cache-enabled: false # 是否开启二级缓存
global-config:
db-config:
id-type: assign_id # id为雪花算法生成
update-strategy: not_null # 更新策略:只更新非空字段

----------------------------------------------------mybatis plus -----------------------------------------------------------------------

mybatis-plus使用总结

application.yaml

spring:
  datasource:
    url: jdbc:mysql://10.10.*.*:3306/db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
logging:
  level:
    com.itheima: debug
  pattern:
    dateformat: HH:mm:ss
server:
  port: 8080

mybatis-plus:
  global-config:
    db-config:
      id-type: assign_id
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath*:/mapper/**/*.xml #mapper.xml文件地址,默认地址resource/mapper/UserMapper.xml
knife4j:
  enable: true
  openapi:
    title: 用户管理接口文档
    description: "用户管理接口文档"
    email: zhanghuyi@itcast.cn
    concat: 虎哥
    url: https://www.itcast.cn
    version: v1.0.0
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          com.example.mpdemo.controller

0.pom.xml
```

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.1</version>
    </dependency>
    <!--mysql-->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!--lombok-->
    <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>
    <!--swagger-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-spring-ui</artifactId>
        <version>3.0.3</version>
    </dependency>

		
1.BaseMpper
2.IService

3.
@Api(tags="用户管理接口")
@RequestMapping("/users")
@RestController
@RequiredArgsConstructor
public class UserController{

private final IUserService userService;

@ApiOperation("新增用户接口")
@PostMapping
public void saveUser(@RequestBody UserFormDto userDto){

 User user=BeanUtil.copyProperties(userDto,User.class);
 userService.save(user);
}

}


swigger:
localhost:8080/doc.html

3.复杂条件的查询接口,lambdaQuery,lambdaUpdate  .update()

4.IService 批量新增
serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true  mysql 3.1.13开始
将批量提交的sql 瓶装为一个sql一次执行,效率高10

向mysql插入10万条数据:
普通for循环一个个插入,最慢2100秒
IService批量插入 26秒,批量提交,逐条执行

开启rewriteBatchedStatements=true参数 6秒,批量提交,一次执行

5 扩展功能:
 代码生成器,mybatisPLUS 插件--other-->config database,code generator
 
 静态工具 在service层使用mybatis-plus 提供的强大功能
 .Db.list()
    void testDbMethod(){
       // List<Long> idList= Arrays.asList(1l,2l,5l);
        Db.count(User.class);

    }
	
6.逻辑删除: 
mybatis-plus:
  global-config:
    db-config:
      id-type: assign_id
      logic-delete-field: deleted #逻辑删除的字段名
      logic-delete-value: 1
      logic-not-delete-value: 0

7.enum处理器:status:1正常,2冻结,
@enumvalue
@jsonvalue


8.json处理器,处理数据库字段json数据类型的字段

9.分页插件及其他插件
分页插件拦截器
MybaticConfig,page

10.分页通用实体
    pageDto 统一查询条件
    voDto 统一返回结果 

 pageQuery 查询条件封装
 pageDTO 分页结果封装

lamdaQuery

11 分页代码封装
pageQuery


------12.关于Mybatis Plus中BaseMapper和IService区别------------

1.BaseMapper接口
BaseMapper是Mybatis Plus提供的基础Mapper接口。它提供了常见的CRUD操作方法,如插入、修改、删除和查询等。BaseMapper是一个通用接口,可以适用于各种实体类的操作。这减少了开发人员需要编写的代码量,提高了开发效率。


2.IService接口
IService是Mybatis Plus提供的服务接口。它提供了一些高级的CRUD操作方法,如批量插入、批量删除和分页查询等。IService接口是一个抽象的接口,可以根据实际需要进行实现。通常与BaseMapper接口结合使用,提供更加灵活和高效的数据操作。


3.BaseMapper和IService的区别
BaseMapper接口提供了基本的CRUD操作方法,而IService接口则提供了更高级的CRUD操作方法,如批量插入、批量删除和分页查询等。IService接口还提供了一些其他的功能,如缓存管理、排序和字段自动填充等。BaseMapper接口和IService接口的使用方式和实现也有所不同。


4.最佳实践
建议在使用Mybatis Plus时,首先使用BaseMapper接口进行基本的CRUD操作。如果需要更高级的操作,可以根据具体需求进行IService接口的实现。在实现IService接口时,可以根据具体需求进行方法的定义和实现,提供更加灵活和高效的数据操作和其他实用功能。

总之,Mybatis Plus提供了BaseMapper和IService接口用于CRUD操作。BaseMapper提供了基本的CRUD操作方法,而IService提供了更高级的操作和其他实用功能。BaseMapper和IService的使用和实现取决于具体需求和要求。
posted @ 2023-11-22 23:03  大树2  阅读(92)  评论(0编辑  收藏  举报