ãSpringBoot DBç³»åãMybatis-Plus 代ç èªå¨çæ
ä¸ä¸ªç®åçå®ä¾å·¥ç¨ï¼ä»ç»å©ç¨ mybatis-plus ç代ç èªå¨çææ件ï¼æ ¹æ®è¡¨ç»ææ¥çæ对åºçç±»å xml é ç½®æ件
I. 代ç çæ
æ¬æ主è¦å 容æ¥èªå®æ¹æç¨ï¼éè¿å®ä¾æ¹å¼ä»ç»ä»£ç çæè¿ç¨
1. åå¤
åå¤ä¸¤å¼ 表ï¼ç¨äºæµè¯
CREATE TABLE `userT0` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '' COMMENT 'ç¨æ·å',
`pwd` varchar(26) NOT NULL DEFAULT '' COMMENT 'å¯ç ',
`isDeleted` tinyint(1) NOT NULL DEFAULT '0',
`created` varchar(13) NOT NULL DEFAULT '0',
`updated` varchar(13) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `story_t0` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`userId` int(20) unsigned NOT NULL DEFAULT '0' COMMENT 'ä½è
çuserID',
`name` varchar(20) NOT NULL DEFAULT '' COMMENT 'ä½è
å',
`title` varchar(26) NOT NULL DEFAULT '' COMMENT 'å¯ç ',
`story` text COMMENT 'æ
äºå
容',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0',
`create_at` varchar(13) NOT NULL DEFAULT '0',
`update_at` varchar(13) NOT NULL DEFAULT '0',
`tag` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userId` (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
请注æï¼ä¸é¢ä¸¤å¼ 表çå½åæ ¼å¼å¹¶ä¸ä¸æ ·ï¼æçæ¯é©¼å³°ï¼æçæ¯ä¸å线ï¼ä¸»è¦ä¸ºäºæ¼ç¤ºä¸å表åï¼å¯¹äºçæ代ç çå½±åï¼
2. é ç½®ä¾èµ
é¦å éè¦å¨æ们ç xml æ件ä¸ï¼æ·»å ç¸å ³çä¾èµ
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- ä¸é¢ä¸¤ä¸ªï¼ç¨äºæµè¯çæåç代ç ï¼å¨çæ代ç æ¶ï¼å¯ä»¥ä¸éè¦-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
3. 代ç çæç±»
åä¸ä¸ªä»£ç çæç±»æ¹æ³ï¼ä¸»è¦é»è¾å¦ä¸
public class CodeGenerator {
public static void main(String[] args) {
// 代ç çæå¨
AutoGenerator mpg = new AutoGenerator();
// å
¨å±é
ç½®
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir") + "/spring-boot/106-mybatis-plus-generator";
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("YiHui");
gc.setOpen(false);
// è¦çå
gc.setFileOverride(false);
mpg.setGlobalConfig(gc);
// æ°æ®æºé
ç½®
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/story?useUnicode=true&characterEncoding=UTF-8&useSSL=false");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("");
mpg.setDataSource(dsc);
// å
é
ç½®
PackageConfig pc = new PackageConfig();
// ä¸é¢å¤æå®æ¨¡åï¼å¦ææå®ä¸º testï¼åçæçxmlä¼å¨ mapper/test/ ç®å½ä¸
pc.setModuleName("");
pc.setParent("com.git.hui.boot.mybatis.plus");
mpg.setPackageInfo(pc);
// èªå®ä¹é
ç½®
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// å¦æ模æ¿å¼ææ¯ freemarker
String templatePath = "/templates/mapper.xml.ftl";
// èªå®ä¹è¾åºé
ç½®
List<FileOutConfig> focList = new ArrayList<>();
// èªå®ä¹é
ç½®ä¼è¢«ä¼å
è¾åº
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// èªå®ä¹è¾åºæ件å ï¼ å¦æä½ Entity 设置äºååç¼ãæ¤å¤æ³¨æ xml çå称ä¼è·çåçååï¼ï¼
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/" +
tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// é
置模æ¿
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
// ä¸èªå¨çæcontrollerç±»
templateConfig.setController(null);
mpg.setTemplate(templateConfig);
// çç¥é
ç½®
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// strategy.setSuperEntityClass("ä½ èªå·±çç¶ç±»å®ä½,没æå°±ä¸ç¨è®¾ç½®!");
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// å
Œ
±ç¶ç±»
// strategy.setSuperControllerClass("ä½ èªå·±çç¶ç±»æ§å¶å¨,没æå°±ä¸ç¨è®¾ç½®!");
// åäºç¶ç±»ä¸çå
Œ
±å段
// strategy.setSuperEntityColumns("id");
// 设置éè¦çæç表å
strategy.setInclude("userT0", "story_t0");
strategy.setControllerMappingHyphenStyle(true);
// strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
ä¸é¢ç代ç ï¼ç»å¤§é¨åé½æ¯éç¨çï¼ä¸é¢çé说æéè¦æ³¨æçç¹
-
: 设置代ç è¾åºç项ç®æ ¹è·¯å¾ï¼è¯·æ ¹æ®å ·ä½ç项ç®è¦æ±è¿è¡æå®ï¼ä¸å å«å åå¦GlobalConfig#setOutputDir
-
: 设置为 trueï¼åæ¯æ¬¡çæé½ä¼è¦çä¹åçæç代ç ï¼éç¨äºè¡¨ç»æåçååçåºæ¯GlobalConfig#setFileOverride(true)
- 注æï¼ä¼å¯¼è´ä¹åæ·»å çä¸å¡ä»£ç 被è¦çæï¼éè¦é¢å¤æ³¨æ
- é常å¸æ设置为 falseï¼å½è¡¨ç»æåçååæ¶ï¼æå¨ä»å ¥
-
: æ°æ®æºç设置ï¼ä¸é¢è®¾ç½®çæ¯ mysql çç¸å ³é ç½®DataSourceConfig
-
: å ä¿¡æ¯PackageConfig
-
: java å è·¯å¾setParent
-
: 设置模ååï¼å¦è®¾ç½®ä¸º testï¼å xml å¨setModuleName
ç®å½ä¸; parent å èªå¨å ä¸mapper/test/
.test
-
-
: xml æ件åFileOutConfig
-
: 模æ¿é ç½®TemplateConfig
- å¯ç¨é»è®¤ç代ç çæ模æ¿ï¼ä¹å¯ä»¥ä½¿ç¨èªå®ä¹ç模æ¿
- ä¸æ³çææ个模æ¿ç±»æ¶ï¼è®¾ç½®ä¸º null å³å¯ï¼å¦ä¸é¢çä¸çæ controllerï¼
-
: çç¥é ç½®StrategyConfig
- å¯ä»¥æå® db->pojo å段åçæ å°è§å
- å¯ä»¥æå® POJO/Controller 继æ¿èªå®ä¹çåºç±»
å¨ IDEA ä¸ï¼ç´æ¥å³é®æ§è¡ä¸é¢ç代ç ï¼å°±ä¼çæç®æ ç±»ï¼å¦ä¸æªå¾
4. è¾åºæµè¯
æµè¯æ们çæçç±»ï¼æ¯å¦å¯ä»¥å¯¹ db è¿è¡æä½ï¼åæå¿ è¦åä¸ä¸ªå¯å¨ç±»
@RestController
@SpringBootApplication
@MapperScan("com.git.hui.boot.mybatis.plus.mapper")
public class Application {
@Autowired
private IUserT0Service userT0Service;
@GetMapping
public UserT0 hello(int id) {
return userT0Service.getById(id);
}
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
请注æä¸é¢ç
@MapperScan
注解ï¼å ¶æ¬¡å¯¹åºç
application.yml
é ç½®æ件å 容å¦ä¸
spring:
datasource:
# 注ææå®æ¶åº
url: jdbc:mysql://127.0.0.1:3306/story?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password:
mybatis-plus:
configuration:
# æ§è¡çsqlè¯å¥æ¥å¿è¾åº
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
å¨ db ä¸æå ¥ä¸æ¡æ°æ®
INSERT INTO `userT0` (`id`, `name`, `pwd`, `isDeleted`, `created`, `updated`)
VALUES
(1, 'ä¸ç°ç°', 'yihuihuiblog', 0, '2020-04-06 15', '2020-04-06 15');
è®¿é® url:
http://localhost:8080/?id=1
æ§å¶å°è¾åºå¦ä¸:
5. ç¹æ®åºæ¯è¯´æ
ä¸é¢ç代ç çæï¼é对é¦æ¬¡æ§è¡çææç æ¶ï¼é®é¢ä¸å¤§ï¼ä½æ¯åç»çä¸å¡å¼åä¸ï¼æ»ä¼æä¸äºå ¶ä»çæ åµï¼ä¸é¢åå«è¯´æ
a. 表ç»æä¿®æ¹
å½è¡¨çç»æåçååæ¶ï¼æ们éè¦ä¸è¬éè¦éæ°çæ对åºç Entityï¼è¿ä¸ªæ¶åï¼éè¦
GlobalConfig#setFileOverride(true)
b. 继æ¿å ¬ç¨ POJO
æ们å¯ä»¥å®ä¹ä¸ä¸ªéç¨ç PO ç±»ï¼å¸æææç表çæç POJO 继æ¿å®
@Data
public class BasePo implements Serializable {
private static final long serialVersionUID = -1136173266983480386L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
}
å¨ä»£ç èªå¨çæç±»ççç¥é ç½®ä¸ï¼æ·»å ä¸é¢ç两è¡è®¾ç½®å³å¯
// ææå®ä½ç±»ç»§æ¿èª BasePo, ä¸idå¨ç¶ç±»ä¸
StrategyConfig strategy = new StrategyConfig();
strategy.setSuperEntityClass(BasePo.class);
strategy.setSuperEntityColumns("id");
c. çæé¨å代ç
æäºæ¶åï¼æ并ä¸å¸æçæ
service
,
xml
ï¼å¯è½å°±åªéè¦å®ä½ç±» +
mapperæ¥å£
ï¼è¿ä¸ªæ¶åå¯ä»¥è®¾ç½®
TemplateConfig
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setController(null);
templateConfig.setEntityKt(null);
templateConfig.setService(null);
templateConfig.setServiceImpl(null);
II. å ¶ä»
0. 项ç®
ç³»ååæ- ãDB ç³»åãMybatisPlus æ´åç¯
- ãDB ç³»åãMybatis+注解æ´åç¯
- ãDB ç³»åãMybatis+xml æ´åç¯
- å·¥ç¨ï¼ https://github.com/liuyueyi/spring-boot-demo
- æºç ï¼ https://github.com/liuyueyi/spring-boot-demo/blob/master/spring-boot/106-mybatis-plus-generator
1. ä¸ç°ç° Blog
尽信书åä¸å¦ï¼ä»¥ä¸å 容ï¼çº¯å±ä¸å®¶ä¹è¨ï¼å 个人è½åæéï¼é¾å æçæ¼åé误ä¹å¤ï¼å¦åç° bug æè ææ´å¥½ç建议ï¼æ¬¢è¿æ¹è¯ææ£ï¼ä¸åææ¿
ä¸é¢ä¸ç°ç°ç个人å客ï¼è®°å½ææå¦ä¹ åå·¥ä½ä¸çåæï¼æ¬¢è¿å¤§å®¶åå»éé
- ä¸ç°ç° Blog 个人å客 https://blog.hhui.top
- ä¸ç°ç° Blog-Spring ä¸é¢å客 http://spring.hhui.top
http://weixin.qq.com/r/FS9waAPEg178rUcL93oH (äºç»´ç èªå¨è¯å«)