Mybatis如何使用(mybatis,编程语言)

时间:2024-05-04 04:50:48 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

希望大家仔细阅读,能够学有所成!

一、背景

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--&gt;
<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(
idbigint(20)NOTNULLAUTO_INCREMENTCOMMENT'ID',
batch_novarchar(32)DEFAULTNULLCOMMENT'批次号',
operatorvarchar(255)NOTNULLDEFAULT''COMMENT'操作人',
operate_timetimestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'操作时间',
operate_typetinyint(4)NOTNULLDEFAULT'-1'COMMENT'操作类型1-导入2-修改',
operate_detailvarchar(255)NOTNULLDEFAULT''COMMENT'操作明细(导入-附件名称修改-报单id)',
attachment_urlvarchar(255)NOTNULLDEFAULT''COMMENT'附件地址(操作类型为修改该字段为空)',
upload_statustinyint(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&quot;&gt;
<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如何使用

本文:Mybatis如何使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何利用css3实现进度条效果及动态添加百分比下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18