springBoot集成mybatis转换为mybatis-plus怎么实现
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍"springBoot集成mybatis转换为mybatis-plus怎么实现",在日常操作中,相信很多人在springBoot集成mybatis转换为mybatis-plus怎么实现
千家信息网最后更新 2025年01月17日springBoot集成mybatis转换为mybatis-plus怎么实现
这篇文章主要介绍"springBoot集成mybatis转换为mybatis-plus怎么实现",在日常操作中,相信很多人在springBoot集成mybatis转换为mybatis-plus怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"springBoot集成mybatis转换为mybatis-plus怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
导入maven
com.baomidou mybatis-plus-boot-starter 3.4.2
更新yml文件
#mybatis-plusmybatis-plus: mapperPackage: com.xn.mapper typeAliasesPackage: com.xn.mapper mapperLocations: classpath:mapper/*.xml global-config: db-config: id-type: none configuration: # 字段下划线转驼峰 map-underscore-to-camel-case: false log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
添加扩展文件
(用于扩展 分页/批量新增修改/更多的方法修改 基础可以不加)
BaseEntity 用于定义model
model继承后可以 id自增会回填,更新时间在修改时刷新,创建时间在创建时刷新
import com.baomidou.mybatisplus.annotation.FieldFill;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableId;import lombok.AllArgsConstructor;import lombok.Getter;import lombok.NoArgsConstructor;import lombok.Setter;import lombok.experimental.SuperBuilder;import java.io.Serializable;import java.util.Date;@Getter@Setter@SuperBuilder@NoArgsConstructor@AllArgsConstructorpublic abstract class BaseEntity implements Serializable { /** * 创建时间 自增方式 */ @TableField(fill = FieldFill.INSERT) public Date create_time; /** * 更新时间 */ @TableField(fill = FieldFill.INSERT_UPDATE) public Date update_time; /** * ID */ @TableId(value="id" ,type = IdType.AUTO) private Long id;}
CreateAndUpdateMetaObjectHandler
设置刷新 更新时间 创建时间
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import org.apache.ibatis.reflection.MetaObject;import java.util.Date;/** * MP注入处理器 */public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { public String CREATE_TIME = "create_time"; public String UPDATE_TIME = "update_time"; @Override public void insertFill(MetaObject metaObject) { if (metaObject.hasGetter(CREATE_TIME)) { if (metaObject.getValue(CREATE_TIME) == null) { this.setFieldValByName(CREATE_TIME, new Date(), metaObject); } } } @Override public void updateFill(MetaObject metaObject) { if (metaObject.hasGetter(UPDATE_TIME)) { if (metaObject.getValue(UPDATE_TIME) == null) { this.setFieldValByName(UPDATE_TIME, new Date(), metaObject); } } }}
批量插入/更新 mapper需要继承这个接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;import java.util.List;/** * 自定义 Mapper 接口, 实现 自定义扩展 * */public interface BaseMapperPlusextends BaseMapper { /** * 批量插入(mysql) * @param entityList * @return */ Integer insertBatchSomeColumn(List entityList); /** * 批量更新(mysql) * @param entityList * @return */ Integer updateBatchSomeColumn(List entityList);}
将批量方法放到 sql注入器中
import com.baomidou.mybatisplus.core.injector.AbstractMethod;import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;import java.util.List;/** * mybatis + sql注入器 */public class MybatisPlusSqlInjector extends DefaultSqlInjector { @Override public ListgetMethodList(Class> mapperClass) { List methodList = super.getMethodList(mapperClass); // 添加InsertBatchSomeColumn方法 methodList.add(new InsertBatchSomeColumn()); methodList.add(new UpdateBatchSomeColumn()); return methodList; }
实现批量更新的方法
import com.baomidou.mybatisplus.core.injector.AbstractMethod;import com.baomidou.mybatisplus.core.metadata.TableInfo;import org.apache.ibatis.mapping.MappedStatement;import org.apache.ibatis.mapping.SqlSource;/** * 批处理更新一些列 * */public class UpdateBatchSomeColumn extends AbstractMethod { @Override public MappedStatement injectMappedStatement(Class> mapperClass, Class> modelClass, TableInfo tableInfo) { String sql = ""; String additional = tableInfo.isWithVersion() ? tableInfo.getVersionFieldInfo().getVersionOli("item", "item.") : "" + tableInfo.getLogicDeleteSql(true, true); String setSql = sqlSet(tableInfo.isWithLogicDelete(), false, tableInfo, false, "item", "item."); String sqlResult = String.format(sql, tableInfo.getTableName(), setSql, tableInfo.getKeyColumn(), "item." + tableInfo.getKeyProperty(), additional); SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass); return this.addUpdateMappedStatement(mapperClass, modelClass, "updateBatchSomeColumn", sqlSource); }}
mybatis-plus配置类
import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.transaction.annotation.EnableTransactionManagement;/** * mybatis-plus配置类 */@EnableTransactionManagement(proxyTargetClass = true)@Configuration@MapperScan("${mybatis-plus.mapperPackage}")public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(paginationInnerInterceptor()); // 乐观锁插件 interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); return interceptor; } /** * 分页插件,自动识别数据库类型 */ public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); // 设置数据库类型为mysql paginationInnerInterceptor.setDbType(DbType.MYSQL); // 设置最大单页限制数量,默认 500 条,-1 不受限制 paginationInnerInterceptor.setMaxLimit(-1L); return paginationInnerInterceptor; } /** * 乐观锁插件 */ public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } /** * 元对象字段填充控制器 */ @Bean public MetaObjectHandler metaObjectHandler() { return new CreateAndUpdateMetaObjectHandler(); } /** * sql注入器配置 */ @Bean public MybatisPlusSqlInjector easySqlInjector () { return new MybatisPlusSqlInjector(); }}
还有两个是分页与查询方式可以自己定义
分页类需要继承 IPage,查询类可以继承 IService
开始测试
使用分页查询
@Override public ServerResponse selectTableTestList(TableTestPOJO tableTest) { // 分页查询 1 sql自己写 适用于多表 Pagepage = new Page<>(mutualStep.getPageNum(), mutualStep.getPageSize()); page = tableTestMapper.findTableList(page,new TableTest()); // 分页查询 2 对象筛选 适用单表 条件默认相等 QueryWrapper query = Wrappers.query(); query.like("name","ls"); query.and( wrapper -> wrapper.notLike("name","1").or().like("name","ls") ); query.orderByDesc("id"); Page page = new Page<>(tableTest.getPageNum(), tableTest.getPageSize()); Page pageList = tableTestMapper.selectPage(page, query); return ServerResponse.createBySuccess(pageList); }
逻辑删除定义
/** * 删除状态 0未删除,1删除 */ @TableLogic(value = "0",delval = "1") private Integer is_del;
逻辑删除
@Override public ServerResponse deleteTableTest(MutualStepPage mutualStepPage, Integer... ids) { int number = tableTestMapper.deleteBatchIds(Arrays.asList(ids)); return ServerResponse.createBySuccess(number); }
到此,关于"springBoot集成mybatis转换为mybatis-plus怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
更新
时间
方法
查询
插件
学习
更多
配置
乐观
字段
对象
接口
数据
数据库
文件
方式
类型
逻辑
帮助
限制
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
常用的软件开发平台有哪些
村委网络安全宣传工作总结
深圳富盟网络技术有限公司李建伟
台州定制app软件开发企业
批量下载历史股票数据库
包括服务器安全
网络安全管理技术研究所
里程碑计划软件开发
数据库的安全机制是什么
数据库连接池按实例还是按库
软件开发需要跑业务吗
科技互联网公众号名
服务器移至云上贵州云空间
服务器开启远程管理
数据库管理的工作流程
通信网络安全 参考文献
文山州2020年网络安全视频
服务器管理器怎么分区
学校网络安全包括哪几个方面
有关网络安全教育的征文
网络技术类电视剧
服务器托管投资
公安大学虹膜数据库
内网电子邮件服务器查询
香港服务器电脑配置
网络技术保障职责
网络安全促进委员会
下面数据库中最合适的是
宁夏即拼商城软件开发价格
访问数据库太频繁