要: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]UNIONSELECT 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】首先添加依赖、
postgresql postgresql 9.1-901-1.jdbc4 org.postgresql postgresql runtime org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-starter-data-jpa org.projectlombok lombok 1.16.10
【2】配置properties文件,连接自己的数据库
用户名是默认的不用改,只需要更改密码就好了
spring.datasource.url=jdbc:postgresql://localhost:5432/chengjianspring.datasource.username=postgresspring.datasource.password=123456spring.datasource.driverClassName=org.postgresql.Driverspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialectspring.jpa.properties.hibernate.hbm2ddl.auto=update
【3】创建Entity,利用JPA对应生成表
运行启动,Postgre生成相应的表
import lombok.Data;import javax.persistence.Entity;import javax.persistence.Id;@Entity@Datapublic 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{}
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(){ Listlist = userRepository.findAll(); return list.toString(); }}
【5】测试成功(利用postMan测试工具测就好了)
如果失败的话注意下细节,实在不行私信我帮你。