发表于: 2018-04-08 22:41:35
2 677
今天完成的事情:
1.直接执行Main方法,去在服务器上跑通流程。
其实就是把单元测试修改一下,写成方法,然后Main方法里执行
把url的地址改成服务器的公网地址
2.继续插数据库
1.发现mybatis的数据库插入跟jdbc还是有区别的
mybatis的执行器有三种类型:
ExecutorType.SIMPLE
这个类型不做特殊的事情,它只为每个语句创建一个PreparedStatement。
ExecutorType.REUSE
这种类型将重复使用PreparedStatements。
ExecutorType.BATCH
这个类型批量更新,且必要地区别开其中的select 语句,确保动作易于理解。
在使用ExecutorType.BATCH 后开启批量,插入效率得到提升(1000条提高30秒)
SqlSession sqlSession = this.sqlSessionFactory.openSession(ExecutorType.BATCH,false);
然后找到师兄提示的mysql批量操作要加rewriteBatchedStatements参数,这里还要确保5.1.13以上版本的驱动才能实现
例如:
jdbc.url=jdbc:mysql://47.95.246.67:3306/myku?useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true
在mybatis上添加后,在次提升(1000条30秒左右的效率)
然后看到mybatis的动态SQL的foreach标签批量插入
在实验的时候出现 3字节的UTF-8序列的字节2无效的错误
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合
foreach标签属性:
collection:指定要遍历的集合:
list类型的参数会特殊处理封装在map中,map的key就叫list
item:将当前遍历出的元素赋值给指定的变量
separator:每个元素之间的分隔符
open:遍历出所有结果拼接一个开始的字符
close:遍历出所有结果拼接一个结束的字符
index:索引。遍历list的时候是index就是索引,item就是当前值
遍历map的时候index表示的就是map的key,item就是map的值
#{变量名}就能取出变量的值也就是当前遍历出的元素
明天计划的事情:
1.数据库
遇到的问题:
1.在使用foreach时出现如下报错
2.批处理时是否必须开启事务,还有就是我在JDBC代码的url上加入rewriteBatchedStatements=true,但是效率没有得到提升,附上代码
收获:
评论