1. ConfigFilter的作用包括:
从配置文件中读取配置
从远程http文件中读取配置
为数据库密码提供加密功能
参见:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
2. DruidDataSource配置属性列表配置,详见:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8
1)maxActive 最大连接池数量;maxIdle 已经不再使用,配置了也没效果。
2)validationQuery 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
3)testOnBorrow 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
4)testWhileIdle 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
5)poolPreparedStatements 这个是设置有争议。
a. DruidDataSource配置属性列表配置 给出的建议:是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
b. infoQ中 浅析MySQL JDBC连接配置上的两个误区 文章给出的建议,新版本建议设置为 true。数据库连接池是否需要配置 poolPreparedStatements 为true: 新版本建议打开
参见:http://www.infoq.com/cn/news/2017/03/Analysis-errors-MySQL-JDBC
3. mysql主从复制
1)master在执行sql之后,记录二进制log文件(bin-log)。
2)slave连接master,并从master获取binlog,存于本地relay-log中,然后从上次记住的位置起执行SQL语句,一旦遇到错误则停止同步。
从以上mysql的Replication原理可以看出:
* 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间主从数据不一致的情况。
* 如果主从的网络断开,则从库会在网络恢复正常后,批量进行同步。
* 如果对从库进行修改数据,那么如果此时从库正在在执行主库的bin-log时,则会出现错误而停止同步,这个是很危险的操作。所以一般情况下,我们要非常小心的修改从库上的数据。
* 一个衍生的配置是双主、互为主从配置,只要双方的修改不冲突,则可以工作良好。
* 如果需要多主库的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。
4. MySQL 一表中字段内容是用逗号分隔的 另一表含有对应数据的两表联合查询
举例:select staff.id,staff.leaderid,GROUP_CONCAT(leader.name) as '领导姓名' from staff JOIN leader ON FIND_IN_SET(leader.id,staff.leaderid) GROUP BY staff.id
参见:https://blog.csdn.net/knight_quan/article/details/51767827
5. 查询数据库中所有表名:select table_name from information_schema.tables where table_schema='csdb' and table_type='base table';
查询指定数据库中指定表的所有字段名column_name:select column_name from information_schema.columns where table_schema='csdb' and table_name='users'
6. mybatis中使用union all
<select id="getProductEnableNumberInfos" resultMap="productMap" > SELECT CDSK_ITEM_CODE ProductCode,WMST_SKU_UNIT ProductUnit,WMST_ENABLED_NUMBER ProductNum from ( <foreach collection="conditions.list" item="item" index="index" separator="union all"> SELECT c.CDSK_ITEM_CODE,WMST_SKU_UNIT,SUM(WMST_ENABLED_NUMBER) WMST_ENABLED_NUMBER FROM wm_stock_${conditions.esCorCode} w LEFT JOIN cd_wh_itme_${conditions.esCorCode} c ON w.WMST_SKU_ID=c.CD_ITEM_ID WHERE c.CDSK_ITEM_CODE=#{item.ProductCode,jdbcType=VARCHAR} AND w.WMST_SKU_UNIT=#{item.ProductUnit,jdbcType=VARCHAR} AND w.WMST_WR_ID=${conditions.wrId} AND w.WMST_CUSTOMER_CODE=#{conditions.customerCode,jdbcType=VARCHAR} </foreach> ) alias WHERE alias.WMST_ENABLED_NUMBER>0; </select>
7.