额,首先,这里声明我也是第一次使用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")
同样如果不是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
由此可看出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官网手册
全文手打不易,如果你觉得有帮到你或者有点用,别吝啬的点个喜欢和点个关注哦~~