特別說明
- MyBatis—PLus的3.0+版本對於
LocalDateTime
的支持有些差異,對於Druid的版本也有些要求。pom.xml
文件裏面的倆者的版本是我自己試驗過的,可以正常使用,如果自己更換版本,出現LocalDateTime
問題,請注意版本問題。 - 代碼生成工具使用的是
mybatis-plus-generator
,但沒有完全按照官方文檔來搞,本着能用就行的目的,一些地方與官方有點出入,生成代碼之後,還需微調一下,請注意。 - 數據庫文件
MySql
,末尾我會提供,當然您也可以使用自己的數據庫。
整合Mybatis_PLus
- 整體的項目結構。
-
修改
pom.xml
文件<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 可根據自己項目,具體調整 begin --> <groupId>com.mall</groupId> <artifactId>mall</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mall</name> <description>Demo project for Spring Boot</description> <!-- end --> <properties> <java.version>1.8</java.version> <java.version>1.8</java.version> <mybatis-plus.version>3.2.0</mybatis-plus.version> <druid.version>1.1.21</druid.version> <freemarker.version>2.3.29</freemarker.version> </properties> <dependencies> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> <scope>compile</scope> </dependency> <!-- Sping Boot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>compile</scope> </dependency> <!-- MySql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- Druid連接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- Mybatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis-plus.version}</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemarker.version}</version> </dependency> <!--Spring Aop--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 測試用例 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <filtering>false</filtering> <includes> <include>**/mapper/*.xml</include> </includes> </resource> </resources> </build> </project>
-
創建代碼生成類。一些配置會給出簡單的註釋,如果有需要的話,推薦您閱讀官方文檔。文件創建好之後,就可以運行
main
方法了,控制檯會打印出創建了哪些文件的信息。package com.mall.utils; 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; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; // 演示例子,執行 main 方法控制檯輸入模塊表名回車自動生成對應項目目錄中 public class CodeGenerator { /** * * @Title: main * @Description: 生成 * @param args */ public static void main(String[] args) { AutoGenerator mpg = new AutoGenerator(); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir("D:\\GitHubSpace\\Universal_Mall\\UniversalMall\\mall_integration\\src\\main\\java");//輸出文件路徑 gc.setFileOverride(true); gc.setActiveRecord(false);// 不需要ActiveRecord特性的請改爲false gc.setEnableCache(false);// XML 二級緩存 gc.setBaseResultMap(true);// XML ResultMap gc.setBaseColumnList(false);// XML columList gc.setAuthor("gxp");// 作者 // 自定義文件命名,注意 %s 會自動填充表實體屬性! gc.setControllerName("UserController"); gc.setServiceName("UserService"); gc.setServiceImplName("UserServiceImpl"); gc.setMapperName("UserMapper"); gc.setXmlName("UserMapper"); mpg.setGlobalConfig(gc); // 數據源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.getDbType("com.alibaba.druid.pool.DruidDataSource")); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("myoa888"); dsc.setUrl("jdbc:mysql://localhost:3308/universal_mall?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC"); mpg.setDataSource(dsc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); // strategy.setTablePrefix(new String[] { "sys_" });// 此處可以修改爲您的表前綴 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 strategy.setInclude(new String[] { "tb_user" }); // 需要生成的表 strategy.setSuperServiceClass(null); strategy.setSuperServiceImplClass(null); strategy.setSuperMapperClass(null); mpg.setStrategy(strategy); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.mall"); pc.setController("controller"); pc.setService("service"); pc.setServiceImpl("service.impl"); pc.setMapper("dao"); pc.setEntity("model"); pc.setXml("mapper"); mpg.setPackageInfo(pc); // 執行生成 mpg.execute(); } }
-
創建完成之後,會發現有個
dao
對於的xml
文件,會現在java
的目錄下,請手動把他移到resources
目錄下。(其實可以完善下那個代碼生成類的方法邏輯,比如生成倆個實例對象或者循環倆次一個JAVA
目錄,一個resources
目錄,但我比較懶還是喜歡複製下。)
- 打開
UserController
文件,修改裏面的具體代碼爲
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
public UserService userService;
@RequestMapping("getAllUser")
public List<TbUser> getAllUsers(){
List<TbUser> userList = userService.list();
return userList;
}
}
-
Service
層的代碼暫時不用調整。Mapper
的修改如下,@Mapper
註解的作用是注入到bean
,當然可以在SpringBoot
的入口類去添加@MapperScan
來設置掃描範圍。
@Mapper public interface UserMapper extends BaseMapper<TbUser> { }
-
配置配置文件,我這裏配置的
YML
格式的。# 配置mybatis-plus mybatis-plus: mapper-locations: classpath:/mapper/*.xml # 配置掃描xml type-aliases-package: com.mall.model # 實體掃描,多個package用逗號或者分號分隔
整合Druid
-
配置配置文件,我這裏配置的
YML
格式的。#數據庫連接配置 spring: datasource: url: jdbc:mysql://localhost:3308/universal_mall?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC username: root password: myoa888 driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource platform: mysql # 下面爲連接池的補充設置,應用到上面所有數據源中 # 初始化大小,最小,最大 initialSize: 5 minIdle: 3 maxActive: 20 # 配置獲取連接等待超時的時間 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 30000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: false testOnReturn: false # 打開PSCache,並且指定每個連接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆 filters: stat,wall,slf4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合併多個DruidDataSource的監控數據 #useGlobalDataSourceStat: true
-
創建
DruidStatFilter.java
package com.mall.config; import com.alibaba.druid.support.http.WebStatFilter; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; @WebFilter(filterName="druidWebStatFilter",urlPatterns="/*", initParams={ @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")//忽略資源 } ) public class DruidStatFilter extends WebStatFilter{ }
-
創建
DruidStatViewServlet.java
package com.mall.config; import com.alibaba.druid.support.http.StatViewServlet; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; @WebServlet(urlPatterns="/druid/*", //啓動項目後,訪問監控頁面的路徑。 initParams={ @WebInitParam(name="allow",value=""),// IP白名單(沒有配置或者爲空,則允許所有訪問) /* @WebInitParam(name="deny",value="192.168.1.1"),*/// IP黑名單 (存在共同時,deny優先於allow) @WebInitParam(name="loginUsername",value="admin"),// 用戶名 @WebInitParam(name="loginPassword",value="123456"),// 密碼 @WebInitParam(name="resetEnable",value="false")// 禁用HTML頁面上的“Reset All”功能 }) public class DruidStatViewServlet extends StatViewServlet { private static final long serialVersionUID = -2688872071445249539L; }
-
啓動類上面添加
@ServletComponentScan
註解。自動註冊Servlet、Filter、Listener
效果圖
登錄Druid
數據庫文件
- 給出表的sql,庫的話就自己根據需要創建吧。
/*
Navicat Premium Data Transfer
Source Server : xoa
Source Server Type : MySQL
Source Server Version : 50616
Source Host : localhost:3308
Source Schema : universal_mall
Target Server Type : MySQL
Target Server Version : 50616
File Encoding : 65001
Date: 19/02/2020 22:13:33
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for tb_user
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用戶名',
`password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密碼,加密存儲',
`phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '註冊手機號',
`created` datetime(0) NOT NULL COMMENT '創建時間',
`salt` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密碼加密的salt值',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用戶表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES (28, 'zhangsan', 'e21d44f200365b57fab2641cd31226d4', '13600527634', '2018-05-25 17:52:03', '05b0f203987e49d2b72b20b95e0e57d9');
INSERT INTO `tb_user` VALUES (30, 'leyou', '4de9a93b3f95d468874a3c1bf3b25a48', '15855410440', '2018-09-30 11:37:30', '4565613d4b0e434cb496d4eb87feb45f');
SET FOREIGN_KEY_CHECKS = 1;
結尾
只是粗淺的一篇搭建博客,具體的配置,具體的使用請閱度官方文檔