Foxnic-SQL(六)——DAO特性:基本信息和元数据基本信息DAO对象创建后即可使用。基础特性是获取数据库的一些基本信息,有助于开发者在某些场景下做出正确的判断。本文中的示例代码可以在https://gitee.com/LeeFJ/foxnic-samples项目中找到。示例代码如下:/***DAO打印基本信息**/publicstaticvoiddemo_1(){//通过DBInstance获取DAO对象DAOdao=DBInstance.DEFAULT.dao();//SchemaSystem.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());//连接IDSystem.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());//最大查询数受Sys限制tem.out.println("queryLimit="+dao.getQueryLimit());//逻辑值System.out.println("db中的真实值为"+dao.getDBTreatyLogicValue(true));System.out.println("falsevalueindbis"+dao.getDBTreatyLogicValue(false));}querylimit考虑到系统性能,如果想限制单次查询的行数,这个限制可以通过dao.setQueryLimit()方法如下代码显示://设置单次查询的最大次数dao.setQueryLimit(200);执行查询时,如果返回的行数超过指定值,程序会抛出异常:/***查询单次查询数,需要dao.setQueryLimit()方法设置**/publicstaticvoiddemo_3(){RcdSetrs=DBInstance.DEFAULT.dao().query("select*fromsys_menulimit100");//异常:查询结果行数超出queryLimit限制,当前限制为20System.out.println(rs.size());}Metadata通过DAO可以查询当前连接的数据库相关的元数据,比如数据库中所有表的列表,每个表的字段信息,索引信息等。publicstaticvoiddemo_1(){//创建DAODAOdao=DBInstance.DEFAULT.dao();//获取所有表名String[]tableNames=dao.getTableNames();//遍历表名for(StringtableName:tableNames){System.out.println(tableName);}//获取指定表的元数据DBTableMetatm=dao.getTableMeta("sys_user");//遍历列for(DBColumnMetacolumn:tm.getColumns()){System.out.println(column.getColumn()+"\t"+column.getLabel());}//构建索引元数据DBMetaData.buildIndex(dao,tm.getTableName(),tm);//获取并遍历索引信息for(DBIndexMetaindex:tm.getIndexs()){System.out.println("index:"+index.getName()+",unique="+index.isUnique()+",columns="+StringUtil.join(index.getFields()));}//刷新特定表的元数据缓存dao.refreshMeta("sys_user");//刷新元数据缓存dao.refreshMeta();}SQLlogFoxnic-SQL日志输出比较详细,包括未包??含在绑定变量中的SQL语句的输出,已经代入绑定变量中的SQL语句,执行时间和执行结果、调用堆栈等。下面是日志输出的基本样式:┏━━━━━SQL[select*fromsys_dictwheredeleted=:PARAM_1andcode=:PARAM_2]━━━━━┣语句:select*fromsys_dictwheredeleted=?andcode=?┣Parameter:{"PARAM_1":0,"PARAM_2":"sex"}┣Execute:select*fromsys_dictwheredeleted=0andcode='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*fromsys_dictwheredeleted=:PARAM_1andcode=:PARAM_2]━━━━━━DAO对象可以在初始化时指定是否打印SQL以及SQL打印的样式://设置SQL打印dao.setPrintSQL(true);//简化模式下是否打印SQLdao.setPrintSQLSimple(true);//是否打印调用堆栈dao.setPrintSQLCallstack(true);在代码执行过程中,还可以动态暂停和恢复SQL打印://输出日志dao.query("select*fromsys_dictwheredeleted=?andcode=?",0,"sex");//暂时在线程中停止日志打印dao.pausePrintThreadSQL();//没有日志输出dao.query("select2");//继续打印日志idao.resumePrintThreadSQL();//输出日志dao.query("select3");}总结本节主要了解获取DAO对象基本信息的方法、获取元数据的方法、访问控制约束的方法以及SQL日志的相关设置和控制相关项https://gitee.com/LeeFJ/foxnichttps://gitee.com/LeeFJ/foxnic-webhttps://gitee.com/lank/eamhttps://gitee.com/LeeFJ/foxnic-samples
