mybatisplus

mybatisplus如何实现获取信息

通过扫描实体类并通过反射获取实体类信息作为数据库表信息

  约定:类名、变量名驼峰转下划线作为表名

      id字段默认为主键

常用注解@TableName,@TableId,@TableField

@TableField使用场景:成员变量为boolean并且名称为is开头,转化时会去掉is

比如:private boolean isMarried ====> married

   关键字冲突:@TableField("`order`") order 

   数据库中不存在的字段:@TableField(exist=false)

 

常用配置

mybatis-plus:
 type-aliases-package: com.sky.entity # 包扫描 其实除了这个大部分默认的就行 mapper-locations: classpath:mapper/*.xml # 指定xmlmapper的位置 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印日志 map-underscore-to-camel-case: true # 开启下划线和驼峰的映射 global-config: db-config: id-type: auto # id类型:自增/雪花/自填 update-strategy: not_null # 更新策略:只更新非空字段

常用条件构造器:QueryWrapper UpdateWrapper

LambdaQueryWrapper:与querywrapper相比字段不可以直接写,需要通过反射例如:User类里的id 原本是写"id" 使用后为User::getId

↑优点:避免了硬编码

 

自定义sql:where条件用mp写,自己定义sql语句中剩下的部分

需在mapper方法参数中用param注解声明wrapper变量名称,必须是ew

@Param("ew")LambdaQueryWrapper<User>wrapper

样例:service---》mapper----》mapper.xml

Integer age=1;
LambdaQueryWrapper<Admin>wrapper=new         
LambdaQueryWrapper<Admin>().in(Admin::getId); adminMapper.updateAgeById(wrapper,age);
 void updateAgeById(@Param("ew") LambdaQueryWrapper<Admin> wrapper,@Param("age") Integer age);
    <update id="updateSexById">
        UPDATE admin SET age=age-#{age} ${ew.customSqlSegment}
    </update>

 

 

如何使用Iservice

1.在service接口类中继承IService

2.在serviceImpl中继承ServiceImpl<BaseMapper,BaseEntity>,实现service

 

Iservice中的lambdaQuery为链式函数,正常条件参数内包含三个参数(条件,column,参数)如果条件不成立,则不会执行这一点。(比如多条件查询,有些值为空的时候,我们默认就不使用这个方法)

最终可以用one/list/page/count()收束结果,非常方便

lambdaUpdate 方法同上,收束的时候用update()

 

如何加快批处理:在配置文件的MySQL后缀添加rewriteBatchedStatements=true,这样使用mp的时候insertBatch不是一条一条添加,而是foreach一次性添加

 

Db静态工具:场景:使用上述Iservice后,可能会存在多个service互相调用出现循环依赖,为了避免这个问题,我们推出了Db,Db包含service中的几乎所有方法,同时需要在第一个方法内注明你使用的实体类型

注意,这个是新版本mp才可以使用的

 

逻辑删除:无需改变方法调用的方式,在底层自动修改CRUD,我们需要在yml文件中加以配置。使用下面样例之后,MP的方法中delete会修改为update deleted=1,select会自带上delete=0

# 注意 这种方法会影响表的查询效率

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted  # 逻辑删除字段,类型可以为integer或者boolean
      logic-delete-value: 1  # 逻辑删除后更新该值为1
      logic-not-delete-value: 0  # 未删除的值为0

 

枚举处理器

mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;

@Getter

public enum UserStatus {
    NORMAL(1,"正常"),
    DISABLE(2,"禁用"),
    ;
    @EnumValue //枚举处理器,实现转换
   @JsonValue //标记为响应Json的值
private final Integer value; private final String desc; UserStatus(Integer value, String desc) { this.value = value; this.desc = desc; } }

Json处理器:java中没有json类型的数据,为此我们可以使用json处理器,接收处理json数据并提取出其中的内容

//User
@TableName(value = "user",autoResultMap = true)

@TableField(typeHandler = JacksonTypeHandler.class)
    private UserInfo info;

 

posted @ 2024-04-16 20:12  天启A  阅读(91)  评论(0)    收藏  举报