前言:mybatis-plus官網:https://mp.baomidou.com/
自己最近在學習使用mybatis-plus結合springboot快速搭建持久化服務,但是mybatis-plus(以下簡稱mp)連接mysql還好,連接postgresql,特別是指定postgresql指定數據庫下的指定module的時候,總是報錯。就是我只能連接到默認public的模式上。爲了解決這個問題我真的是煞費苦心。
在springboot中引入我們需要的依賴以及相應版本
<properties>
<java.version>1.8</java.version>
<guli.version>0.0.1-SNAPSHOT</guli.version>
<mybatis-plus.version>3.0.5</mybatis-plus.version>
<velocity.version>2.0</velocity.version>
<swagger.version>2.7.0</swagger.version>
<poi.version>3.9</poi.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--開發者工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!--lombok用來簡化實體類:需要安裝lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis-plus 持久層-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- velocity 模板引擎, Mybatis Plus 代碼生成器需要 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--添加tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!--xlsx-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!--日期格式化工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
引入模塊後我們還需要在application.properties中配置必要的數據庫屬性,否者代碼生成器會啓動失敗。
# 服務端口
server.port=8012
# 服務名
spring.application.name=xxx
# 環境設置:dev、test、prod
spring.profiles.active=dev
//數據庫的地址以及端口號
spring.datasource.url=jdbc:postgresql://your ip:5432/okapi2?currentSchema=test
spring.datasource.username=folio_admin
spring.datasource.password=your password
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
#mybatis日誌
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#返回json的全局時間格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#spring.jackson.time-zone=GMT+8
#配置mapper xml文件的路徑
mybatis-plus.mapper-locations=classpath:com/atguigu/jiankong/jiankongservice/mapper/xml/*.xml
在上面的配置文件中配置上自己的屬性後,就可以啓動自己的代碼生成器了,代碼生成器如下
@Test
public void run() {
// 1、創建代碼生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("testjava");
gc.setOpen(false); //生成後是否打開資源管理器
gc.setFileOverride(false); //重新生成時文件是否覆蓋
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER_STR); //主鍵策略
gc.setDateType(DateType.ONLY_DATE);//定義生成的實體類中日期類型
gc.setSwagger2(true);//開啓Swagger2模式
mpg.setGlobalConfig(gc);
// 3、數據源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:postgresql://39.106.33.252:5432/okapi2");
dsc.setDriverName("org.postgresql.Driver");
dsc.setSchemaName("test");
dsc.setUsername("folio_admin");
dsc.setPassword("calis123");
dsc.setDbType(DbType.POSTGRE_SQL);
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("jiankongservice"); //模塊名
pc.setParent("com.atguigu.jiankong");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("rr");
strategy.setNaming(NamingStrategy.underline_to_camel);//數據庫表映射到實體的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成實體時去掉表前綴
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//數據庫表字段映射到實體的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter鏈式操作
strategy.setRestControllerStyle(true); //restful api風格控制器
strategy.setControllerMappingHyphenStyle(true); //url中駝峯轉連字符
mpg.setStrategy(strategy);
// 6、執行
mpg.execute();
}
我的代碼生成器是寫在test中的一個方法。
畫重點了:
在我的代碼生成器中有這麼一段代碼
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("jiankongservice"); //模塊名
pc.setParent("com.atguigu.jiankong");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
大家只需要將
pc.setModuleName("jiankongservice"); //模塊名
pc.setParent("com.atguigu.jiankong");這兩行代碼與自己項目中的路徑一致就行,也可以按照我的路徑命名那個,或者按照自己的需求更改。
// 3、數據源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:postgresql://39.106.33.252:5432/okapi2");
dsc.setDriverName("org.postgresql.Driver");
dsc.setSchemaName("test");
dsc.setUsername("folio_admin");
dsc.setPassword("calis123");
dsc.setDbType(DbType.POSTGRE_SQL);
mpg.setDataSource(dsc);
數據源配置中有這麼一行,dsc.setSchemaName("test");,是我翻看文檔才發現的,在連接postgresql時,可以指定這個值爲自己module的值,這樣我們就可以指定module利用強大的mp生成我們需要的文件了。然後制定自己的數據庫地址還有密碼。
然後就可以執行test方法。在我們的路徑下就會生成相應的entity,mapper,controller,service等
還有一點我要提一下,就是我們要在配置文件中指定我們的module,如果使用的是public,可以不指定。
spring.datasource.url=jdbc:postgresql://your ip:5432/okapi2?currentSchema=test
就是配置文件中的這行代碼
我的postgresql是9.6的,所以使用的是currentSchema,低版本的好像是其他的路徑
postgresql-> 9.3 及以前的版本指定方式
spring.datasource.url=jdbc:postgresql://localhost:5432/postgresql?searchpath=newschema
postgresql-> 9.4 及以後的版本指定方式
spring.datasource.url=jdbc:postgresql://localhost:5432/postgresql?currentSchema=newschema
配置文件中修改完後,我們就可以使用mybatis-plus寫自己的邏輯代碼了。邏輯代碼不在演示。