本文源碼: GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
創(chuàng)新互聯(lián)專注于云霄網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供云霄營銷型網(wǎng)站建設(shè),云霄網(wǎng)站制作、云霄網(wǎng)頁設(shè)計(jì)、云霄網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造云霄網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供云霄網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
PostgreSQL是一個(gè)功能強(qiáng)大的且開源關(guān)系型數(shù)據(jù)庫系統(tǒng),在網(wǎng)上PostgreSQL和MySQL一直有大量的對(duì)比分析。大多從性能,開源協(xié)議,SQL標(biāo)準(zhǔn),開發(fā)難度等去比較,只要有比較就會(huì)有差距和差異,看看就好。
絮叨一句
:編程世界里的對(duì)比是一直存在的,但是無論對(duì)比結(jié)果如何,當(dāng)業(yè)務(wù)需要的時(shí)候,該用還是要用。MySQL和PostgreSQL對(duì)比很少占上風(fēng),但是MySQL在國內(nèi)的使用依舊廣泛。
導(dǎo)入依賴包,版本會(huì)自動(dòng)加載。本案例加載的是42.2.6版本號(hào)。
org.postgresql
postgresql
這里使用Druid連接池管理。
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driverClassName: org.postgresql.Driver
url: jdbc:postgresql://127.0.0.1:5432/db_01
username: root01
password: 123456
@Configuration
public class DruidConfig {
@Value("${spring.datasource.druid.url}")
private String dbUrl;
@Value("${spring.datasource.druid.username}")
private String username;
@Value("${spring.datasource.druid.password}")
private String password;
@Value("${spring.datasource.druid.driverClassName}")
private String driverClassName;
@Bean
public DruidDataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
return datasource;
}
}
基于mybatis相關(guān)組件,在用法上和MySQL環(huán)境整合基本一致。
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
typeAliasesPackage: com.post.gresql.*.entity
global-config:
db-config:
id-type: AUTO
field-strategy: NOT_NULL
logic-delete-value: -1
logic-not-delete-value: 0
banner: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
提供一個(gè)數(shù)據(jù)查詢,寫入,分頁查的基礎(chǔ)使用案例。
@Api(value = "UserController")
@RestController
public class UserController {
@Resource
private UserService userService ;
@GetMapping("/selectById")
public UserEntity selectById (Integer id){
return userService.selectById(id) ;
}
@PostMapping("/insert")
public Integer insert (UserEntity userEntity){
return userService.insert(userEntity) ;
}
@GetMapping("/pageQuery")
public PageInfo pageQuery (@RequestParam("page") int page){
int pageSize = 3 ;
return userService.pageQuery(page,pageSize) ;
}
}
PostgreSQL支持JSON數(shù)據(jù)類型格式,但是在用法上與一般數(shù)據(jù)類型有差異。
這里字段user_list為JSON類型,存儲(chǔ)場景第一批用戶有哪些,第二批用戶有哪些,依次類推。
CREATE TABLE pq_user_json (
ID INT NOT NULL,
title VARCHAR (32) NOT NULL,
user_list json NOT NULL,
create_time TIMESTAMP (6) DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "user_json_pkey" PRIMARY KEY ("id")
);
定義一個(gè)數(shù)據(jù)庫與實(shí)體對(duì)象的轉(zhuǎn)換器,主要就是JSON數(shù)據(jù)和Java對(duì)象的轉(zhuǎn)換。
@MappedTypes({Object.class})
public class JsonTypeHandler extends BaseTypeHandler
指定字段的映射類型typeHandler即可。
INSERT INTO pq_user_json (id,title,user_list,create_time)
VALUES (#{id}, #{title}, #{userList, typeHandler=com.post.gresql.config.JsonTypeHandler}, #{createTime})
JSON格式數(shù)據(jù)入庫,出庫查詢。
@RestController
public class UserJsonController {
@Resource
private UserJsonService userJsonService ;
@GetMapping("/addUserJson")
public boolean addUserJson (){
List userEntities = new ArrayList<>() ;
UserEntity userEntity1 = new UserEntity(1,"LiSi",22,new Date());
UserEntity userEntity2 = new UserEntity(2,"WangWu",23,new Date());
userEntities.add(userEntity1);
userEntities.add(userEntity2);
UserJsonEntity userJsonEntity = new UserJsonEntity();
userJsonEntity.setId(1);
userJsonEntity.setTitle("第一批名單");
userJsonEntity.setUserList(JSON.toJSONString(userEntities));
userJsonEntity.setCreateTime(new Date());
return userJsonService.addUserJson(userJsonEntity) ;
}
@GetMapping("/findUserJson")
public List findUserJson (@RequestParam("id") Integer id){
UserJsonEntity userJsonEntity = userJsonService.findUserJson(id) ;
return JSON.parseArray(userJsonEntity.getUserList(),UserEntity.class) ;
}
}
GitHub·地址
https://github.com/cicadasmile/data-manage-parent
GitEE·地址
https://gitee.com/cicadasmile/data-manage-parent
推薦閱讀:數(shù)據(jù)管理
序號(hào) | 標(biāo)題 |
---|---|
01 | 數(shù)據(jù)源管理:主從庫動(dòng)態(tài)路由,AOP模式讀寫分離 |
02 | 數(shù)據(jù)源管理:基于JDBC模式,適配和管理動(dòng)態(tài)數(shù)據(jù)源 |
03 | 數(shù)據(jù)源管理:動(dòng)態(tài)權(quán)限校驗(yàn),表結(jié)構(gòu)和數(shù)據(jù)遷移流程 |
04 | 數(shù)據(jù)源管理:關(guān)系型分庫分表,列式庫分布式計(jì)算 |