将一个Mybatis技术升级成MybatisPlus

一、引入依赖

引入MybatisPlus依赖,将Mybatis依赖注释,因为MybatisPlus依赖覆盖Mybatis依赖

引用官方的一句话:

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

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

适当还能添加一些工具包依赖

<!-- Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。  -->
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.25</version>
</dependency>

<!-- 代码生成器 -->
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.5</version>
</dependency>

二、配置application.yml

将原本的mybatis的配置注释,替换新配置

注意:type-aliases-package里面是项目实体类的路径,对应mapper的操作对象

#mybatis:
#  #mapper配置文件
#  mapper-locations: classpath:mapper/*.xml
#  type-aliases-package: com.sky.entity
#  configuration:
#    #开启驼峰命名
#    map-underscore-to-camel-case: true

mybatis-plus:
  type-aliases-package: com.sky.entity
  global-config:
    db-config:
      id-type: auto #配置实体类中id默认自增
      logic-delete-field: deleted # 配置逻辑删除字段
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
 

mybatis-plus: mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,当前这个是默认值。

可以看到默认值是classpath*:/mapper/**/*.xml,也就是说我们只要把mapper.xml文件放置这个目录下就一定会被加载。

 在之前数据库的配置项里面加上&rewriteBatchedStatements=true 实现mp的批处理

  datasource:
#    &rewriteBatchedStatements=true 批处理,在下面的url里面添加
    url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    driver-class-name: com.mysql.cj.jdbc.Driver

 三、在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

@SpringBootApplication
@EnableTransactionManagement //开启注解方式的事务管理
@Slf4j
@EnableCaching//开启缓存注解功能
@EnableScheduling//开启任务调度
@MapperScan("com.sky.mapper")
public class QupaiServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(QupaiServerApplication.class, args);
        log.info("server started");
    }

}

 三、在需要使用mp的mapper接口上继承BaseMapper<xxx>

上面xxx表示该接口操作对应的实体类

@Mapper
public interface OrderMapper extends BaseMapper<Orders> {}

 四、CRUD接口

先说service和serviceImpl应该继承什么

//service
public interface OrderService extends IService<Orders> {}


//serviceImpl
@Service
@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper,Orders> implements OrderService {}

extends IService<Orders>里面的Orders指的是对应操作的对象

extends ServiceImpl<OrderMapper,Orders>里面的指的是该对象对应的mapper和该对象

 五、有需要的话还有必要的注解加在对象的类里面

MybatisPlus就是根据PO实体的信息来推断出表的信息,从而生成SQL的。默认情况下:

  • MybatisPlus会把PO实体的类名驼峰转下划线作为表名

  • MybatisPlus会把PO实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型

  • MybatisPlus会把名为id的字段作为主键

 但很多情况下,默认的实现与实际场景不符,因此MybatisPlus提供了一些注解便于我们声明表信息

@TableName

  • 描述:表名注解,标识实体类对应的表

  • 使用位置:实体类

@TableName("user")
public class User {
    private Long id;
    private String name;
}

TableName注解除了指定表名以外,还可以指定很多其它属性:

属性

类型

必须指定

默认值

描述

value

String

""

表名

schema

String

""

schema

keepGlobalPrefix

boolean

false

是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时)

resultMap

String

""

xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定)

autoResultMap

boolean

false

是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入)

excludeProperty

St

ring[]

{}

需要排除的属性名 @since 3.3.1

@TableId

  • 描述:主键注解,标识实体类中的主键字段

  • 使用位置:实体类的主键字段

@TableName("user")
public class User {
    @TableId
    private Long id;
    private String name;
}

TableId注解支持两个属性:

属性

类型

必须指定

默认值

描述

value

String

""

表名

type

Enum

IdType.NONE

指定主键类型

IdType支持的类型有:

描述

AUTO

数据库 ID 自增

NONE

无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

INPUT

insert 前自行 set 主键值

ASSIGN_ID

分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

ASSIGN_UUID

分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

ID_WORKER

分布式全局唯一 ID 长整型类型(please use ASSIGN_ID)

UUID

32 位 UUID 字符串(please use ASSIGN_UUID)

ID_WORKER_STR

分布式全局唯一 ID 字符串类型(please use ASSIGN_ID)

这里比较常见的有三种:

  • AUTO:利用数据库的id自增长

  • INPUT:手动生成id

  • ASSIGN_ID:雪花算法生成Long类型的全局唯一id,这是默认的ID策略

@TableField 

描述:普通字段注解

@TableName("user")
public class User {
    @TableId
    private Long id;
    private String name;
    private Integer age;
    @TableField("isMarried")
    private Boolean isMarried;
    @TableField("concat")
    private String concat;
}

一般情况下我们并不需要给字段添加@TableField注解,一些特殊情况除外:

  • 成员变量名与数据库字段名不一致

  • 成员变量是以isXXX命名,按照JavaBean的规范,MybatisPlus识别字段时会把is去除,这就导致与数据库不符。

  • 成员变量名与数据库一致,但是与数据库的关键字冲突。使用@TableField注解给字段名添加转义字符:``

支持的其它属性如下:

属性

类型

必填

默认值

描述

value

String

""

数据库字段名

exist

boolean

true

是否为数据库表字段

condition

String

""

字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s},参考(opens new window)

update

String

""

字段 update set 部分注入,例如:当在version字段上注解update="%s+1" 表示更新时会 set version=version+1 (该属性优先级高于 el 属性)

insertStrategy

Enum

FieldStrategy.DEFAULT

举例:NOT_NULL insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)

updateStrategy

Enum

FieldStrategy.DEFAULT

举例:IGNORED update table_a set column=#{columnProperty}

whereStrategy

Enum

FieldStrategy.DEFAULT

举例:NOT_EMPTY where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>

fill

Enum

FieldFill.DEFAULT

字段自动填充策略

select

boolean

true

是否进行 select 查询

keepGlobalFormat

boolean

false

是否保持使用全局的 format 进行处理

jdbcType

JdbcType

JdbcType.UNDEFINED

JDBC 类型 (该默认值不代表会按照该值生效)

typeHandler

TypeHander

类型处理器 (该默认值不代表会按照该值生效)

numericScale

String

""

指定小数点后保留的位数

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis Plus 是基于 MyBatis 的增强工具,提供了更加便捷的开发方式。如果你想将项目中的 MyBatis 升级到 MyBatis Plus,可以按照以下步骤进行操作: 1. 添加 MyBatis Plus 依赖:在项目的 `pom.xml`(如果是 Maven 项目)或者 `build.gradle`(如果是 Gradle 项目)文件中添加 MyBatis Plus 的依赖。 2. 修改 MyBatis 的配置文件:将原先的 MyBatis 配置文件中的相关配置修改为 MyBatis Plus 的配置方式。具体的修改内容可以参考 MyBatis Plus 的官方文档。 3. 重新生代码:如果你使用了 MyBatis Generator 来自动生代码,需要重新运行生器来生基于 MyBatis Plus 的代码。这样可以确保生的实体类、Mapper 接口等与 MyBatis Plus 的使用方式保持一致。 4. 修改业务代码:对于已经编写好的业务代码,你可能需要进行一些修改以适应 MyBatis Plus 的使用方式。例如,替换原先使用的 MyBatis 接口和注解为 MyBatis Plus 提供的对应接口和注解。 5. 测试和调试:在修改完代码后,建议进行全面的测试和调试,确保升级后的项目正常运行,并且功能正常。 6. 学习和使用新特性:MyBatis Plus 提供了很多便捷的特性和功能,可以节省开发时间和提高开发效率。你可以花些时间学习和使用这些新特性,以充分发挥 MyBatis Plus 的优势。 需要注意的是,升级 MyBatisMyBatis Plus 并不会改变原有的 MyBatis 逻辑和使用方式,而是在其基础上提供更多的便利功能。因此,升级过程中需要仔细检查和修改相关代码,确保没有遗漏或者冲突的地方。另外,建议先在一个小规模的项目上进行升级测试,再应用到大型项目中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乄bluefox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值