Mybatis如何使用
导读:本文共6856字符,通常情况下阅读需要23分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:希望大家仔细阅读,能够学有所成!一、背景MyBatis-Plus 是由一个叫苞米豆的一个组织来开发的,组织负责人叫青苗,目前组织中大概有31人。MyBatis-Plus简称 MP是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus 可以不需要写SQL语句就能快速完成单表的操作,MyBatis-Plus的愿景就是成为 M... ...
目录
(为您整理了一些要点),点击可以直达。希望大家仔细阅读,能够学有所成!
一、背景
MyBatis-Plus 是由一个叫苞米豆的一个组织来开发的,组织负责人叫青苗,目前组织中大概有31人。MyBatis-Plus简称 MP是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus 可以不需要写SQL语句就能快速完成单表的操作,MyBatis-Plus的愿景就是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
二、配置
1、pom文件配置
<properties>
<java.version>1.8</java.version>
<mybatisplus.version>3.3.1</mybatisplus.version>
</properties>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!--https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
2、yml文件配置
#mybatis配置
mybatis-plus:映射文件的位置
mapper-locations:classpath:mapper/*.xml
global-config:数据库相关配置
db-config:
主键类型AUTO:"数据库ID自增",INPUT:"用户输入ID",ID_WORKER:"全局唯一ID(数字类型唯一ID)",UUID:"全局唯一IDUUID";
id-type:AUTO
字段策略IGNORED:"忽略判断",NOT_NULL:"非NULL判断"),NOT_EMPTY:"非空判断"
field-strategy:NOT_NULL
驼峰下划线转换
column-underline:true
logic-delete-value:-1
logic-not-delete-value:0
banner:false原生配置
configuration:
map-underscore-to-camel-case:true
cache-enabled:false
call-setters-on-nulls:true
jdbc-type-for-null:'null'配置包别名
type-aliases-package:com.snowriver.it.springdemo.entity
3、SQL准备
CREATETABLEt_snow_operate_log
(id
bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'ID',batch_no
varchar(32)DEFAULTNULLCOMMENT'批次号',operator
varchar(255)NOTNULLDEFAULT''COMMENT'操作人',operate_time
timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'操作时间',operate_type
tinyint(4)NOTNULLDEFAULT'-1'COMMENT'操作类型1-导入2-修改',operate_detail
varchar(255)NOTNULLDEFAULT''COMMENT'操作明细(导入-附件名称修改-报单id)',attachment_url
varchar(255)NOTNULLDEFAULT''COMMENT'附件地址(操作类型为修改该字段为空)',upload_status
tinyint(4)NOTNULLDEFAULT'-1'COMMENT'上传状态0-上传失败1-上传成功2-处理中',
PRIMARYKEY(id
)USINGBTREE
)ENGINE=InnoDBAUTO_INCREMENT=2245DEFAULTCHARSET=utf8ROW_FORMAT=COMPACTCOMMENT='操作日志记录表';
三、具体代码(增删改查)
controller类:
@Slf4j
@RestController
@RequestMapping("/operate")
publicclassOperateLogController{@Resource
privateISnowOperateLogServiceoperateLogService;@PostMapping("/insert")
publicResultinsert(@RequestBodyOperateRecordReqrequest){
SnowOperateLogoperateLog=newSnowOperateLog();
operateLog.setOperator(request.getOperator());
operateLog.setOperateTime(request.getOperateTimeStart());
operateLog.setOperateType(Integer.valueOf(request.getOperateType()));
operateLogService.save(operateLog);
returnResult.success();
}@PostMapping("/insert-batch")
publicResultinsertBatch(@RequestBodyOperateRecordReqrequest){
LocalDateTimedateTime=LocalDateTime.now();
List<SnowOperateLog>list=newArrayList<>();
for(inti=0;i<10;i++){
SnowOperateLogoperateLog=newSnowOperateLog();
operateLog.setBatchNo(String.valueOf(System.currentTimeMillis()));
operateLog.setOperator("liudehua"+i);
operateLog.setOperateType(1);
operateLog.setOperateTime(dateTime);
list.add(operateLog);
}
operateLogService.saveBatch(list);
returnResult.success();
}@GetMapping("/delete")
publicResult<List<SnowOperateLog>>deleteById(@RequestParam(value="id")Stringid){
operateLogService.deleteById(id);
returnResult.success();
}@PostMapping("/update-by-name")
publicResultupdateByOperator(@RequestBodyOperateRecordReqrequest){
operateLogService.updateByOperator(request.getOperator());
returnResult.success();
}@PostMapping("/queryList")
publicResult<PageDto<SnowOperateLog>>queryList(@RequestBodyOperateRecordReqrequest){
returnoperateLogService.queryList(request);
}@PostMapping("/query-by-name")
publicResult<List<SnowOperateLog>>selectAllByOperator(@RequestBodyOperateRecordReqrequest){
List<SnowOperateLog>snowOperateLogs=operateLogService.selectAllByOperator(request.getOperator());
returnResult.success(snowOperateLogs);
}
}
服务类:
publicinterfaceISnowOperateLogServiceextendsIService<SnowOperateLog>{Result<PageDto<SnowOperateLog>>queryList(OperateRecordReqrequest);
List<SnowOperateLog>selectAllByOperator(Stringoperator);
voidupdateByOperator(Stringoperator);
voiddeleteById(Stringid);
}
实现类:
@Slf4j
@Service
publicclassSnowOperateLogServiceImplextendsServiceImpl<SnowOperateLogMapper,SnowOperateLog>implements
ISnowOperateLogService{@Resource
privateSnowOperateLogMapperoperateLogMapper;//注意:不配置MybatisPlusConfig分页不生效TokenKind
@Override
publicResult<PageDto<SnowOperateLog>>queryList(OperateRecordReqrequest){
LambdaQueryWrapper<SnowOperateLog>wrapper=Wrappers.lambdaQuery(SnowOperateLog.class);
IPage<SnowOperateLog>page=newPage<>(request.getPageNum(),request.getPageSize());
wrapper
.eq(SnowOperateLog::getOperator,request.getOperator())
.eq(SnowOperateLog::getOperateType,request.getOperateType())
.ge(SnowOperateLog::getOperateTime,request.getOperateTimeStart())
.le(SnowOperateLog::getOperateTime,request.getOperateTimeEnd())
.orderByDesc(SnowOperateLog::getId);
IPage<SnowOperateLog>logIPage=operateLogMapper.selectPage(page,wrapper);
PageDto<SnowOperateLog>result=newPageDto<>(logIPage.getTotal(),logIPage.getPages()
,logIPage.getCurrent(),logIPage.getSize()
,logIPage.getRecords());
returnResult.success(result);
}@Override
@Transactional(rollbackFor=Exception.class)
publicList<SnowOperateLog>selectAllByOperator(Stringoperator){
////自定义方法和SQL实现功能
//List<SnowOperateLog>snowOperateLogs=operateLogMapper.selectAllByOperator(operator);
LambdaQueryWrapper<SnowOperateLog>queryWrapper=Wrappers.lambdaQuery(SnowOperateLog.class)
.eq(SnowOperateLog::getOperator,operator);
List<SnowOperateLog>snowOperateLogs=operateLogMapper.selectList(queryWrapper);
//批量打印日志
snowOperateLogs.forEach(System.out::println);
returnsnowOperateLogs;
}@Override
@Transactional(rollbackFor=Exception.class)
publicvoidupdateByOperator(Stringoperator){
LambdaUpdateWrapper<SnowOperateLog>wrapper=Wrappers.lambdaUpdate(SnowOperateLog.class)
.eq(SnowOperateLog::getOperator,"张三")
.set(SnowOperateLog::getOperator,"张三疯======");
super.update(wrapper);
}@Override
@Transactional(rollbackFor=Exception.class)
publicvoiddeleteById(Stringid){
LambdaQueryWrapper<SnowOperateLog>wrapper=Wrappers.lambdaQuery(SnowOperateLog.class)
.eq(SnowOperateLog::getId,id);
super.remove(wrapper);
}
}
mapper类
@Mapper
publicinterfaceSnowOperateLogMapperextendsBaseMapper<SnowOperateLog>{List<SnowOperateLog>selectAllByOperator(@Param("operator");
}
mapper.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.snowriver.it.springdemo.mapper.SnowOperateLogMapper"><!--通用查询映射结果-->
<resultMapid="BaseResultMap"type="com.snowriver.it.springdemo.entity.SnowOperateLog">
<idcolumn="id"property="id"/>
<resultcolumn="batch_no"property="batchNo"/>
<resultcolumn="operator"property="operator"/>
<resultcolumn="operate_time"property="operateTime"/>
<resultcolumn="operate_type"property="operateType"/>
<resultcolumn="operate_detail"property="operateDetail"/>
<resultcolumn="attachment_url"property="attachmentUrl"/>
<resultcolumn="upload_status"property="uploadStatus"/>
</resultMap><!--通用查询结果列-->
<sqlid="Base_Column_List">
id,batch_no,operator,operate_time,operate_type,operate_detail,attachment_url,upload_status
</sql><selectid="selectAllByOperator"resultMap="BaseResultMap">
select
<includerefid="Base_Column_List"/>
fromt_snow_operate_log
whereoperator=#{operator,jdbcType=VARCHAR}
</select></mapper>
配置类:MybatisPlusConfig
备注:如果没有该类,分页查询不生效
@Configuration
publicclassMybatisPlusConfig{
@Bean
publicPaginationInterceptorpaginationInterceptor(){
returnnewPaginationInterceptor();
}
}
实体类
@Data
@EqualsAndHashCode(callSuper=false)
@Accessors(chain=true)
@TableName("t_snow_operate_log")
publicclassSnowOperateLogimplementsSerializable{privatestaticfinallongserialVersionUID=1L;
/*
ID
*/
@TableId(value="id",type=IdType.AUTO)
privateLongid;/*
批次号
*/
privateStringbatchNo;/*
操作人
*/
privateStringoperator;/*
操作时间
*/
privateLocalDateTimeoperateTime;/*
操作类型1-导入2-修改
*/
privateIntegeroperateType;/*
操作明细(导入-附件名称修改-报单id)
*/
privateStringoperateDetail;/*
附件地址(操作类型为修改该字段为空)
*/
privateStringattachmentUrl;/*
上传状态0-上传失败1-上传成功2-处理中
*/
privateIntegeruploadStatus;}
问:SnowOperateLogServiceImpl继承ServiceImpl就可以获得service层的方法,为什么还需要实现ISnowOperateLogService接口?
答:实现 ISnowOperateLogService 接口能够更方便地对业务进行扩展,一些复杂场景下的数据处理,MyBatisPlus 提供的 Service 方法可能无法处理,此时我们就需要自己编写代码,这时候只需在 ISnowOperateLogService 中定义自己的方法,并在 SnowOperateLogServiceImpl 中实现即可。具体见这行代码(SnowOperateLogServiceImpl类):
List<SnowOperateLog>snowOperateLogs=operateLogMapper.selectAllByOperator(operator);
四、Wrapper中的QueryWrapper常用ge,gt,lt,le等具体含义
这个自己看源码就行,具体的类在是com.baomidou.mybatisplus.core.conditions.interfaces.interface
Mybatis如何使用的详细内容,希望对您有所帮助,信息来源于网络。