spring boot整合 mybatis-plus(简单使用)

额,首先,这里声明我也是第一次使用mybatis-plus。
稍微熟悉我的人都知道我是地地道道 jpa党(可能因为启蒙公司是jpa的忠实使用者)。然后一个技术稍稍熟悉了,就不太愿意在能使用的前提下学习陌生的技术了,而且我依稀还记得当年的mybatis,几百行mapper文件支配的恐惧。所以一直淡淡的抗拒。
但是毕竟公司不是我家开的,作为一个java程序员,该会的还是要学习的,所以今天下定决心,学习mybatis-plus。
首先,我是从官网开始学习的,这里官网地址贴一下。感觉写的满清晰的(有vue的既视感)
MyBatis-Plus

然后开始正式使用:

1.导包

任何框架第一步几乎都是导包,然后我是spring boot。maven。

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

然后不得不说官网很贴心啊,各种方式的导入都有,你和我不一样的话我建议你去官网自己找。

2.配置

在启动类加上注解:
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")


image.png

同样如果不是spring boot项目的话,去官网看spring mvc的配置方法

3.代码生成器

选择用了mp,不用代码生成器我不知道还有什么意义了。第一次接触这个的我简直惊呆了~~爽到不行的一步到位。从controller到service到entity到mapper。
然后使用起来也挺简单的。据说两种方式生成,反正我用了比较简单的那种。
就是main运行。
官网说的也还算清楚,有耐心的同学可以去看看,然后对于现在喜欢现成的我
直接找了生成器的使用,也看到一些不错的帖子参考帖子。有兴趣的也可以去看看。写的挺清楚的,但是中间一些小问题:
首先,贴主用的mp版本比较低,是二点几的。我用的是最新版三点多,所以有一些小改动。因为我出于试水阶段,所以很多功能都暂时不知道干啥用的,但是原文的注释很清楚,所以只是大体有个了解。

首先:添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

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

因为例子都是用的Freemarker没用默认,所以我下面也是Freemarker的依赖。

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
</dependency>
package com.game.chat.generate;

import com.baomidou.mybatisplus.annotation.DbType;
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.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
 
/**
 * <p>
 * 代码生成器演示
 * </p>
 */
public class MpGenerator {
 
    /**
     * <p>
     * MySQL 生成演示
     * </p>
     */
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        // 选择 freemarker 引擎,默认 Veloctiy
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
 
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setAuthor("Mht");
        gc.setOutputDir("D://EclipseWorkSpace/game-chat-login/src/main/java");
        gc.setFileOverride(false);// 是否覆盖同名文件,默认是false
        gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        /* 自定义文件命名,注意 %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() {
            // 自定义数据库表字段类型转换【可选】
            @SuppressWarnings("unused")
            public DbColumnType processTypeConvert(String fieldType) {
                System.out.println("转换类型:" + fieldType);
                // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
                return (DbColumnType) super.processTypeConvert(gc, fieldType);
            }
        });
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("");
        dsc.setUrl("jdbc:mysql://localhost:3306/game-chat?serverTimezone=GMT%2B8&characterEncoding=UTF-8");
        mpg.setDataSource(dsc);
 
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
        strategy.setTablePrefix(new String[] { "user_" });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.no_change);// 表名生成策略
        strategy.setInclude(new String[] { "user" }); // 需要生成的表
        // strategy.setExclude(new String[]{"test"}); // 排除生成的表
        // 自定义实体父类
        // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");
        // 自定义实体,公共字段
        // 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.game.chat");
        mpg.setPackageInfo(pc);
        mpg.execute();
    } 
}

因为我跑完以后忘记截图了,所以。。。反正应该不会出问题。
需要注意这两句代码:

 gc.setOutputDir("D://EclipseWorkSpace/game-chat-login/src/main/java");// 设置文件输出路径
pc.setParent("com.game.chat");// 父包名

蓝色的是我生成器的类,红色的是生成器生成的类。对了,因为我表名就是user,所以上面有个表名的地方也是user,要和实际相符!
另外,我是eclipse,生成器运行完毕后,文件夹里生成文件了,但是项目里一时间没有导入,用了差不多三分钟多才在项目里刷新出来!这个大家如果和我一样别着急。


包结构

4.使用mybatis plus

其实这个mybatis plus的基本使用还是蛮简单的,因为我现在手头也没有具体的业务,不太像为了演示而演示,弄一大堆复杂查询显示NB,所以只是演示了几种基本是使用方法:
说到mp的使用,一个强大又神奇的不得不提的存在出现了:条件构造器wapper

截图自mybatisPlus官网

由此可看出wapper很重,用的时候需谨慎。
但是方便也是真的方便,这里简单说一下wapper的函数及意义:
截图自网上

截图自网上

然后wapper要怎么使用这些函数呢?简单的不行。
第一步肯定是new一个wapper对象:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();

然后第二步,开始写条件。这里有两种写法,一种是直接写,条件的key是数据库中的字段名,value就是你输入的条件。

queryWrapper.eq("name", userName );

而第二种用法就是直接用lambda表达式,将实体的这个属性获取到,不用输入字面量:

queryWrapper.lambda().eq(User::getName, userName);

(这里只用等于做个例子,别的大于小于等等都是一样的)然后把这个queryWrapper作为一个参数传到我们的方法里就ok了!另外说个题外话,这个queryWrapper是继承于Map的,所以在mapper中方法的参数也只要是map就好了。
差不多mybatis-plus的基本应用就到这里了,然后现在mybatis也学着jpa一样有着很多基础crud的接口,有兴趣的可以自己看看这块,毕竟满足不了百分百业务需求,但是满足百分之八十还是可以做到的。(这里我先接触的jpa的基本crud方法,所以我也不确定是mybatis现有的还是jpa,说错了勿喷,谢谢)
至此,spring boot整合 mybatis-plus的简单使用就到这里,如果有问题比较推荐mybatis plus官方文档mybatis plus官网手册
全文手打不易,如果你觉得有帮到你或者有点用,别吝啬的点个喜欢和点个关注哦~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容