千家信息网

springBoot集成mybatis转换为mybatis-plus怎么实现

发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,这篇文章主要介绍"springBoot集成mybatis转换为mybatis-plus怎么实现",在日常操作中,相信很多人在springBoot集成mybatis转换为mybatis-plus怎么实现
千家信息网最后更新 2024年10月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 BaseMapperPlus extends 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 List getMethodList(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自己写 适用于多表        Page page = 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怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0