11. (重要) 配置beetlsql

beetlsql 配置文件是 btsql-ext.properties,位于classpath 根目录下,如果没有此文件,beetlsql将使用系统默认配置,如 是开发模式,beetlsql每次运行sql都会检测sql文件是否变化,并重新加载 字符集,是系统默认的字符集 * 翻页默认总是从1开始,对于oralce数据库来说,翻页起始参数正合适。对于mysql其他数据库来说,beetlsql,翻页参数变成n-1.一般你不需要关心

11.1. 开发模式和产品模式

beetlsql默认是开发模式,因此修改md的sql文件,不需要重启。但建议线上不要使用开发模式,因为此模式会每次sql调用都会检测md文件是否变化。可以通过修改/btsql-ext.properties ,修改如下属性改为产品模式

  1. PRODUCT_MODE = true

11.2. NameConversion

数据库字段名与java属性名的映射关系必须配置正确,否则会导致各种问题,如下是一些建议

字段名字是user_id, java属性名是userId, 则使用UnderlinedNameConversion 字段名是userId, java属性名是userId,则使用DefaultNameConversion

如果是其他映射关系,可以考虑自己实现NameConversion接口

11.3. 模板字符集

默认sql模板文件采用的是系统默认字符集,可以更改配置采用指定的字符集

  1. CHARSET = UTF-8

11.4. 翻页起始参数是0还是1

默认认为1对应于翻页的第一条记录,如果你习惯mysql 那种0对应于第一条记录,则需要配置OFFSET_START_ZERO,设置为true

  1. OFFSET_START_ZERO = true

无论是从0开始还是从1开始,都不影响beetlsql根据特定数据库翻译成目标数据库的sql语句,这只是一个约定好的习惯,beetlsql会处理跨数据库翻页的

11.5. 自定义方法和标签函数

可以在sql模板中使用自定义方法和标签函数,具体请参考beetl使用说明,如下是默认配置

  1. FN.use = org.beetl.sql.core.engine.UseFunction
  2. FN.globalUse = org.beetl.sql.core.engine.GlobalUseFunction
  3. FN.text = org.beetl.sql.core.engine.TextFunction
  4. FN.join = org.beetl.sql.ext.JoinFunction
  5. FN.isEmpty=org.beetl.sql.ext.EmptyExpressionFunction
  6. FN.page=org.beetl.sql.core.engine.PageQueryFuntion
  7. TAG.trim= org.beetl.sql.core.engine.TrimTag
  8. TAG.pageTag= org.beetl.sql.core.engine.PageQueryTag

EmptyExpressionFunction 用在很多地方,如template 类操作,where语句里的条件判断,它 沿用了beetl习惯,对于不存在的变量,或者为null的变量,都返回true,同时如果是字符串,为空字符串也返回true,数组,集合也是这样,有些项目,认为空字符串应该算有值而不应该返回true,你可以参考EmptyExpressionFunction的实现,按照项目语义来定义isEmpty

11.6. isEmpty 和 isNotEmpty

模板类查询和模板更新,以及Sql语句里的判断都依赖于isEmpty函数判断变量是否存在以及是否为null,2.8.4以前版本对空字符串也认为是空,2.8.4之后版本则仅仅判断对象是否存在以及是否为null

  1. where 1=1
  2. @if(!isEmpty(content)){
  3. and content = #content#
  4. @}

如上代码,如果content存在,且不为null,则进入if代码块

如果想兼容以前的判断的方式,即认为空字符串也是空(不推荐这么用了),则需要在btsql-ext.properties,再次使以前的实现方式

  1. FN.isEmpty = org.beetl.ext.fn.EmptyExpressionFunction
  2. FN.isNotEmpty = org.beetl.ext.fn.IsNotEmptyExpressionFunction

你也可以使用beetl的安全输出来表示,比如上面的sql代码,可以用安全输出

  1. where 1=1
  2. @if(null!=content!){
  3. and content = #content
  4. @}

如上代码,content ! 是安全表达式,如果不存在或者为null,则为null,然后通过与null比较。