1.数据库的事务的隔离级别
查询mysql的数据库事务的隔离级别
注意:
问题:数据库查看事务隔离级别
select @@global.tx_isolation,@@tx_isolation;
报错:
mysql> select @@global.tx_isolation,@@tx_isolation;
ERROR 1193 (HY000): Unknown system variable 'tx_isolation'
mysql> select @@global.tx_isolation,@@tx_isolation;
ERROR 1193 (HY000): Unknown system variable 'tx_isolation'
我用的mysql8.0版本。tx_isolation在8.0版本更改为global.transaction_isolation
命令更改为:
select @@global.transaction_isolation,@@transaction_isolation;
修改mysql的事务的隔离级别:
set global transaction_isolation = 'read-uncommitted'
set transaction_isolation = 'read-UNCOMMITTED'
2.Session的flush
- 使用uuid主键生成策略来测试flush
@Test
public void test1() {
Session session = HibernateUtils.getSssion();
Transaction tx = session.beginTransaction();
try {
User user = new User();
user.setUname("张a");
user.setGender("男");
user.setBirthday(new Date());
/**
* 因为是uuid方式生成的主键,由session给生成,把user对象存储在Session的临时存储区
* */
session.save(user);
/**
* 发出sql语句,清理临时存储区,把dirty(是否脏数据)变为false
*/
session.flush();
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
- 使用native主键生成策略
@Test
public void test4() {
Session session = HibernateUtils.getSssion();
Transaction tx = session.beginTransaction();
try {
User user = new User();
user.setUname("张a");
user.setGender("男");
user.setBirthday(new Date());
/**
* 因为是native方式生成的主键,所以save的时候要发出sql来产生主键
* 持久区是有数据的,dirty是true脏数据
* */
session.save(user);
// 把user逐出session
session.evict(user);
// Session中没有数据flush没有意义
session.flush();
// 但是commit依然会把数据提交到数据库,因为sql已经发出
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
3.Session的flush完成大量数据入库的功能(提高插入的效率)
@Test
public void test5() {
Session session = HibernateUtils.getSssion();
Transaction tx = session.beginTransaction();
try {
for (int i = 0; i < 100000; i++) {
User user = new User();
user.setUname("张a");
user.setGender("男");
user.setBirthday(new Date());
session.save(user);
if(i % 100 == 0) {
session.flush();
}
}
session.flush();
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}