============= 后端_创建项目 ============= 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 }