Springboot整合MybatisPlus(增删改查,代码生成)

        都说程序员的终极目标就是偷懒,虽然mybatis已经给开发带来很大便利,example类也有很多强大的功能,但是还是满足不了"勤劳"的程序员们。因此国内程序员在 Mybatis 的基础上开发了Mybatis Plus,只做增强不做改变,只为简化开发、提高效率而生。

有头有尾,我们就从新建项目开始吧:

Default和Customer按照网络情况,哪个进得去进哪个。点击Next

上下红框内名字一般保持一致 ,next

选择需要添加的依赖:
DevTools 热部署工具。Lombok:在实体类添加注解可自动生成set get tostring等代码

web项目必选

Thymeleaf一个模板引擎,类似jsp

选择sql驱动


开启自动导入

等待下载依赖。。。

项目初始化创建完成。

1、pom文件导入jar包

<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.4.0</version>
</dependency>

2、编写配置文件(数据库配置)

3、entity包下新建一个user类,使用@Data注解自动添加set get方法

4、创建mapper接口,继承BaseMapper,传入一个需要操作的泛型。

开启mapper包的扫描,注入到spring中

创建一个测试类

简单测试一个查询

如果需要在控制台查看执行的sql语句,配置文件添加:

常用注解:

1、@TableName 映射数据库的表名

该demo中如果实体类不叫User是UserInfo,则改为

2、@TableField 映射数据表非主键字段名,


exist表示是否为数据表字段 false,true

select表示是否查询该字段

fill表示是否自动填充,将对象存入数据库的时候,由Mybatis Plus自动给某些字段赋值。
(如时间create_time,update_time)
1、数据库添加该字段
2、实体类添加fill注解
3、编写Handler类,声明@Component

3、@TableId 设置主键映射,value映射主键字段名

type 设置主键类型(主键的生成策略,自增?某种算法生成?)默认NONE(雪花算法实现)
Input 如果开发人员没有赋值,则采用数据库自增的方式赋值

主键映射
type 设置主键类型

4、@Version 标记乐观锁(处理并发,防止数据被两个线程修改):通过version字段,当数据修改时,会以version作为条件 当条件成立才会成功
version=1  (如下两线程互斥)
线程1:update ...set version = 2 where version = 1
线程2:update .. set version = 2 where version = 1

1.数据库添加version字段:默认为1

2.实体类添加version成员变量,并且添加Version注解
3.编写并注册配置类

4.测试
此时乐观锁version将会修改

5、@EnumValue 通用枚举类注解,将数据库字段映射成实体类的枚举类型成员变量
方法一使用注解,
方法二 实现接口 implement IEnum<Integer> 返回Integer code

1.User表添加status字段,设置默认值为1
2.编写枚举类,使用该注解

3.UserInfo类中添加该枚举

4.application.yml中添加

5.查询所有测试

方法二:接口

6、@TableLogic 映射逻辑删除(假的删掉,如用户注销,并不是真正从数据库删除,而是设定一个标志字段)

1.User数据表添加deleted字段,默认为0 为没有删除
2.实体类添加注解

3.application.yml添加配置:

4.测试删除

再次执行查询将不再被显示deleted=1的信息

增删改查

条件查询

模糊查询

联合查询

排序

根据多个ID查询

分页查询
1.添加配置

舍弃

2.测试 current 当前页,size 每页数
注:逻辑删除deleted字段标记为1的依然不会被查到

查询一条数据:

自定义sql(注解版)多表关联查询

sql语句如下:

1.创建一个VO类

2.mapper文件添加方法

3.测试

自定义sql(xml) + 分页查询

1.Test

2.mapper里添加方法,注意 @Param(Constants.WRAPPER)

3.编写xml文件

4.测试查询

自定义sql(xml) + 分页查询 + 多表查询(一对多)

SELECT q.id, q.title,u.id uid , u.name from question q, user u
WHERE
q.creator = 220 AND u.id = 220

1.定义个VO类存储查询结果

2.Test

3.mapper里添加方法,注意 @Param(Constants.WRAPPER)

4.xml文件

5.测试

插入

删除

修改

自动生成

根据数据表自动生成实体类、Mapper,Service,ServiceImpl,Controller(比mybatis逆向工程强大?)

1、pom文件导入Mybatis Plus Generator和velocity(根据velocity模板生成,还有freemarker、Beetl)

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>

2、启动类

package com.example.demo;
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.rules.NamingStrategy;
public class Main {
public static void main(String[] args) {
//创建generator对象
AutoGenerator autoGenerator =new AutoGenerator();
//数据源
DataSourceConfig dataSourceConfig =new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/wlbnew?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
autoGenerator.setDataSource(dataSourceConfig);
//全局配置
GlobalConfig globalConfig =new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
//创建好之后打开文件
globalConfig.setOpen(false);
globalConfig.setAuthor("Jesse");
globalConfig.setServiceName("%sService");
autoGenerator.setGlobalConfig(globalConfig);
//包信息
PackageConfig packageConfig =new PackageConfig();
packageConfig.setParent("com.example.demo");
packageConfig.setModuleName("generator");
packageConfig.setController("controller");
packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");
packageConfig.setEntity("entity");
packageConfig.setMapper("mapper");
autoGenerator.setPackageInfo(packageConfig);
//配置策略
StrategyConfig strategyConfig =new StrategyConfig();
strategyConfig.setEntityLombokModel(true);
          //开启字段驼峰命名
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
autoGenerator.setStrategy(strategyConfig);
autoGenerator.execute();
}   }

运行main方法生成。

最后别忘记在DemoApplication添加MapperScan("com.example.demo.generator.mapper")扫描mapper,根据实际包名修改。

如果没有开启驼峰命名,再加

strategyConfig.setNaming(NamingStrategy.underline_to_camel);

这种生成方式会在Service名前加字母"I",如果想去掉,全局配置加:

globalConfig.setServiceName("%sService");

测试:
1、controller添加一个方法

2、application.yml配置thymeleaf

3、templates下新建一个index.html

按条件查询

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