Foxnic-SQL (6) —— DAO 特性 : 基本信息与元数据

Foxnic-SQL (6) —— DAO 特性 : 基本信息与元数据

基本信息

         DAO 对象创建后就可以使用DAO对象了,DAO 最基本的特性就是获取数据库的一些基础信息,这些信息有利于开发者在某些场景下做出正确的判断。

        本文中的示例代码均可在 foxnic-samples: 用于展示和提供 Foxnic 相关的示例工程和代码 项目中找到。

        示例代码如下:

/**
* DAO 打印基本信息
* */
public static void demo_1() {
    // 通过 DBInstance 拿到 DAO 对象
    DAO dao=DBInstance.DEFAULT.dao();
    // 当前连接的 Schema
    System.out.println("schema = "+dao.getSchema());
    // 当前连接字符串
    System.out.println("url = "+dao.getUrl());
    // 当前登录的账户
    System.out.println("userName = "+dao.getUserName());
    // 输出数据库类型
    System.out.println("dbType = "+dao.getDBType());
    // 数据库 SQL 方言
    System.out.println("dialect = "+dao.getSQLDialect());
    // 数据库时间
    System.out.println("now = "+dao.getDateTime());
    // 连接标识
    System.out.println("dbId = "+dao.getDBConnectionIdentity());
    // 数据库标识
    System.out.println("dbId = "+dao.getDbIdentity());
    // 最后执行的 SQL 语句
    System.out.println("lastSQL = "+dao.getLatestSQL());
    // 最后执行的 SQL 语句
    System.out.println("lastSQLStr = "+dao.getLatestSQLString());
    // 最大查询数量限制
    System.out.println("queryLimit = "+dao.getQueryLimit());
    // 逻辑值
    System.out.println("true value in db is "+dao.getDBTreatyLogicValue(true));
    System.out.println("false value in db is "+dao.getDBTreatyLogicValue(false));
}

查询量限制

        从系统性能考虑,若要对单次查询的行数做出限制,这个限制可以通过 dao.setQueryLimit() 方法实现。如下代码所示:

// 设置最大的单次查询数量
dao.setQueryLimit(200);

        执行查询时,若返回的行数超过指定的值,程序将给出异常:

/**
* 校验单次查询数量,需要 dao.setQueryLimit() 方法设置
* */
public static void demo_3() {
    RcdSet rs=DBInstance.DEFAULT.dao().query("select * from sys_menu limit 100");
    // 异常:查询结果行数超过 queryLimit 限制,当前限制为 20
    System.out.println(rs.size());
}

元数据

        通过 DAO 可以查询到当前连接的数据库相关的元数据,如数据库中所有的表的清单、每个表的字段信息、索引信息等。

public static void demo_1() {
    // 创建DAO
    DAO dao=DBInstance.DEFAULT.dao();
    // 获得所有表名
    String[] tableNames=dao.getTableNames();
    // 遍历表名
    for (String tableName : tableNames) {
        System.out.println(tableName);
    }
    // 获得指定表的元数据
    DBTableMeta tm=dao.getTableMeta("sys_user");
    // 遍历列
    for (DBColumnMeta column : tm.getColumns()) {
        System.out.println(column.getColumn()+"\t"+column.getLabel());
    }
    // 构建索引元数据
    DBMetaData.buildIndex(dao, tm.getTableName(),tm);
    // 获得与遍历索引信息
    for (DBIndexMeta index : tm.getIndexs()) {
        System.out.println("index : "+index.getName()+",unique="+index.isUnique()+",columns="+ StringUtil.join(index.getFields()));
    }
    // 刷新特定表的元数据缓存
    dao.refreshMeta("sys_user");
    // 刷新元数据缓存
    dao.refreshMeta();
}

SQL 日志

        Foxnic-SQL 的日志输出比较细化,包括输出绑定变量未带入的SQL语句,绑定变量已代入的SQL语句,执行耗时与执行结果,调用栈等,以下是日志输出的基本样式:

┏━━━━━ SQL [ select * from sys_dict where deleted = :PARAM_1 and code = :PARAM_2 ] ━━━━━

┣ 语句:select * from sys_dict where deleted = ? and code = ?

┣ 参数:{"PARAM_1":0,"PARAM_2":"sex"}

┣ 执行:select * from sys_dict where deleted = 0 and code = 'sex'

┣ 结果:

┣━ 耗时:28ms , start = 1670562886144

┣━ 返回:RcdSet,size=1

┣ 调用栈:

com.leefj.foxnic.sql.demo.dao.DAO_MetaDemo.demo_4(DAO_MetaDemo.java:82)

com.leefj.foxnic.sql.demo.dao.DAO_MetaDemo.main(DAO_MetaDemo.java:21)

┣ TID:null

┗━━━━━ SQL [ select * from sys_dict where deleted = :PARAM_1 and code = :PARAM_2 ] ━━━━━

        DAO 对象在初始化时可以指定是否打印SQL以及SQL打印的样式:

// 设置SQL打印
dao.setPrintSQL(true);
// 是否以简化模式打印SQL
dao.setPrintSQLSimple(true);
// 是否打印调用栈
dao.setPrintSQLCallstack(true);

        在代码执行过程中,也可以动态暂停与恢复SQL打印:

/**
* SQL 日志打印控制
* */
public static void demo_4() {
    // 通过 DBInstance 拿到 DAO 对象
    DAO dao=DBInstance.DEFAULT.dao();
    // 输出日志
    dao.query("select * from sys_dict where deleted = ? and code =? ",0,"sex");
    // 在线程内暂停日志打印
    dao.pausePrintThreadSQL();
    // 无日志输出
    dao.query("select 2");
    // 继续打印日志i
    dao.resumePrintThreadSQL();
    // 输出日志
    dao.query("select 3");
}

小结

        本节主要了解了获得 DAO 对象基本信息的方法、获得元数据的方法、取数控制约束的方法以及SQL日志的相关设置与控制。

相关项目

foxnic: Foxnic基础框架,开发工具。

foxnic-web: FoxnicWeb是一个应用开发框架,高效、快速、稳定。

Foxnic-EAM固定设备资产管理系统: EAM固定资产设备管理系统,满足中小企业基本需求,对常用资产设备进行信息化管理,包含自定义支持各类设备、自带导入导出、维护工作统计、采购管理、文档管理、合同管理等功能

foxnic-samples: 用于展示和提供 Foxnic 相关的示例工程和代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值