配置说明
org.huiche.core.configuration.Configuration 是huiche的配置项,仅允许由org.huiche.core.configuration.ConfigurationBuilder创建
参数说明
connectionProvider
连接提供者,内置了三种实现,使用spring-boot集成时,额外提供了SpringJdbcConnectionProvider并使用
- SingleConnectionProvider 单连接提供者,直接提供一个Connection,始终复用,建议测试场景
- JdbcConnectionProvider 根据jdbc-url和属性来获取Connection,建议测试场景
- DataSourceConnectionProvider 连接池管理的连接提供者
- SpringJdbcConnectionProvider 集成了spring事务和数据源的连接提供者
dialect
数据库方言,默认由connectionProvider获取DatabaseMetadata进行推导,除非使用内置不支持的方言,否则不建议设置
jdbc
jdbc原生配置属性,包含fetchSize,maxRows,queryTimeout,设置每次传输的大小,最大获取行数,查询超时时间
使用spring-boot-starter时,自动读取spring.jdbc.template下对应的配置项
sqlExceptionTranslator
SQL异常翻译器,可以将JDBC原生的SQLException翻译为其他RuntimeException
使用spring-boot-starter时,默认包装SQLErrorCodeSQLExceptionTranslator使用,将SQLException翻译为DataAccessException
listener
可以添加SQL监听器,监听huiche-jdbc对sql的执行,可以做一些日志记录,记录sql执行耗时等操作
使用spring-boot-starter时,提供slowSqlThreshold可以配置自动添加慢SQL监听,提供enableSqlLog可以启用SQL日志,提供plainSqlLog可以在启用日志时,输出明文SQL
serializationMapper
可选, 序列化转换器,用于处理复杂的列类型的转换,比如可以存储JSON或者是简单的列表数据List<String>,底层使用getString读写数据,然后进行序列化或反序列化转换,数据库层只要兼容即可,可以是JSON,CLOB,VARCHAR等类型
使用spring-boot-starter时,默认使用jackson当作序列化转换器, 如果实际classpath不存在jackson则会忽略,可自行配置添加使用其他序列化
columnMappers
可选, 可自定义列类型映射,自行实现org.huiche.core.mapper.ColumnMapper<T>即可
使用spring-boot-starter时,如果自行实现的类型映射注册为bean(@Component等或使用@Configuration注册),会自动添加到配置中
generators
值生成器,可添加值生成器,自行实现org.huiche.core.support.Generator即可,然后配合@FillOnInsert和@FillOnUpdate 即可在插入或更新时(必须调用dao的插入/更新的方法) 自动进行填充值
使用spring-boot-starter时,如果自行实现的值生成器注册为bean(@Component等或使用@Configuration注册),会自动添加到配置中
了解数据填充
enableFill
是否启用填充,该属性是作为标记,无法直接更改, 如果添加了generators 则会自动启用,否则不启用
enumBy
枚举类取值方式,提供三种选择
NAME(默认),使用Enum#name(),推荐ORDINAL,使用Enum#ordinal()非常不推荐,如果调整了枚举定义,数据就可能错乱了VALUE, 枚举类必须实现java.util.function.IntSupplier,取值时调用其getAsInt方法
nullToEmpty
当列类型为集合/Map/数组时,且值为null时,是否转换为空集合/空Map/空数组,默认为true
useNational
影响使用读写数据时使用getString还是getNString, 一般不用设置,会读取方言的该选项,且目前支持的方言均为false,即便是某些数据库使用类似NVARCHAR类型,一般也建议使用getString读写,只有特殊情况需要设置
batchSize
批量大小,影响dao.insertBatch()系列方法中, 默认每条语句插入的数量,默认为500,即如果批量插入1000条数据,会实际分为2次,每次插入500条,可以根据情况调整
blockUnconditionalDelete
阻止无条件删除,默认为true,通过dao的delete()系列方法删除数据时,是否拦截无条件删除
可以通过传一个Condition.TRUE的条件,来跳过该限制(实际执行时不会附加到SQL)
blockUnconditionalUpdate
阻止无条件更新,默认为true,通过dao的update()系列方法更新数据时,是否拦截无条件更新
可以通过传一个Condition.TRUE的条件,来跳过该限制(实际执行时不会附加到SQL)
resultInitialCapacity
当查询结果为集合类型时,默认的初始化的集合大小,默认为20
说明
- 数值太小而实际查询结果较多时,会造成多次扩容,略微影响性能
- 数值过大而实际查询结果较少时,会造成内存浪费,1000大小的ArrayList大概会占用4KB,如果还存在并发,则可能会影响内存
- 建议大小与业务平台,默认分页大小每页数量对齐,如果没有极致的性能要求,可忽略
resultInitialCapacityMax
当查询结果为集合类型时,最大的初始化的集合大小,默认为2000
此属性为resultInitialCapacity的补充, 即超过resultInitialCapacityMax时 回退到默认自动扩容模式