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;

浙公网安备 33010602011771号