springboot整合MyBatis-Plus和postgresql,實現postgresql選擇Module查詢數據

前言: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寫自己的邏輯代碼了。邏輯代碼不在演示。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章