文档章节

系统信息函数

VITO_ch123
 VITO_ch123
发布于 2016/07/11 15:03
字数 2654
阅读 20
收藏 2
点赞 0
评论 0

会话信息函数使用

查询当前数据库名
testdb=# select current_catalog,current_database();
 current_database | current_database 
------------------+------------------
 testdb           | testdb
(1 row)

当前执行的查询文本
testdb=# select current_query();
      current_query      
-------------------------
 select current_query();
(1 row)

当前模式名
testdb=# select current_schema,current_schema();
 current_schema | current_schema 
----------------+----------------
 public         | public
(1 row)

搜索路径中的模式名字,包括可选的隐式模式。
testdb=# select current_schemas('true');
   current_schemas   
---------------------
 {pg_catalog,public}
(1 row)

当前执行坏境下的用户名
testdb=# select current_user;
 current_user 
--------------
 pg94
(1 row)

查询服务器端地址和端口
testdb=# select inet_server_addr(),inet_client_port();
 inet_server_addr | inet_client_port 
------------------+------------------
 10.167.130.63    |            18267
(1 row)

查询客户端地址和端口
testdb=# select inet_client_addr(),inet_client_port();
 inet_client_addr | inet_client_port 
------------------+------------------
 10.167.130.40    |            18267
(1 row)

查询连接服务器当前会话的pid
select pg_backend_pid()
testdb=# select pg_backend_pid();
 pg_backend_pid 
----------------
          13290
(1 row)

查询配置的加载时间
testdb=# select pg_conf_load_time();
       pg_conf_load_time       
-------------------------------
 2016-07-06 23:09:36.770331+08
(1 row)

是否为另一个会话的临时模式
testdb=# select pg_is_other_temp_schema(16794);
 pg_is_other_temp_schema 
-------------------------
 f
(1 row)


正在监听当前会话的信道名称
session A 启动监听
testdb=# listen vito;
LISTEN
查询信道名称
testdb=# select pg_listening_channels();
 pg_listening_channels 
-----------------------
 vito
(1 row)
session B 发送信号
testdb=# notify vito,'1';
NOTIFY
testdb=# notify vito,'2';
NOTIFY
session A 接收信号
testdb=# begin;
BEGIN
Asynchronous notification "vito" with payload "1" received from server process with PID 13290.
Asynchronous notification "vito" with payload "2" received from server process with PID 13290.

会话的临时模式OID
testdb=# create temp table tmptbl(id int);
CREATE TABLE
testdb=# select pg_my_temp_schema();
 pg_my_temp_schema 
-------------------
             16807
(1 row)

查询服务器启动时间
testdb=# select pg_postmaster_start_time();
   pg_postmaster_start_time    
-------------------------------
 2016-07-06 23:09:36.822438+08
(1 row)

查询当前服务器的嵌套级别
testdb=# select pg_trigger_depth();
 pg_trigger_depth 
------------------
                0
(1 row)

会话用户名
testdb=# select session_user;
 session_user 
--------------
 pg94
(1 row)

当前用户
testdb=# select user;
 current_user 
--------------
 pg94
(1 row)

查询数据库版本
testdb=# select version();
                                                    version             
                                       
------------------------------------------------------------------------
---------------------------------------
 PostgreSQL 9.4.5 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4
.7 20120313 (Red Hat 4.4.7-17), 64-bit
(1 row)

访问权限查询函数

查询用户对表所有行的权限
testdb=# select has_any_column_privilege('pg94','testvarchar','update'); has_any_column_privilege 
--------------------------
 t
(1 row)

查询当前用户对表所有行的权限
testdb=# select has_any_column_privilege('testvarchar','update');
 has_any_column_privilege 
--------------------------
 t
(1 row)
表的权限必须为:SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES 或TRIGGER

查询指定用户对指定表的行的权限
testdb=# select has_column_privilege('pg94','testvarchar','id','update');
 has_column_privilege 
----------------------
 t
(1 row)

查询指定用户对指定表的行的权限
testdb=# select has_column_privilege('testvarchar','id','update');
 has_column_privilege 
----------------------
 t
(1 row)
行权限可以是:SELECT,INSERT,UPDATE,REFERENCES.

查询用户对数据的访问权限:

testdb=# select has_database_privilege('pg94','testdb','temp');
 has_database_privilege 
------------------------
 t
(1 row)
查询当前用户对数据库的访问权限
testdb=# select has_database_privilege('testdb','temp');
 has_database_privilege 
------------------------
 t
(1 row)
 用户对数据库的权限必须是:create,connect,temporary,temp.

查询指定用户对外部数据封装器的权限
testdb=# select has_foreign_data_wrapper_privilege('pg94','postgres_fdw','usage');
 has_foreign_data_wrapper_privilege 
------------------------------------
 t
(1 row)
查询当前用户对外部数据封装器的权限
testdb=# select has_foreign_data_wrapper_privilege('postgres_fdw','usage');
 has_foreign_data_wrapper_privilege 
------------------------------------
 t
(1 row)
用户对数据封装器的权限为:USAGE。

用户对函数的访问权限
testdb=# select has_function_privilege('pg94','testfun(int)','execute'); has_function_privilege 
------------------------
 t
(1 row)

当前用户对函数的访问权限
testdb=# select has_function_privilege('testfun(int)','execute'); has_function_privilege 
------------------------
 t
(1 row)
用户对函数的访问权限为:execute.

用户对语言的访问权限
testdb=# select has_language_privilege('pg94','plpgsql','usage');
 has_language_privilege 
------------------------
 t
(1 row)
当前用户对语言的访问权限
testdb=# select has_language_privilege('plpgsql','usage');
 has_language_privilege 
------------------------
 t
(1 row)
 用户对语言的访问权限:usage.

用户对模式的访问权限
testdb=# select has_schema_privilege('pg94','testsc','create');
 has_schema_privilege 
----------------------
 t
(1 row)
当前用户对模式的访问权限
testdb=# select has_schema_privilege('testsc','create,usage');
 has_schema_privilege 
----------------------
 t
(1 row)
 用户对模式的访问权限有:create,usage或者组合。

用户对序列的访问权限
testdb=# select has_sequence_privilege('pg94','testseq','select');
 has_sequence_privilege 
------------------------
 t
(1 row)
当前用户对序列的访问权限
testdb=# select has_sequence_privilege('testseq','select');
 has_sequence_privilege 
------------------------
 t
(1 row)
用户对序列的权限有:USAGE,UPDATE,SELECT之一

用户对外部服务的权限
testdb=# select has_server_privilege('pg94','server_remote_71','usage');
 has_server_privilege 
----------------------
 t
(1 row)
当前用户对外部服务的权限
testdb=# select has_server_privilege('server_remote_71','usage');
 has_server_privilege 
----------------------
 t
(1 row)
用户对外部服务的访问权限:usage

指定用户访问表的权限
testdb=# select has_table_privilege('pg94','testvarchar','select');
 has_table_privilege 
---------------------
 t
(1 row)
当前用户访问表的权限
testdb=# select has_table_privilege('testvarchar','select');
 has_table_privilege 
---------------------
 t
(1 row)
也可以使用OID
用户对表的访问权限:INSERT,DELETE,UPDATE,SELECT,TRUNCATE,REFERENCE,TRIGGER之一。

指定用户对表空间的访问权限
testdb=# select  has_tablespace_privilege('pg94','testspac','create');
 has_tablespace_privilege 
--------------------------
 t
(1 row)
当前用户对表空间的访问权限
testdb=# select  has_tablespace_privilege('testspac','create');
 has_tablespace_privilege 
--------------------------
 t
(1 row)
用户对表空间的权限:create

查询指定用户是否有角色的权限
testdb=# select pg_has_role('pg94','testrole','usage');
 pg_has_role 
-------------
 t
(1 row)
当前用户是否有指定角色权限
testdb=# select pg_has_role('testrole','usage');
 pg_has_role 
-------------
 t
(1 row)
用户对角色的权限:MEMBER,USAGE.

模式可见性查询函数


查询排序在搜索路径中是否可见
testdb=# select pg_collation_is_visible(100); --C排序
 pg_collation_is_visible 
-------------------------
 t
(1 row)

查询转换在搜索路径中是否可见
testdb=# select pg_conversion_is_visible(12201); --ascii_to_mic转换
 pg_conversion_is_visible 
--------------------------
 t
(1 row)


查询该函数在搜索路径中是否可见
testdb=# select pg_function_is_visible('testfun'::regproc);
 pg_function_is_visible 
------------------------
 t
(1 row)

查询操作符类在搜索路径中是否可见
testdb=# select pg_opclass_is_visible(10007); --abstime_ops操作符类
 pg_opclass_is_visible 
-----------------------
 t
(1 row)

查询操作符在搜索路径中是否可见
testdb=# select pg_operator_is_visible(91); =操作符
 pg_operator_is_visible 
------------------------
 t
(1 row)

查询操作符族是否在搜索路径中可见
testdb=# select pg_opfamily_is_visible(431); --char_ops
 pg_opfamily_is_visible 
------------------------
 t
(1 row)

查询表在搜索路径中是否可见   该函数可以用于视图,索引,序列
testdb=# select pg_table_is_visible('testvarchar'::regclass);
 pg_table_is_visible 
---------------------
 t
(1 row)

查询文本检索配置在搜索路径中是否可见
testdb=# select pg_ts_config_is_visible(12434);  --german 配置
 pg_ts_config_is_visible 
-------------------------
 t
(1 row)

查询文本检索词典在搜索路径中是否可见

testdb=# select pg_ts_dict_is_visible(12433); --german_stem
 pg_ts_dict_is_visible 
-----------------------
 t
(1 row)

查收文本搜索解析在搜索路径中是否可见
testdb=# select pg_ts_parser_is_visible(3722); --default
 pg_ts_parser_is_visible 
-------------------------
 t
(1 row)

文本检索模板是否在搜索路径中可见
testdb=# select pg_ts_template_is_visible(12422); --snowball
 pg_ts_template_is_visible 
---------------------------
 t
(1 row)

该类型是否在搜索路经中可见
testdb=# select pg_type_is_visible('int2vector'::regtype);
 pg_type_is_visible 
--------------------
 t
(1 row)

所有的参数均是使用OID
可以使用regclass,regtype,regprocedure,regoperator,regconfig,regdictionary对名称进行转换。


系统表信息函数

 

获取一个数据类型的SQL名称
testdb=# select format_type(atttypid,atttypmod) from pg_attribute limit 1;
 format_type 
-------------
 name
(1 row)


获取一个数据库对象的描述
pg_describe_object(catalog_id, object_id, object_sub_id)
获取一个数据库对象的身份
pg_identify_object(catalog_id oid, object_id oid, object_sub_id integer)


获取一个约束的定义
testdb=# select pg_get_constraintdef(16862);
 pg_get_constraintdef 
----------------------
 PRIMARY KEY (id)
(1 row)

testdb=# select pg_get_constraintdef(16862,'true');
 pg_get_constraintdef 
----------------------
 PRIMARY KEY (id)
(1 row)

反编译一个表达式的内部形式,假设其中的任何 Var 都引用第二个参数指出的关系
pg_get_expr(pg_node_tree, relation_oid) 
pg_get_expr(pg_node_tree, relation_oid, pretty_bool)

获取一个函数的定义
testdb=# select pg_get_functiondef('testfun'::regproc);
                  pg_get_functiondef                   
-------------------------------------------------------
 CREATE OR REPLACE FUNCTION public.testfun(id integer)+
  RETURNS integer                                     +
  LANGUAGE plpgsql                                    +
 AS $function$                                        +
 begin                                                +
 return $1; end;                                      +
 $function$                                           +
 
(1 row)
获取函数定义的参数列表
testdb=# select pg_get_function_arguments('testfun'::regproc);
 pg_get_function_arguments 
---------------------------
 id integer
(1 row)
获取参数列表来确定一个函数
testdb=# select pg_get_function_identity_arguments('testfun'::regproc);
 pg_get_function_identity_arguments 
------------------------------------
 id integer
(1 row)

获取函数的returns子句testdb=# select pg_get_function_result('testfun'::regproc);
 pg_get_function_result 
------------------------
 integer
(1 row)




获取索引的create index 命令
testdb=# select pg_get_indexdef('testvar_idx'::regclass);
                     pg_get_indexdef                      
----------------------------------------------------------
 CREATE INDEX testvar_idx ON testvarchar USING btree (id)
(1 row)

获取索引的create index
testdb=# select pg_get_indexdef('testvar_idx'::regclass,1,'true');
 pg_get_indexdef 
-----------------
 id
(1 row)

如果第二个参数为0,和上面一样,如果不为0则只获取一个字段。
testdb=# select pg_get_indexdef('testvar_idx'::regclass,0,'false');
                     pg_get_indexdef                      
----------------------------------------------------------
 CREATE INDEX testvar_idx ON testvarchar USING btree (id)
(1 row)

获取SQL关键字和类型列表
testdb=# select * from pg_get_keywords() limit 2;
   word   | catcode |  catdesc   
----------+---------+------------
 abort    | U       | unreserved
 absolute | U       | unreserved
(2 rows)

获取rule的create 命令
testdb=# select pg_get_ruledef(16864);  oid位于pg_rewrite
                     pg_get_ruledef                      
---------------------------------------------------------
 CREATE RULE test_rule AS                               +
     ON INSERT TO testvarchar                           +
    WHERE ((new.id > 10) AND (new.id < 100)) DO NOTHING;
(1 row)

testdb=# select pg_get_ruledef(16864,'true');
                  pg_get_ruledef                   
---------------------------------------------------
 CREATE RULE test_rule AS                         +
     ON INSERT TO testvarchar                     +
    WHERE new.id > 10 AND new.id < 100 DO NOTHING;
(1 row)

获取一个serial,smallserial,bigserial字段使用的序列名
testdb=# select pg_get_serial_sequence('testtblseq','id');
  pg_get_serial_sequence  
--------------------------
 public.testtblseq_id_seq
(1 row)

获取触发器的create命令
testdb=# select pg_get_triggerdef(16828); oid位于pg_trigger.oid
                                                     pg_get_triggerdef                         
                            
-----------------------------------------------------------------------------------------------
----------------------------
 CREATE TRIGGER tri_stu_major AFTER INSERT OR DELETE OR UPDATE ON stu_score FOR EACH ROW EXECUT
E PROCEDURE fun_stu_major()
(1 row)

testdb=# select pg_get_triggerdef(16828,'true');
                                                     pg_get_triggerdef                         
                            
-----------------------------------------------------------------------------------------------
----------------------------
 CREATE TRIGGER tri_stu_major AFTER INSERT OR DELETE OR UPDATE ON stu_score FOR EACH ROW EXECUT
E PROCEDURE fun_stu_major()
(1 row)

获取给定OID的角色名称
testdb=# select pg_get_userbyid(16850);  oid位于pg_user.usesysid
 pg_get_userbyid 
-----------------
 testuser
(1 row)

获取视图或者物化视图底层的定义
testdb=# select pg_get_viewdef('test_view');
     pg_get_viewdef      
-------------------------
  SELECT testvarchar.id,+
     testvarchar.content+
    FROM testvarchar;
(1 row)

testdb=# select pg_get_viewdef('test_view'::regclass);
     pg_get_viewdef      
-------------------------
  SELECT testvarchar.id,+
     testvarchar.content+
    FROM testvarchar;
(1 row)

testdb=# select pg_get_viewdef('test_view'::regclass,0);
     pg_get_viewdef      
-------------------------
  SELECT testvarchar.id,+
     testvarchar.content+
    FROM testvarchar;
(1 row)

获取存储选项名称/值对的集合
pg_options_to_table(reloptions)

获取指定的表空间有元素的数据库OID集合
testdb=# select pg_tablespace_databases(16849);
 pg_tablespace_databases 
-------------------------
                   16891
                   16890
(2 rows)
回去到的oid为该表空间中的数据库oid

获取表空间所在的文件系统的路径
tbsdb=# select pg_tablespace_location(16849);
 pg_tablespace_location 
------------------------
 /home/pg94/testspac
(1 row)


查询任意任何值的类型
tbsdb=# select pg_typeof(now());
        pg_typeof         
--------------------------
 timestamp with time zone
(1 row)


获取参数的排序

testdb=# select collation for(content) from testvarchar ;  collation for中间为空格
 pg_collation_for 
------------------
 "default"
(1 row)

获取命名关系的OID
testdb=# select to_regclass('testvarchar')::oid;
 to_regclass 
-------------
       16791
(1 row)

获取命名函数的OID
testdb=# select to_regproc('testfun')::oid;
 to_regproc 
------------
      16844
(1 row)

to_regprocedure(func_name)

获取命名操作符的OID
to_regoper(operator_name)
to_regoperator(operator_name)

获取命名类型的OID
testdb=# select to_regtype('testtbl')::oid;
 to_regtype 
------------
      16886
(1 row)

testdb=# select to_regtype('test_view')::oid;
 to_regtype 
------------
      16876
(1 row)

testdb=# select to_regtype('testseq')::oid;
 to_regtype 
------------
      16847
(1 row)
可以对于表,序列,视图使用。

注释信息函数

查询表字段注释
testdb=# select col_description('testvarchar'::regclass,2); --第二个参数1开始。
 col_description 
-----------------
 表内容
(1 row)

获取一个数据库对象的评注
obj_description(object_id,catalog_name);
obj_description(object_id);
获取一个共享数据库对象的评注
shobj_description(object_oid, catalog_name);

事务ID和快照
 

获取当前事务的ID

testdb=# select txid_current();--单独调用会产生新的事物
 txid_current
--------------
         1957
(1 row)

获取当前快照
testdb=# select txid_current_snapshot();
 txid_current_snapshot 
-----------------------
 1958:1958:
(1 row)


select * from table_name; --对于不影响数据库状态的查询不产生事务。


获取快照中xmax,xmin.

testdb=# select txid_snapshot_xmax(txid_current_snapshot());
 txid_snapshot_xmax 
--------------------
               1959
(1 row)

testdb=# select txid_snapshot_xmin(txid_current_snapshot());
 txid_snapshot_xmin 
--------------------
               1959
(1 row)


在快照中事务ID是否可以
txid_visible_in_snapshot(bigint, txid_snapshot)

获取快照中进行的事务ID
txid_snapshot_xip(txid_snapshot)

txid_snapshot文本表示为:xmin:xmax:xip_list
xmin 最早的事务id(txid)仍然活动,所有较早事务要么可见提交了,要么回滚死掉了
xmax 首先作为尚未分配的txid,所有大于或者等于此txid作为这时的快照都是尚未开始的,不可见的。
xip_list 在在当前快照活动中的xids,这个列表只包含xmin, xmax之间活动的xids,有可能活动的txid高于xmax,一个xmin<txid<xmax
不在这个列表中的txid,是在快照的这个时间完成的,因此,要么可见或者死掉对应它的提交状态,这个列表不包含子事务的xid。

 

© 著作权归作者所有

共有 人打赏支持
VITO_ch123
粉丝 1
博文 31
码字总数 68787
作品 0
长沙
C++ CreateToolhelp32Snapshot

要对当前系统所有已开启的进程进行枚举,就必须首先获得那些加载到内存的进程当前相关状态信息。在Windows操作系统下,这些进程的当前状态信息不能直接从进程本身获取,系统已为所有保存在系...

吃一堑消化不良
2015/10/28
0
0
SylixOS日志子系统简介

一、日志子系统简介 为了能够实时记录系统中发生的各种事件,SylixOS加入了日志管理功能。通过分析日志文件可以及时发现和处理系统运行过程中的问题。SylixOS日志子系统的主要功能是记录系统...

时尚小乌龟
2017/10/23
0
0
linux之printk和printf的区别

大部分常用的C库函数在Linux内核中都已经得到了实现。在所有没有实现的函数中,最著名的就数printf()函数了。内核代码虽然无法调用 printf()函数,但它可以调用printk()函数。printk()函数负...

shenhuan1104
2017/09/09
0
0
Linux日志管理——syslog

1、简介 Linux下日志主要在/var/log下,比如:message、warn、localmessages等,在suse11下,由进程/sbin/syslog-ng负责日志打印 配置文件: /etc/syslog-ng/syslog-ng.conf /etc/sysconfig...

林少主
2013/03/18
0
0
Linux Call Trace

内核态call trace 内核态有三种出错情况,分别是bug, oops和panic。 bug属于轻微错误,比如在spin_lock期间调用了sleep,导致潜在的死锁问题,等等。 oops代表某一用户进程出现错误,需要杀死...

猜猜我是吧
2015/05/03
72
0
phoenix无法删除表格且修改,插入数据。

操作过程: 第一步删除phoenix中系统的表格信息,主要为SYSTEM.CATALOG,第二步删除Hbase中的表格信息。 操作步骤: (1)查询phoenix系统表 SYSTEM.CATALOG 内容是所有表格的信息,系统表和自...

TurkeyMiami
01/03
0
0
Activity生命周期(1)—事件回调函数

Activity生命周期 Activity从启动到销毁的过程。 Activity的4种状态 活动状态 暂停状态 停止状态 非活动状态 Activity栈 栈顶的Activity处于活动状态,除栈顶以外的其他Activity处于暂停状态...

iBazinga
2016/11/11
55
0
SMS设计之我见

作为服务器中维护系统稳定性和可靠性的一个重要模块,SMS(System management service)起着承上启下的作用,它的下面是系统监控服务,直接接受监控模块传递过来的各种监控、状态及警告信息;...

技术小甜
2017/11/09
0
0
clojure 新手指南(9):元数据

我们在定义函数的时候提到了如何去定义一个元数据。但之前只是定义它,并没有明说它的用途。让我们再看一下之前定义的select-random函数,我们添加了一个叫做:add的元数据。注意:元数据是以...

凯奥斯
2013/07/07
0
0
Linux环境下的高级隐藏技术

linux相关资料由兄弟连www.itxdl.cn官方分享 摘要:本文深入分析了Linux环境下文件、进程及模块的高级隐藏技术,其中包括:Linux可卸载模块编程技术、修改内存映象直接对系统调用进行修改技术...

疯狂的小黑
2016/10/24
13
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
16分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
12
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
203
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部