當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Springboot+MyBatis-plus+postgresSQL 的整合
生活随笔
收集整理的這篇文章主要介紹了
Springboot+MyBatis-plus+postgresSQL 的整合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://blog.csdn.net/xuxiannian/article/details/99625085
?
Springboot+MyBatis-plus+postgresSQL 的整合
禛陌?2019-08-15 12:20:10??6752??收藏?7
分類專欄:?技術相關?文章標簽:?Springboot+MyBatis-plus+postgresSQL
版權
磨叨一下
MyBatis-plus 請參看https://mp.baomidou.com/,之前也有寫過一個較簡單的入門級文章,可以參看 在整合的過程中遇到了一些坑,來扒一扒。 (1) 首先在利用MyBatis-plus-generator 的AutoGenerator類生成代碼階段,死活不生成相應的類。換成MYSQL也是OK的, Oracle也是沒有問題。寫了一個PostresSQL的直連操作也OK,這說明驅動和連接地址是OK的,問題出在生成過程中。跟入源碼,發現在生成時,postgres如果不指定命名空間,會自動加一個命名空間為public。我給數據庫分了命名空間,所以,是這個原因,無法找到相應的表,所以一直不能生成相應的類,所以需要給dataSourceConfig.setSchemaName設置指定的命名空間.... 源碼在 com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder.getTablesInfo方法中如下圖所示:- 1
- 2
- 3
- ?
1.配制POM
<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.16</version></dependency><!--數據庫驅動postgresSQL--><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.5.jre7</version></dependency><!--mybatis-plus依賴,報了一個spi錯,大致查了下,據說是javssist(3.15.0-GA)版本過低的問題,大家不一定會報,可能與我用的包的依賴有關。所以排除了javasist,在后面又加了一個高版本的。--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.21.0-GA</version></dependency><!--mybaits-plus生成代碼的依賴-><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.1.2</version></dependency><!--mybaits-plus-generator生成代碼時,會根據模板類生成相就在的類文件,所以模塊需要引入的JAR--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId></dependency>- ?
2 application.yml配制
# springboot整合postgres連接配制 spring:datasource:url: jdbc:postgresql://192.168.1.84:5432/supervison_platformusername: supervisonpassword: 123driver-class-name: org.postgresql.Driver #解決整合后報的一個錯:<aused by: java.sql.SQLFeatureNotSupportedException: 這個 org.postgresql.jdbc.PgConnection.createClob() 方法尚未被實作。> jpa:properties:hibernate:jdbc:lob:non_contextual_creation: true #mybatis-plus整合,加了表前綴的全局配制,加了類中與表中駝峰的映射,不加會查不出數據,因無法做表與類字段映射 mybatis-plus:global-config:db-config:table-prefix: platform.mapper-locations: classpath*:mapper/*Mapper.xmltype-aliases-package: com.zhanglu.test.supervison.api.dao.entityconfiguration:map-underscore-to-camel-case: true- ?
generator生成代碼
package com.zhanglu.test.supervison.api.util;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Scanner;import static com.baomidou.mybatisplus.generator.config.rules.DateType.ONLY_DATE;/*** @author zhanglu* @ClassName: CodeGeneration* @Description: 代碼生成器* @date 2019年8月14日 下午2:55:14*/ public class CodeGeneration {public static String scanner(String tip) {/** 查詢出當前庫所有表信息* SELECT A.tablename, obj_description(relfilenode, 'pg_class') AS comments FROM pg_tables A, pg_class B WHERE A.schemaname='platform' AND A.tablename = B.relname*/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 + "!");}/*** @param args* @Title: main* @Description: 生成*/public static void main(String[] args) {AutoGenerator mpg = new AutoGenerator();// 全局配置GlobalConfig gc = new GlobalConfig();final String projectPath = System.getProperty("user.dir") + "/supervison-api";String filePath = projectPath + "/src/main/java";System.out.println("生成文件 的路徑為:" + filePath);gc.setOutputDir(filePath); // gc.setOutputDir("E://code"); // gc.setFileOverride(true); // gc.setActiveRecord(false);// 不需要ActiveRecord特性的請改為false // gc.setEnableCache(false);// XML 二級緩存 // gc.setBaseResultMap(true);// XML ResultMap // gc.setBaseColumnList(false);// XML columListgc.setOpen(false);gc.setDateType(ONLY_DATE);gc.setAuthor("zhanglu_autoGeneration");// 作者// 自定義文件命名,注意 %s 會自動填充表實體屬性! // gc.setControllerName("%sAction"); // gc.setServiceName("%sService"); // gc.setServiceImplName("%sServiceImpl"); // gc.setMapperName("%sMapper"); // gc.setXmlName("%sMapper");mpg.setGlobalConfig(gc);// 數據源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setDriverName("org.postgresql.Driver");dsc.setUsername("supervison");dsc.setPassword("123");dsc.setDbType(DbType.POSTGRE_SQL);dsc.setUrl("jdbc:postgresql://10.212.170.84:5432/supervison_platform");dsc.setSchemaName("platform");mpg.setDataSource(dsc);// 包配置final PackageConfig pc = new PackageConfig(); // pc.setModuleName("");pc.setParent("com.chnenergy.monitoring.supervison.api.dao");//以下生成的類類型的map的KEY值,可以去常量類中ConstVal獲得,為了省事,直接寫了字符串Map m = new HashMap();m.put("entity_path", gc.getOutputDir() + File.separator + (pc.getParent().replaceAll("\\.", "\\" + File.separator)) + "/entity");m.put("mapper_path", gc.getOutputDir() + File.separator + (pc.getParent().replaceAll("\\.", "\\" + File.separator)) + "/mapper"); // m.put("service_path",gc.getOutputDir() + File.separator + (pc.getParent().replaceAll("\\.", "\\" + File.separator)) +"/service"); // m.put("service_impl_path",gc.getOutputDir() + File.separator + (pc.getParent().replaceAll("\\.", "\\" + File.separator)) + "/service/impl"); // m.put(ConstVal.CONTROLLER_PATH,gc.getOutputDir() + File.separator + (pc.getParent().replaceAll("\\.", "\\" + File.separator)) + "controller"); // m.put(ConstVal.XML_PATH,gc.getOutputDir() + File.separator + (pc.getParent().replaceAll("\\.", "\\" + File.separator)) + "/xml");pc.setPathInfo(m);// 自定義配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};cfg.setFileOutConfigList(null);mpg.setCfg(cfg);mpg.setPackageInfo(pc);// 配置模板TemplateConfig templateConfig = new TemplateConfig();// 配置自定義輸出模板//指定自定義模板路徑,注意不要帶上.ftl/.vm, 會根據使用的模板引擎自動識別// templateConfig.setEntity("templates/entity2.java");// templateConfig.setService();// templateConfig.setController(); // templateConfig.setXml(TEMPLATE_XML);mpg.setTemplate(templateConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel); // strategy.setTablePrefix("platform");//strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);// 寫于父類中的公共字段//strategy.setSuperEntityColumns("id");strategy.setInclude(scanner("表名,多個英文逗號分割").split(",")); // strategy.setControllerMappingHyphenStyle(true); // strategy.setTablePrefix(pc.getModuleName() + "_");mpg.setStrategy(strategy);mpg.setTemplateEngine(new FreemarkerTemplateEngine());// 執行生成mpg.execute();}}- ?
生成的結構如下所示:
當然,完全可以去掉xml,沒啥用,也可以生成實現類和controller類,SQL可以通過JPA方式直接寫就行,eg:
- ?
上個測試用例跑一下
package com.zhanglu.test.supervison.api.service.impl;import com.zhanglu.test.supervison.api.dao.entity.PhoOrganization; import com.zhanglu.test.supervison.api.dao.mapper.PhoOrganizationMapper; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;@SpringBootTest @RunWith(SpringRunner.class) public class PhoOrganizationServiceImplTest {@Autowiredprivate PhoOrganizationMapper mapper;@Testpublic void query() {PhoOrganization organization = mapper.selectById("ac524ede04b847079cb44c9db4fde14e");System.out.println(organization.getAddress());}}- 1
?
以上就OK了,大半天遇到的幾個小坑。整理下來,希望對大家有點幫助
總結
以上是生活随笔為你收集整理的Springboot+MyBatis-plus+postgresSQL 的整合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: legacy和UEFI启动是什么启动模式
- 下一篇: 贾跃亭:全球最 Top 的美国流行音乐之