Open vincenty1ung opened 4 years ago
用户注册扩展信息需要支持搜索,就只能用这种结构储存数据
你可以用list批量保存啊
JPA的保存接口只有em.persist(entity)这个吧,哪里支持List类型
我没有用过jpa规范下的数据层框架(hibernate,springboot jpa),还没有细看你的代码,不知道你这样循环调用save 每次的都是开启新的会话,去访问db,还是只有一个会话,如果是多个session不建议这样做,我用的比较low用mybatis,当出现批量操作时500size为一个阈值,也就是500数据集一个sql,500-1000第二个sql,不会出现for(sql执行ing)。
可以开启一个事务,批量插入吧
在同一事务里循环提交最后是批量插入的
例如JPA插入日志里显示
insert into t1 (f1, f2, f3) values (?, ?, ?) insert into t1 (f1, f2, f3) values (?, ?, ?) insert into t1 (f1, f2, f3) values (?, ?, ?)
实际上查看MySQL的日志记录查询执行日志显示
2020-04-24T05:06:48.103800Z 99 Query insert into t1 (f1, f2, f3) values ('a1', 'b1', 'c1'),('a2', 'b2', 'c2'),('a3', 'b3', 'c3')
主要是这两个配置起了作用:
persistence.xml文件的
<property name="hibernate.jdbc.batch_size" value="10"/>
druid.properties文件的
rewriteBatchedStatements=true
设置以上参数后,MySQL驱动会将插入语句重新组合再提交
附开启MySQL日志方法
MySQL查询日志功能是否开启
SHOW VARIABLES LIKE 'general%';
general_log:日志功能是否开启,默认关闭OFF general_log_file:日志文件保存位置
开启日志
set GLOBAL general_log='ON';
查询是否开启
SHOW VARIABLES LIKE 'general_log';
重启MySQL服务后需要重新配置
`mysql> SHOW VARIABLES LIKE 'general%'; +------------------+-------------------------+ | Variable_name | Value | +------------------+-------------------------+ | general_log | OFF | | general_log_file | /var/lib/mysql/test.log | +------------------+-------------------------+ 2 rows in set (0.01 sec)
mysql> set GLOBAL general_log='ON'; Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'general_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | ON | +---------------+-------+ 1 row in set (0.01 sec)`