MyBatis Plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

学习网址 https://baomidou.com/guide/generator.html

MyBatis Plus特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

支持的数据库:

  • mysql 、mariadb 、oracle 、db2 、h2 、hsql 、sqlite 、postgresql 、sqlserver 、presto 、Gauss 、Firebird
  • Phoenix 、clickhouse 、Sybase ASE 、 OceanBase 、达梦数据库 、虚谷数据库 、人大金仓数据库 、南大通用数据库

MyBatisPlus操作案例

我们创建一个品牌操作的功能,实现品牌增删改查,分别创建modelmapperservicecontroller

MyBatisPlus提供了很多通用方法:

mapper(接口)->extends BaseMapper【增删改查】
service(接口)->extends IService【增删改查】
serviceImpl->extends ServiceImpl【增删改查】 
1 Mapper创建

mall-goods-service创建com.gupaoedu.vip.mall.goods.mapper.BrandMapper接口,代码如下:

public interface BrandMapper extends BaseMapper<Brand> {
}

代码说明:BaseMapper中已经存在了很多常见数据库操作方法,可以大幅提升开发速度。

2 Service创建

mall-goods-service创建com.gupaoedu.vip.mall.goods.service.BrandService接口,代码如下:

public interface BrandService extends IService<Brand>{
}

mall-goods-service创建com.gupaoedu.vip.mall.goods.service.impl.BrandServiceImpl实现类,代码如下:

@Service
public class BrandServiceImpl extends ServiceImpl<BrandMapper,Brand> implements BrandService {}

代码说明:IServiceServiceImpl中已经创建好了很多常用的增删改查方法,我们写常用的增删改查,几乎不用写方法。

3 增删改功能

增删改功能在IServiceServiceImpl中已经全部存在, 不需要额外添加方法,只需要在Controller调用即可。

mall-goods-service创建com.gupaoedu.vip.mall.goods.controller.BrandController,代码如下:

@RestController
@RequestMapping(value = "/brand")
public class BrandController {

    @Autowired
    private BrandService brandService;

    /***
     * 增加品牌
     */
    @PostMapping
    public RespResult add(@RequestBody Brand brand){
        // 增加品牌
        brandService.save(brand);
        return RespResult.ok();
    }

    /****
     * 修改
     */
    @PutMapping
    public RespResult update(@RequestBody Brand brand){
        //修改品牌
        brandService.updateById(brand);
        return RespResult.ok();
    }

    /****
     * 删除品牌
     */
    @DeleteMapping("/{id}")
    public RespResult delete(@PathVariable(value = "id") Integer id){
        //删除品牌
        brandService.removeById(id);
        return RespResult.ok();
    }
}
4 条件查询/分页

条件查询需要封装条件信息,MyBatis Plus提供了条件封装对象Wrapper(它的子类QueryWrapper可以直接使用),我们可以用它的子类QueryWrapper实现封装查询条件。

4.1 条件查询

BrandService中创建如下方法:

List<Brand> queryList(Brand brand);

BrandServiceImpl中创建条件查询方法实现(不要忘了注入brandMapper):

/****
 * 多条件查询
 * @param brand
 * @return
 */
@Override
public List<Brand> queryList(Brand brand) {
    // 多条件构造器
    QueryWrapper<Brand> queryWrapper = new QueryWrapper<Brand>();
    if(!StringUtils.isEmpty(brand.getName())){
        queryWrapper.like("name",brand.getName());
    }
    if(!StringUtils.isEmpty(brand.getName())){
        queryWrapper.eq("initial",brand.getInitial());
    }
    return brandMapper.selectList(queryWrapper);
}

代码说明:

like:表示模糊查询
eq:表示等值查询

BrandController中创建条件查询方法:

/****
 * 条件查询
 */
@PostMapping(value = "/list")
public RespResult<List<Brand>> list(@RequestBody(required = false) Brand brand){
    // 查询
    List<Brand> brands = brandService.queryList(brand);
    return RespResult.ok(brands);
}
4.2 分页查询

BrandService中创建如下方法:

Page<Brand> queryPageList(Long currentPage,Long size,Brand brand);

BrandServiceImpl中创建条件查询方法实现(不要忘了注入brandMapper):

/***
 * 分页查询
 * @param brand
 * @return
 */
@Override
public Page<Brand> queryPageList(Long currentPage, Long size, Brand brand) {
    // 封装查询条件
    Page<Brand> page = brandMapper.selectPage(
            new Page<Brand>(currentPage, size),
            new QueryWrapper<Brand>()
                    .like("name", brand.getName()));
    return page;
}

代码说明:

like:表示模糊查询

BrandController中创建条件查询方法:

/****
 * 条件分页查询
 */
@PostMapping(value = "/list/{page}/{size}")
public RespResult<Page<Brand>> list(
        @PathVariable(value = "page")Long currentPage,
        @PathVariable(value = "size")Long size,
        @RequestBody(required = false) Brand brand){
    // 分页查询
    Page<Brand> brandPage = brandService.queryPageList(currentPage,size,brand);
    return RespResult.ok(brandPage);
}

MyBatisPlus代码生成配置

1)引入依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.0</version>
</dependency>

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

2)代码生成

public static void main(String[] args) {
    // 代码生成器
    AutoGenerator mpg = new AutoGenerator();

    // 全局配置
    GlobalConfig gc = new GlobalConfig();
    String projectPath = System.getProperty("user.dir");
    gc.setOutputDir(projectPath + "/src/main/java");    // 文件输出路径
    gc.setAuthor("bobo");   //作者
    gc.setOpen(false);   //生成之后是否打开目录
    gc.setIdType(IdType.NONE);  //主键策略
    gc.setServiceName("%sService"); //名字设置 %s是占位符,可以理解成类的名字
    mpg.setGlobalConfig(gc);

    // 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setUrl("jdbc:mysql://192.168.100.130:3306/shop_goods?useUnicode=true&useSSL=false&characterEncoding=utf8");
    dsc.setDriverName("com.mysql.jdbc.Driver");
    dsc.setUsername("root");
    dsc.setPassword("123456");
    mpg.setDataSource(dsc);

    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setModuleName("mall-goods");
    pc.setParent("com.gupaoedu.code");
    mpg.setPackageInfo(pc);

    // 策略配置
    StrategyConfig strategy = new StrategyConfig();
    strategy.setNaming(NamingStrategy.underline_to_camel);  //驼峰命名
    strategy.setColumnNaming(NamingStrategy.underline_to_camel);    //驼峰命名
    strategy.setEntityLombokModel(true);    //是否使用Lombok
    strategy.setRestControllerStyle(true);  //是否生成RestController
    // 写于父类中的公共字段
    strategy.setSuperEntityColumns("id");   //公共字段定义
    strategy.setControllerMappingHyphenStyle(true); //驼峰转连字符
    strategy.setTablePrefix(pc.getModuleName() + "_");  //表前缀
    mpg.setStrategy(strategy);
    mpg.execute();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值