第一步:在pom文件中加入依赖关系
第二步:加入核心配置文件,这里面的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
}
第三步:在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 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);
}