要: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测试工具测就好了)
如果失败的话注意下细节,实在不行私信我帮你。