SpringBoot实践:集成Mybatis 4年前

第一步:在pom文件中加入依赖关系

com.baomidou mybatisplus-spring-boot-starter ${mybatisplus-spring-boot-starter.version} com.baomidou mybatis-plus ${mybatisplus.version} org.apache.velocity velocity 1.7

第二步:加入核心配置文件,这里面的paginationInterceptor方法代码我注释了,因为我用不到多租户功能,@MapperScan("com.ylw.shop.mapper*")记住这个一定要改成你的mapper类包地址

import com.baomidou.mybatisplus.plugins.PerformanceInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;

@Configuration @MapperScan("com.ylw.shop.mapper*") public class MybatisPlusConfig {

/\*\*
 \* mybatis-plus SQL执行效率插件【生产环境可以关闭】
 \*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
    return new PerformanceInterceptor();
}

/\*\*
 \* mybatis-plus分页插件<br>
 \* 文档:http://mp.baomidou.com<br>
 \*/

// @Bean // public PaginationInterceptor paginationInterceptor() { // PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // paginationInterceptor.setLocalPage(true);// 开启 PageHelper 的支持 // /* // * 【测试多租户】 SQL 解析处理拦截器
// * 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )
// */ // List sqlParserList = new ArrayList<>(); // TenantSqlParser tenantSqlParser = new TenantSqlParser(); // tenantSqlParser.setTenantHandler(new TenantHandler() { // @Override // public Expression getTenantId() { // return new LongValue(1L); // } // // @Override // public String getTenantIdColumn() { // return "tenant_id"; // } // // @Override // public boolean doTableFilter(String tableName) { // // 这里可以判断是否过滤表 // /* // if ("user".equals(tableName)) { // return true; // }*/ // return false; // } // }); // // // sqlParserList.add(tenantSqlParser); // paginationInterceptor.setSqlParserList(sqlParserList); // paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() { // @Override // public boolean doFilter(MetaObject metaObject) { // MappedStatement ms = PluginUtils.getMappedStatement(metaObject); // // 过滤自定义查询此时无租户信息约束【 麻花藤 】出现 // if ("com.baomidou.springboot.mapper.UserMapper.selectListBySQL".equals(ms.getId())) { // return true; // } // return false; // } // }); // return paginationInterceptor; // }

}

第三步:在application.properties核心配置文件中加入Mybatis-Plus配置

mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml 这句是告诉框架你的mapper.xml位置

#mybatis plus mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml #实体扫描,多个package用逗号或者分号分隔 mybatis-plus.typeAliasesPackage=com.ylw.shop.entity #mybatis-plus.typeEnumsPackage=com.baomidou.springboot.entity.enums #主键类型

0:"数据库ID自增"

1:"用户输入ID"

2:"全局唯一ID (数字类型唯一ID)"

3:"全局唯一ID UUID"

mybatis-plus.global-config.id-type=0 #字段策略

0:"忽略判断"

1:"非 NULL 判断"

2:"非空判断"

mybatis-plus.global-config.field-strategy=0 #驼峰下划线转换 mybatis-plus.global-config.db-column-underline=true #刷新mapper 调试神器 mybatis-plus.global-config.refresh-mapper=true #数据库大写下划线转换 #capital-mode=true #序列接口实现类配置 #key-generator=com.baomidou.springboot.xxx #逻辑删除配置 mybatis-plus.global-config.logic-delete-value=0 mybatis-plus.global-config.logic-not-delete-value=1 #自定义填充策略接口实现 #meta-object-handler=com.baomidou.springboot.xxx #自定义SQL注入器 #sql-injector=com.baomidou.springboot.xxx mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.configuration.cache-enabled=false

第四步:在application.properties核心配置文件中加入数据库配置

spring.datasource.url=jdbc:mysql://localhost:3306/yzshop?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.initial-size=1 spring.datasource.druid.min-idle=1 spring.datasource.druid.max-active=20 spring.datasource.druid.test-on-borrow=true spring.datasource.druid.stat-view-servlet.allow=true

第五步:创建代码生成器类,指定setOutputDir输出目录、数据库配置、包名后执行main方法,然后把生成的类放入指定的包下

package com.ylw.shop.util;

import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; import com.baomidou.mybatisplus.generator.config.rules.DbType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/** *

* 代码生成器演示 *

*/ public class MpGeneratorUtil {
/\*\*
 \* <p>
 \* MySQL 生成演示
 \* </p>
 \*/
public static void main(String\[\] args) {
    AutoGenerator mpg = new AutoGenerator();

    // 全局配置
    GlobalConfig gc = new GlobalConfig();

    gc.setOutputDir("/Users/xiaojianyu/IdeaProjects/spring-boot-test/generator/output");
    gc.setFileOverride(true);
    gc.setActiveRecord(true);
    gc.setEnableCache(false);// XML 二级缓存
    gc.setBaseResultMap(true);// XML ResultMap
    gc.setBaseColumnList(false);// XML columList
    gc.setAuthor("xiaojianyu");

    // 自定义文件命名,注意 %s 会自动填充表实体属性!
    // gc.setMapperName("%sDao");
    // gc.setXmlName("%sDao");
    // gc.setServiceName("MP%sService");
    // gc.setServiceImplName("%sServiceDiy");
    // gc.setControllerName("%sAction");
    mpg.setGlobalConfig(gc);

    // 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setDbType(DbType.MYSQL);
    dsc.setTypeConvert(new MySqlTypeConvert() {
        // 自定义数据库表字段类型转换【可选】
        @Override
        public DbColumnType processTypeConvert(String fieldType) {
            System.out.println("转换类型:" + fieldType);
            // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
            return super.processTypeConvert(fieldType);
        }
    });
    dsc.setDriverName("com.mysql.jdbc.Driver");
    dsc.setUsername("root");
    dsc.setPassword("root");
    dsc.setUrl("jdbc:mysql://127.0.0.1:3306/yzshop?characterEncoding=utf8");
    mpg.setDataSource(dsc);

    // 策略配置
    StrategyConfig strategy = new StrategyConfig();
    // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意

// strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此处可以修改为您的表前缀 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 // strategy.setInclude(new String[] { "user" }); // 需要生成的表 // strategy.setExclude(new String[]{"test"}); // 排除生成的表 // 自定义实体父类 // strategy.setSuperEntityClass("com.ylw.shop.SuperMapper"); // 自定义实体,公共字段 // strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); // 自定义 mapper 父类 // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper"); // 自定义 service 父类 // strategy.setSuperServiceClass("com.baomidou.demo.TestService"); // 自定义 service 实现类父类 // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl"); // 自定义 controller 父类 // strategy.setSuperControllerClass("com.baomidou.demo.TestController"); // 【实体】是否生成字段常量(默认 false) // public static final String ID = "test_id"; // strategy.setEntityColumnConstant(true); // 【实体】是否为构建者模型(默认 false) // public User setName(String name) {this.name = name; return this;} // strategy.setEntityBuilderModel(true); mpg.setStrategy(strategy);

// 包配置
    PackageConfig pc = new PackageConfig();
    pc.setParent("com.ylw.shop");
    pc.setEntity("entity");
    pc.setMapper("mapper");
    pc.setService("service");
    pc.setServiceImpl("service.impl");
    pc.setController("controller");
    pc.setXml("xml");
    mpg.setPackageInfo(pc);

    // 关闭默认 xml 生成,调整生成 至 根目录

// TemplateConfig tc = new TemplateConfig(); // tc.setXml(null); // mpg.setTemplate(tc);

// 执行生成
    mpg.execute();
}

}

第六步:使用方式,在你的Dao层注入生成的mapper类就可以使用框架提供的方法了

/** * banner 管理类 */ @Component public class BannerManager {

@Resource
private YzBannerMapper yzBannerMapper;

public Optional<List<YzBanner>> queryBannerList(BannerDisplayType displayType) {
    Date now = new Date();
    List<YzBanner> banners = yzBannerMapper.selectList(
            new EntityWrapper<YzBanner>().eq("display\_type", displayType.getCode())
                    .eq("is\_enable", EnableStatus.ENABLE.getCode())
                    .lt("start\_time", now)
                    .gt("end\_time", now)
    );
    return Optional.ofNullable(banners);
}

}

Mybatis-Plus提供多种方法进行数据库操作

public interface BaseMapper { Integer insert(T var1);

Integer insertAllColumn(T var1);

Integer deleteById(Serializable var1);

Integer deleteByMap(@Param("cm") Map<String, Object> var1);

Integer delete(@Param("ew") Wrapper<T> var1);

Integer deleteBatchIds(List<? extends Serializable> var1);

Integer updateById(@Param("et") T var1);

Integer updateAllColumnById(@Param("et") T var1);

Integer update(@Param("et") T var1, @Param("ew") Wrapper<T> var2);

T selectById(Serializable var1);

List<T> selectBatchIds(List<? extends Serializable> var1);

List<T> selectByMap(@Param("cm") Map<String, Object> var1);

T selectOne(@Param("ew") T var1);

Integer selectCount(@Param("ew") Wrapper<T> var1);

List<T> selectList(@Param("ew") Wrapper<T> var1);

List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> var1);

List<Object> selectObjs(@Param("ew") Wrapper<T> var1);

List<T> selectPage(RowBounds var1, @Param("ew") Wrapper<T> var2);

List<Map<String, Object>> selectMapsPage(RowBounds var1, @Param("ew") Wrapper<T> var2);

}

观测者灬番薯
如果你希望自由,请以你的国家为荣。如果你希望民主,请维护自己的主权。如果你希望和平,请热爱你的国家。
3
发布数
0
关注者
2349
累计阅读

热门教程文档

Golang
23小节
Objective-C
29小节
HTML
32小节
React
18小节
C#
57小节
广告