前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatisplus

mybatisplus

作者头像
Dean0731
发布2021-03-05 11:09:46
4380
发布2021-03-05 11:09:46
举报
文章被收录于专栏:blog-技术博客

概述

  • 简化开发,省略crud代码
  • 类似jpa,tk-mapper,
  • 在mybatis增强

特性

  • 无侵入,损耗小,强大CRUD操作,Lambda,主键生成,全局拦截插件,性能分析插件,分页插件,内置代码生成器,自定义全局通用操作,ActiveRecord

快速入门

建表,依赖,配置,连数据库,代码,

image-20210129111233259
image-20210129111233259
代码语言:javascript
复制
<dependency>
	<groupId>com.baomidou</groupId>
    <artifictId>mybatis-plus-boot-starter</artifictId>
    <version>3.0.5</version>
</dependency>
image-20210129112059573
image-20210129112059573

传统的方式:pojo-dao-service-controller

信方式:pojo,mapper接口,使用

代码语言:javascript
复制
// 主启动类可能需要扫描@MapperScan("xx.xx.mapper")
@Repository
public interface UserMapper extends BaseMapper<User>{
    // 已经编写完成,不需要配置文件
}
代码语言:javascript
复制
Autowired UserMapper userMapper;
void test(){
	List<User> list = userMapper.selectList(null);// 全部用户
}

配置日志

现在sql不可见,日志可以看到

代码语言:javascript
复制
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.StdOutImpl

CRUD

用户ID会自动插入:全局的唯一id

主键生成策略

uuid,redis生成,雪花算法等等都是用来生成唯一id的

重点:雪花算法,生成long型,分布式唯一id生成

image-20210129134706999
image-20210129134706999

主键自增

1,实体类子段@TableId(type=IdType.AUTO) 主键

​ IdType.AUTO,NONE,INPUT,ID_WORKER,UUID,ID_WORKER_STR

2,数据库子段自增

代码语言:javascript
复制
userMapper.insert(User);

update

代码语言:javascript
复制
userMapper.updateById(user);

自动填充

乐观锁,悲观锁

乐观锁,操作不加锁,操作是否执行由代码配合数据版本号实现,

image-20210129142208175
image-20210129142208175

Select

代码语言:javascript
复制
map.put("name","xxx")
userMapper.selectByMap(map);

分页查询

  • limit
  • pageHelper
  • mybatisplus
代码语言:javascript
复制
 // 配置,还使用limit使用的
@Bean
public PaginationInterceptor paginationInterceptor(){
    PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
    //paginationInterceptor.setDialectClazz();
    return paginationInterceptor;
}
代码语言:javascript
复制
Page<User> page = new Page<User>(2,5)
userMapper.selectPage(page,null); // 每页5个第二页
page.getRecords()
page.total()    

删除

性能分析插件

有些sql太慢,超时停止,分析sql

代码语言:javascript
复制
@Bean
@Profile({"dev","test"})
    public PerformanceInterceptor performanceInterceptor(){
    PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    performanceInterceptor.setMaxTime(1);
    performanceInterceptor.setFormat(true);
    return performanceInterceptor;
}

条件构造器

复杂的SQL

代码语言:javascript
复制
QueryWrapper<User> wrapper = new QueryWrapper();
wrapper.isNotNull("name").isNotNull("email").ge("age","12");
userMapper.selectList(wrapper);
代码语言:javascript
复制
wrapper.inSql("id","select id from user where id<3")
userMapper.selectObjs(wrapper)

代码生成器

代码语言:javascript
复制
//构建一个代码生成器对象
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();

参考:https://gitee.com/kuangstudy/openclass

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 特性
  • 快速入门
  • 配置日志
  • CRUD
    • 用户ID会自动插入:全局的唯一id
      • 主键生成策略
      • 主键自增
    • update
      • 自动填充
        • 乐观锁,悲观锁
          • Select
            • 分页查询
              • 删除
              • 性能分析插件
              • 条件构造器
              • 代码生成器
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档