一天学会PostgreSQL10

本文详细介绍PostgreSQL的功能,包括增删改查、排序、分组等,并通过实例展示如何在Spring Boot项目中使用JPA与PostgreSQL进行整合。

 

要:mysql和Postgre10 两个数据库其实基本是一样的,个人感觉Postgre比mysql功能更加多一些,接下来全面介绍下Postgre10所有的功能以及Springboot+postgre项目的搭建(以JPA为例,简单易懂)

(一、介绍    二、Postgre10所有功能   三、Springboot+JPA+Postgre10)

一、介绍

1. PostgreSQL支持文本,图像,声音和视频,并包括用于C/C++,Java,Perl,Python,Ruby,Tcl和开放数据库连接(ODBC)的编程接口。PostgreSQL支持SQL的许多功能,例如复杂SQL查询,SQL子选择,外键,触发器,视图,事务,多进程并发控制(MVCC),流式复制(9.0),热备(9.0))

2.工具:【1】Navicat for Postgre 【2】pgAdmin4

二、功能

1.增删改查:

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)  
VALUES (value1, value2, value3,...valueN);
DELETE FROM table_name  
WHERE [condition];
UPDATE table_name  
SET column1 = value1, column2 = value2...., columnN = valueN  
WHERE [condition];
SELECT * FROM "table_name";

2.排序:

SELECT column-list  
FROM table_name  
[WHERE condition]  
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

3.分组,Having:

SELECT column1, column2  
FROM table1, table2  
WHERE [ conditions ]  
GROUP BY column1, column2  
HAVING [ conditions ]  
ORDER BY column1, column2

4.条件语句符( AND, OR, NOT, LIKE, IN, NOT IN, BETWEEN AND)

SELECT column1, column2, ..... columnN    
FROM table_name    
WHERE [search_condition]    
AND [search_condition];
SELECT column1, column2, ..... columnN    
FROM table_name    
WHERE [search_condition]    
OR [search_condition];
SELECT *  
FROM EMPLOYEES  
WHERE (NAME = 'Minsu' AND ADDRESS = 'Delhi')  
OR (ID>= 8);

查询那些地址不为NULL的记录信息,执行以下查询:

SELECT *  
FROM EMPLOYEES  
WHERE address IS NOT NULL ;
SELECT *   
FROM EMPLOYEES   
WHERE NAME LIKE 'Ma%';

.......

5.链接方式(左连接,右连接,内连接,全链接,跨连接)

  • 内连接(INNER JOIN ON)
  • 左外连接(LEFT OUTER JOIN On)
  • 右外连接(RIGHT OUTER JOIN ON)
  • 全连接(FULL OUTER JOIN  ON)
  • 跨连接(CROSS JOIN)===类似笛卡尔积

6.视图(视图的意思是从一个表中挑选出来的数据自动当成一个表来存储)

CREATE VIEW current_employees AS  
SELECT NAME, ID, SALARY 
FROM EMPLOYEES;

7.存储过程(一个函数表达式)

CREATE OR REPLACE FUNCTION totalRecords ()  
RETURNS integer AS $total$  
declare  
    total integer;  
BEGIN  
   SELECT count(*) into total FROM EMPLOYEES;  
   RETURN total;  
END;  
$total$ LANGUAGE plpgsql;

8.触发器(类似当执行insert update...等操作的时候,BEFORE,AFTER都会触发已经设计好的一个规则)

9.别名、时间、UNIONS 和 NULL 值:

SELECT column_name AS alias_name  
FROM table_name  
conditions...  ;
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

10.索引:

CREATE INDEX index_name  
ON table_name (column_name);

11.修改表(添加字段,修改表的数据类型,删除表的字段...)

12.截断表:

PostgreSQL TRUNCATE TABLE命令用于从现有表中删除完整的数据。您也可以使用DROP TABLE命令删除完整的表,但会从数据库中删除完整的表结构,如果希望存储某些数据,则需要重新创建此表。

它和在每个表上使用DELETE语句具有相同的效果,但由于实际上并不扫描表,所以它的速度更快。 此外,它会立即回收磁盘空间,而不需要后续的VACUUM操作。 这在大表上是最有用的。

13.事物:

  • 原子性(Atomicity):确保工作单位内的所有操作成功完成; 否则事务将在故障点中止,以前的操作回滚到其以前的状态。
  • 一致性(Consistency):确保数据库在成功提交的事务时正确更改状态。
  • 隔离性(Isolation):使事务能够独立运作并相互透明。
  • 持久性(Durability):确保在系统发生故障的情况下,提交的事务的结果或效果仍然存在。
  • BEGIN TRANSACTION:开始事务。
  • COMMIT:保存更改,或者您可以使用END TRANSACTION命令。
  • ROLLBACK:回滚更改。

14.锁:

15.子查询、自动递增:

16.权限:

【1】CREATE ROLE 表示创建了一个用户名为manisha

CREATE USER manisha WITH PASSWORD 'password';

【2】接下来,让我们给予用户“manisha”在表COMPANY上授予所有权限

GRANT ALL ON COMPANY TO manisha;

【3】接下来,让我们从用户“manisha”中撤销权限

REVOKE ALL ON COMPANY FROM manisha;

【4】REVOKE表示从用户“manisha”撤消所有权限。甚至可以删除用

 DROP USER manisha;

17.JDBC连接Java:

import java.sql.Connection;
import java.sql.DriverManager;

public class PostgreSQLJDBC {
   public static void main(String args[]) {
      Connection c = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/testdb",
            "postgres", "123");
      } catch (Exception e) {
         e.printStackTrace();
         System.err.println(e.getClass().getName()+": "+e.getMessage());
         System.exit(0);
      }
      System.out.println("Opened database successfully");
   }
}

三、Springboot+JPA+Postgre10

【1】首先添加依赖、

<dependency>
   <groupId>postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <version>9.1-901-1.jdbc4</version>
</dependency>
<dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <scope>runtime</scope>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>


<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.16.10</version>
</dependency>

【2】配置properties文件,连接自己的数据库

用户名是默认的不用改,只需要更改密码就好了

spring.datasource.url=jdbc:postgresql://localhost:5432/chengjian
spring.datasource.username=postgres
spring.datasource.password=123456
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.hbm2ddl.auto=update

【3】创建Entity,利用JPA对应生成表

运行启动,Postgre生成相应的表

import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Data
public class TModel {
    @Id
    private Integer id;

    private String descName;
    private String hobby;
    private int    number;
}

【4】写dao,controller两层

dao:

import com.mdxl.pg.entity.TModel;
import org.springframework.data.jpa.repository.JpaRepository;


public interface ModelRepository extends JpaRepository<TModel,Integer> {
}

controller:

@Controller
@RequestMapping(value = "/pg")
public class UserController {

    @Autowired
    UserRepository userRepository;
    @Autowired
    ModelRepository modelRepository;

   //save
    @RequestMapping(value = "/save",method = RequestMethod.POST)
    public void save(){

        TModel model = new TModel();
        Random random = new Random(1000);
        model.setId(random.nextInt());
        model.setDescName("第一个描述");
        model.setHobby("游戏");
        modelRepository.save(model);
    }
    //delete
    @RequestMapping(value = "del/{id}",method = RequestMethod.GET)
    public String del(@PathVariable("id")int id){
        TModel model =modelRepository.findOne(id);
        modelRepository.delete(model);
        return "success";
    }
    //update
    @RequestMapping(value = "/update",method = RequestMethod.POST)
    public String update(@PathParam("id")int id){
        TModel model = new TModel();
        model.setHobby("修改下这个爱好");
        modelRepository.save(model);
        return model.toString();
    }
    //select
    @RequestMapping(value = "/get",method = RequestMethod.GET)
    @ResponseBody
    public String getList(){
        List<UserPerson> list = userRepository.findAll();
        return list.toString();
    }

}

【5】测试成功(利用postMan测试工具测就好了)

如果失败的话注意下细节,实在不行私信我帮你。

转载于:https://my.oschina.net/mdxlcj/blog/1608032

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值