SSM框架学习记录-MyBatisPlus_day01

MybatisPlus是MyBatis的扩展,用于简化开发。它提供了DQL和DML编程控制,如条件查询、主键策略、逻辑删除和乐观锁等功能。通过注解和配置,开发者能更高效地管理数据库操作,例如使用@TableId设置主键生成策略,@TableLogic实现逻辑删除,以及@Version支持乐观锁。

1.入门案例与简介

MybatisPlus是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率

未使用MybatisPlus时,在dao接口中的代码如下:

@Mapper
public interface UserDao {
        @Select("select * from user where id=#{id}")
        public User getById(Long id);
}

使用MybatisPlus后,代码如下(依旧可以和MyBatis一样写SQL):

@Mapper
public interface UserDao extends BaseMapper<User> {
}

注意:

  • dao接口要想被容器扫描到,有两种解决方案:
    • dao接口上添加@Mapper注解,并且确保dao处在引导类所在包或其子包中(缺点是需要在每个dao接口中添加注解)
    • 在引导类上添加@MapperScan注解,指定包下的所有dao接口都能被扫描到

代码参考MybatisPlus_01_quickstart


2.标准数据层开发

代码参考MybatisPlus_01_quickstart中的Mybatisplus01QuickstartApplicationTests.java

注意:

  • 使用分页的前需要先配置拦截器,具体代码见MpConfig.java

在这里插入图片描述

3.DQL编程控制

MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。在查询所有和分页查询的时候,都有看到Wrapper类,该类就是用来构建查询条件的

代码参考MybatisPlus_02_dql中的Mybatisplus02DqlApplicationTests.java


条件查询
  • 三种使用方式
  • 并且与或者关系
  • null判定

查询投影
  • 查询指定字段
  • 聚合和分组查询

查询条件
  • 等值查询
  • 范围查询
  • 模糊查询
  • 排序查询

映射匹配兼容性
  • 当表的列名和模型类的属性名不一致,会导致数据封装不到模型对象,MyBatisPlus提供了注解@TableField,使用该注解可以实现模型类属性名和表的列名之间的映射关系:
public class User {
    @TableField(value = "pwd")  // pwd是表中字段名称
    private String password;
	...
}
  • 当模型类中多了数据库表不存在的字段,会导致生成的SQL语句中在select的时候查询了数据库不存在的字段,解决方案是使用@TableField的属性exist
public class User {
    // 设置该字段是否在数据库表中存在,如果设置为false则不存在,生成sql语句查询的时候,就不会再查询该字段
	...
    @TableField(exist = false)
    private Integer online;
}
  • 查询表中数据时,为了避免把敏感数据返回给前端,需要限制哪些字段默认不要进行查询,解决方案是使用@TableField的属性select
public class User {
	// 该属性设置默认是否需要查询该字段的值,true(默认值)表示默认查询该字段,false表示默认不查询该字段
    @TableField(value = "pwd",select = false)
    private String password;
	... 
}
  • 表的名称和模型类的名称不一致,导致查询失败,解决方案是使用@TableName来设置表与模型类之间的对应关系:
@TableName("tbl_user")
public class User {
	...
}

4.DML编程控制

代码参考MybatisPlus_03_dml中的Mybatisplus03DmlApplicationTests.java


id生成策略控制

新增成功后,主键ID是很长串的内容,更想要的是按数据库表字段进行自增长,在解决这个问题之前,先来分析下ID该如何选择哪种生成策略:

  • 日志:自增(如1,2,3,4,……)
  • 购物订单:特殊规则(如FQ23948AK3843)
  • 外卖单:关联地区日期等信息(如10 04 20200314 34 91)
  • 关系表:可省略id

在主键上添加@TableId即可设置主键生成策略(也可以在配置文件中设置全局配置)


多记录操作

使用deleteBatchIdsselectBatchIds方法


逻辑删除

对于删除操作业务问题有两种方式:

  • 物理删除:业务数据从数据库中丢弃,执行的是delete操作
  • 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的是update操作

MyBatisPlus进行逻辑删除的步骤如下:

  • 数据库表添加deleted
  • 实体类添加属性:
public class User {
	...
    // 逻辑删除字段,标记当前记录是否被删除
    // value为正常数据的值,delval为删除数据的值
    @TableLogic(value = "0" ,delval = "1")
    private Integer deleted;
}
  • 运行删除方法:
// 底层运行的是update tbl_user set deleted=1 where id=? and deleted=0
void testDelete(){
	userDao.deleteById(1L);
}
// 如果运行查询操作,底层运行的是select * from tbl_user where deleted=0(即也会自动添加一个未被删除的条件)

注意:

  • 如果要查询所有数据(包括逻辑删的数据),需要自己在dao层中写SQL语句
  • 如果每个表都要有逻辑删除字段,可以在配置文件中设置全局配置

乐观锁

MyBatisPlus实现乐观锁的步骤如下:

  • 数据库表添加列(如version)
  • 在模型类中添加对应的属性:
public class User {
   ...
   @Version
   private Integer version;
}
  • 添加乐观锁的拦截器:具体见MpConfig.java
  • 执行更新操作

参考


https://www.bilibili.com/video/BV1Fi4y1S7ix?p=105-118

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练与应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化与训练,到执行分类及结果优化的完整流程,并介绍了精度评价与通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者与实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程与关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优与结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置与结果后处理环节,充分利用ENVI Modeler进行自动化建模与参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值