第一步:在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);
}