预编译

MyBatis体系大纲

和自甴很熟 提交于 2019-11-28 15:22:43
1.MyBatis优势 2.MyBatis总体流程 3.MyBatis功能架构 4.MyBatis框架架构 5.MyBatis动态SQL语句 5.1. MyBatis动态传入表名,字段名参数 要实现动态传入表名、列名,需要做如下修改 添加属性 statementType = "STATEMENT" 同时sql里的属有变量取值都改成${xxxx},而不是#{xxx} <delete id="deleteTableData" parameterType="java.util.Map" statementType="STATEMENT"> <![CDATA[delete from ${table} where ${col} < ${date}]]> </delete> 1. statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。这里显然不能使用预编译,要改成非预编译。 2. ${xxxx}:$将传入的数据直接显示生成在sql中,对于字符串数据,需要手动加上引号。 String dateStr = DateFormatUtils.format(date.getTime(),

JDBC04 PreparedStatement

孤街浪徒 提交于 2019-11-28 15:17:03
PreparedStatement类 存在预编译,用占位符去填参数( 参数索引从1开始算 ),可以 防止SQL注入 try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?&useSSL=false&serverTimezone=UTC" ,"root","123456"); String sql="insert into t_user (username,pwd,regTime) values (?,?,?)";//占位符 PreparedStatement ps=conn.prepareStatement(sql); // ps.setString(1, "张"); // ps.setInt(2,0000); //可以使用setObject ps.setObject(1, "孙"); ps.setObject(2, 99999); ps.setObject(3, new java.sql.Date(System.currentTimeMillis())); System.out.println("插入一行记录"); ps.execute(); } 来源: https:/

JavaScript: 变量提升和函数提升

假如想象 提交于 2019-11-28 09:58:16
第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升。这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下。 今天主要介绍以下几点: 1. 变量提升 2. 函数提升 3. 为什么要进行提升 4. 最佳实践 那么,我们就开始进入主题吧。 1. 变量提升 通常JS引擎会在正式执行之前先进行一次预编译,在这个过程中,首先将变量声明及函数声明提升至当前作用域的顶端,然后进行接下来的处理。(注:当前流行的JS引擎大都对源码进行了编译,由于引擎的不同,编译形式也会有所差异,我们这里说的预编译和提升其实是抽象出来的、易于理解的概念) 下面的代码中,我们在函数中声明了一个变量,不过这个变量声明是在if语句块中: function hoistVariable() { if (!foo) { var foo = 5; } console.log(foo); // 5 }hoistVariable(); 运行代码,我们会发现foo的值是5,初学者可能对此不甚理解,如果外层作用域也存在一个foo变量,就更加困惑了,该不会是打印外层作用域中的foo变量吧?答案是:不会,如果当前作用域中存在此变量声明,无论它在什么地方声明,引用此变量时就会在当前作用域中查找,不会去外层作用域了。 那么至于说打印结果,这要提到预编译机制了,经过一次预编译之后,上面的代码逻辑如下: //

js中的预编译

倾然丶 夕夏残阳落幕 提交于 2019-11-27 18:43:27
预编译 js执行顺序: 词法/语法分析 预编译 解释执行 js中存在预编译 function demo() { console.log('I am demo'); } demo(); //I am demo test(); // I am test //分析: 由于test函数可以执行,所以javascript一定存在预编译机制 function test() { console.log(" I am test") } var a; console.log(a) //undefined a = '123' 预编译发生在函数执行前一刻 预编译执行的步骤: 1创建执行期上下文,activation object ,即AO 2找形参和变量声明,将形参和变量声明做为AO的属性名,尚未赋值,值为undefined 3将形参和实参相统一, 即把实参的值传到形参里面去 4在函数体里面找函数声明,赋值函数体 实例 function demo(a, b){ console.log(a) c =0; var c; a = 1; b = 3; console.log(d) function d(){ console.log(d) } function e(){ console.log(e) } } demo(1) // 1.创建AO对象{} // 2.找形参和变量声明 AO = { a

JDBC、单元测试、DAO模式

浪子不回头ぞ 提交于 2019-11-27 18:23:57
JDBC简介 1、什么是JDBC?    JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API(工具)。JDBC是Java访问数据库的标准规范。   规范:在java中的直接体现是接口   作用:为不同关系型数据库提供统一的访问,由一组用java语言编写的接口和工具类组成,由各大数据库厂商实现对应接口 2、连接数据库时要先加载驱动   什么是驱动?   两个设备要进行通信时,需要满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。    Java和数据库要想进行链接,必须提前规定一些数据格式,格式由数据库厂商实现。   mysql连接工具下载地址: https://dev.mysql.com/downloads/connector/j/ 3、J DBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。 JDBC连接详解 1.通过JDBC连接数据库需要五步 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;

Java JDBC

我是研究僧i 提交于 2019-11-27 16:18:56
JDBC简介 JDBC即Java Database Connectivity,java数据库连接,是一套用于执行sql语句的Java API。 原本操作mysql数据库要使用mysql的语句,操作oracle数据库要使用oracle的语句,如果原来使用mysql,现在要换为oracle,就需要将mysql语句换为oracle语句,很麻烦。 当然,也可以使用通用的sql语句,但这样就不能使用数据库的特性。 jdbc是一套数据库编程接口,由各数据库厂商提供实现(数据库驱动),实现了跨数据库编程。原本使用mysql,现在要换为oracle,把数据库驱动换了就ok,不必重写sql语句。 使用时需要导入对应的数据库驱动(jar包)。 使用Statement接口 1 //注册驱动 2 Class.forName("com.mysql.cj.jdbc.Driver"); 3 /* 4 如果使用的是mysql5及之前版本的mysql,不加cj;如果使用的是mysql5之后的mysql,要加cj。 5 不加cj的是老版本的mysql驱动,加了cj的是新版本的mysql驱动 6 7 也可以这样来注册驱动: 8 Driver driver=new com.mysql.cj.jdbc.Driver(); 9 DriverManager.registerDriver(driver); 10

使用预编译库PREBUILT LIBRARY

风格不统一 提交于 2019-11-27 15:52:58
使用预编译库 NDK 支持使用预编译库(同时支持静态库和共享库)。此功能有以下两个主要用例: 向第三方 NDK 开发者分发您自己的库(而不分发您的源代码)。 使用您自己的库的预编译版本来提升编译速度。 本页将介绍如何使用预编译库。 声明预编译库 您必须将自己使用的每个预编译库声明为一个独立模块。为此,请执行以下步骤: 为模块提供名称。此名称不需要与预编译库本身的名称相同。 在模块的 Android.mk 文件中,将指向您提供的预编译库的路径分配到 LOCAL_SRC_FILES 。指定 LOCAL_PATH 变量的值的相对路径。 注意 :请务必选择与您的目标 ABI 对应的预编译库版本。要详细了解如何确保库支持 ABI,请参阅 为预编译库选择 ABI 。 根据您使用的是共享库 ( .so ) 还是静态库 ( .a ),添加 PREBUILT_SHARED_LIBRARY 或 PREBUILT_STATIC_LIBRARY 。 下面这个小例子假设预编译库 libfoo.so 与描述它的 Android.mk 文件位于同一个目录中。 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := foo-prebuilt LOCAL_SRC_FILES := libfoo.so include $(PREBUILT

fatal error C1010: unexpected end of file while...

旧城冷巷雨未停 提交于 2019-11-27 11:22:09
在编译VC++6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive 的错误. 解决方法: 1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的 Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiled headers。确定。 2、在文件开头添加: #include "stdafx.h" 对预编译头文件说明如下: 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。 编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过

预编译

我与影子孤独终老i 提交于 2019-11-27 10:36:26
宏定义中的#运算符把跟在其后的参数转换成一个字符串称为字符串化运算符。 宏定义中的##运算符把出现在##两侧的参数合并成一个符号。 来源: https://www.cnblogs.com/mu-zhang/p/11359897.html

C++ 预编译头文件

守給你的承諾、 提交于 2019-11-27 01:29:51
1、解决什么问题?   C++ 编译器是单独,分别编译的,每个cpp文件,进行预编译(也就是对#include,define 等进行文本替换),生成编译单元。编译单元是一个自包含文件,C++编译器对编译单元进行编译。考虑,头文件A.h被多个cpp文件(比如A1.cpp,A2.cpp)包含,每个cpp文件都要进行单独编译,其中的A.h部分就会被多次重复第编译,影响效率。 2、怎么解决?   把A.h以及类似A.h这样的头文件,包含到stdafx.h中(当然也可以是其他文件),在stdafx.cpp中包含stdafx.h,设置stdafx.cpp文件的属性,预编译头设置为 创建。对于原先包含A.h的cpp文件,删除#include "A.h",改成包含stdafx.h,同时设置这些cpp文件(A1.cpp,A2.cpp)的属性,预编译头设置为 使用。这样的话,下次编译A1.cpp,A2.cpp的时候,对于A.h头文件中的那部分,就不需要编译了,节省时间。 3、预编译头文件原理   工程对预先编译的代码进行编译,会生成一个pch文件(precompiled header),包含了编译的结果。注意,可以对任何代码生成到pch中,但是生成pch是个很耗时的操作,因此,只对那些稳定的代码创建预编译头文件。 4、对于预编译头,分为:创建者,使用者,不使用者。 5、注意:现在的编译器都有Time