建表,依赖,配置,连数据库,代码,
<dependency>
<groupId>com.baomidou</groupId>
<artifictId>mybatis-plus-boot-starter</artifictId>
<version>3.0.5</version>
</dependency>
传统的方式:pojo-dao-service-controller
信方式:pojo,mapper接口,使用
// 主启动类可能需要扫描@MapperScan("xx.xx.mapper")
@Repository
public interface UserMapper extends BaseMapper<User>{
// 已经编写完成,不需要配置文件
}
Autowired UserMapper userMapper;
void test(){
List<User> list = userMapper.selectList(null);// 全部用户
}
现在sql不可见,日志可以看到
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.StdOutImpl
uuid,redis生成,雪花算法等等都是用来生成唯一id的
重点:雪花算法,生成long型,分布式唯一id生成
1,实体类子段@TableId(type=IdType.AUTO) 主键
IdType.AUTO,NONE,INPUT,ID_WORKER,UUID,ID_WORKER_STR
2,数据库子段自增
userMapper.insert(User);
userMapper.updateById(user);
乐观锁,操作不加锁,操作是否执行由代码配合数据版本号实现,
map.put("name","xxx")
userMapper.selectByMap(map);
// 配置,还使用limit使用的
@Bean
public PaginationInterceptor paginationInterceptor(){
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//paginationInterceptor.setDialectClazz();
return paginationInterceptor;
}
Page<User> page = new Page<User>(2,5)
userMapper.selectPage(page,null); // 每页5个第二页
page.getRecords()
page.total()
有些sql太慢,超时停止,分析sql
@Bean
@Profile({"dev","test"})
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(1);
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
复杂的SQL
QueryWrapper<User> wrapper = new QueryWrapper();
wrapper.isNotNull("name").isNotNull("email").ge("age","12");
userMapper.selectList(wrapper);
wrapper.inSql("id","select id from user where id<3")
userMapper.selectObjs(wrapper)
//构建一个代码生成器对象
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String dir = System.getProperty("user.dir");
// 输出路径
gc.setOutputDir(dir+"/src/main/java");
gc.setAuthor("dean");
gc.setOpen(false);
gc.setFileOverride(false);// 是否覆盖
gc.setServiceName("%sService");
gc.setIdType(IdType.ID_WORKER);
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(true);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl();
dataSourceConfig.setUsername();
dataSourceConfig.setPassword();
dataSourceConfig.setDriverName();
dataSourceConfig.setDbType(DbType.MYSQL);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("blog");
pc.setParent("top.dean");
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
//策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("user","role");
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
strategyConfig.setSuperEntityClass("父类,没有就不设置");
strategyConfig.setEntityLombokModel(true);
strategyConfig.setRestControllerStyle(true);
strategyConfig.setLogicDeleteFieldName("deleted");// 逻辑删除子段
// 自动填充
TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
TableFill gmtModified = new TableFill("gmt_create", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> list = new ArrayList<>();
list.add(gmtCreate);
list.add(gmtModified);
strategyConfig.setTableFillList(list);
// 乐观锁
strategyConfig.setVersionFieldName("version");
strategyConfig.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategyConfig);
mpg.setPackageInfo(pc);
mpg.setDataSource(dataSourceConfig);
mpg.setGlobalConfig(gc);
mpg.execute();