=============
后端_创建项目
=============
1 新建项目
IDEA
新建项目
Spring Initializr
名称:barblog
位置:~\Projects\BarBlog\code\barblog
语言:Java
类型:Maven
组:com.weihome
工件:barblog
软件包名称:com.weihome.barblog
项目SDK:1.8
Java:8
打包:Jar
依赖项
Developer Tools
Spring Boot DevTools
Lombok
Web
Spring Web
SQL
MySQL Driver
/pom.xml:
...
...
spring-boot-starter-parent
2.2.6.RELEASE
...
...
删除/.mvn、/.gitignore、/mvnw和/mvnw.cmd。
2 添加依赖
/pom.xml:
...
org.springframework.boot
spring-boot-starter-freemarker
com.baomidou
mybatis-plus-boot-starter
3.2.0
com.baomidou
mybatis-plus-generator
3.2.0
...
3 添加配置
/src/main/resources/application.yml:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/barblogdb?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
mybatis-plus:
mapper-locations: classpath*:/mapper/**Mapper.xml
server:
port: 8081
4 建库建表
Navicat
localhost_3306右键
新建数据库...
数据库名:barblogdb
字符集:utf8
用户表:
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(64) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`email` varchar(64) DEFAULT NULL,
`password` varchar(64) DEFAULT NULL,
`status` int(5) NOT NULL,
`created` datetime DEFAULT NULL,
`last_login` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `UK_USERNAME` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `t_user` VALUES ('1', 'bear', 'bear.png', 'johnmin74@hotmail.com', '96e79218965eb72c92a549dd5a330112', '0', '2022-03-22 12:00:00', null);
INSERT INTO `t_user` VALUES ('2', 'rabbit', 'rabbit.png', 'weiyang8779@163.com', '96e79218965eb72c92a549dd5a330112', '0', '2022-03-22 12:00:00', null);
博客表:
DROP TABLE IF EXISTS `t_blog`;
CREATE TABLE `t_blog` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`title` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
`content` longtext,
`created` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`status` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `t_blog` VALUES ('1', '1', '小熊', '小熊的自我介绍', '我是小熊。', '2022-03-22 13:00:00', '0');
INSERT INTO `t_blog` VALUES ('2', '2', '小兔', '小兔的自我介绍', '我是小兔。', '2022-03-22 14:00:00', '0');
SET FOREIGN_KEY_CHECKS=0;
5 添加MyBatis-Plus配置类
/src/main/java/com/weihome/barblog/config/MybatisPlusConfig.java:
/**
* MyBatis-Plus配置类
*/
@Configuration
@EnableTransactionManagement
@MapperScan("com.weihome.barblog.mapper")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
return paginationInterceptor;
}
}
- 通过MapperScan注解指定要变成实现类的接口所在的包
- 创建并返回PaginationInterceptor类型的分页插件
6 添加代码生成器类
/src/main/java/com/weihome/barblog/CodeGenerator.java:
/**
* 代码生成器类
*/
public class CodeGenerator {
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
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("BarBlog");
gc.setOpen(false);
gc.setServiceName("%sService");
mpg.setGlobalConfig(gc);
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/barblogdb?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
PackageConfig pc = new PackageConfig();
pc.setModuleName(null);
pc.setParent("com.weihome.barblog");
mpg.setPackageInfo(pc);
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
}
};
String templatePath = "/templates/mapper.xml.ftl";
List focList = new ArrayList<>();
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + "/src/main/resources/mapper/"
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix("t_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
7 生成代码
执行CodeGenerator.main()...
请输入表名,多个英文逗号分割:
t_user,t_blog
回车生成如下代码文件:
/src/
└─main/
├─java/
│ └─com/
│ └─weihome/
│ └─barblog/
│ │
│ ├─controller/ - 控制器 <- Servlet
│ │ ├─BlogController.java
│ │ └─UserController.java
│ │
│ ├─entity/ - 实体类
│ │ ├─Blog.java
│ │ └─User.java
│ │
│ ├─mapper/ - 数据访问接口 <---
│ │ ├─BlogMapper.java |
│ │ └─UserMapper.java |
│ │ |
│ └─service/ - 服务接口 <- |
│ ├─BlogService.java | |
│ ├─UserService.java Service |
│ │ | DAO
│ └─impl/ - 服务实现 <- |
│ ├─BlogServiceImpl.java |
│ └─UserServiceImpl.java |
│ |
└─resources/ |
│ |
└─mapper/ - 数据访问对象 <---
├─BlogMapper.xml
└─UserMapper.xml
控制器->服务接口 \
|多态 |
服务实现->数据访问接口 \ |
|多态 | MyBatis | MyBatis-Plus
数据访问对象 / |
|JDBC |
数据库 /
8 为控制器添加测试方法
/src/main/java/com/weihome/barblog/controller/UserController.java:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/index")
public Object index() {
return userService.getById(1L);
}
}
9 运行测试
执行BarblogApplication.main()...
http://localhost:8081/user/index
{
"id": 1,
"username": "bear",
"avatar": "bear.png",
"email": "johnmin74@hotmail.com",
"password": "96e79218965eb72c92a549dd5a330112",
"status": 0,
"created": "2022-03-22T12:00:00",
"lastLogin": null
}