mysql存储引擎与自动提交问题
学习jdbc时jdbc 事物自动提交缺省是true 所以用户的每一条sql语句都会自动提交 不需要用户手工提交
但是hibernate 缺省 把自动提交关闭 所以如果当mysql 用的存储引擎是InoDB时必须开启提交事物 对数据库增删改操作才能有效
如果发现不用transaction.commit() 提交 也可以对数据库增删改操作 那是因为mysql 自动默认存储引擎是 MyISAM
它不支持事物提交与回滚。所以开启事物与不开启事物都没作用 都可以数据库增删改操作
在大数据处理的时候InnoDB可能会更快一些 建议用InnoDB
1、查看mysql存储引擎命令,在mysql>提示符下输入show engines;字段 显示内容中Default表示默认存储引擎
2、设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句.
总配置文件分析
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接驱动类 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 关于连接数据库的url和用户名和密码-->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernatetest</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<!-- 采用的数据库的方言或者说语法格式 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 表示按照标准格式在控制台上输出SQL语句,默认为false。建议在调试程序时设为true -->
<property name="hibernate.format_sql">true</property>
<!-- update 加载hibernate自动更新数据库结构-->
<property name="hbm2ddl.auto">update</property>
<!-- 执行过程中显示hibernate的sql语句 -->
<property name="show_sql">true</property>
<!-- 定持久化类映射文件的位置,由包名与映射文件组成,包名与映射文件之间用“/”分隔-->
<mapping resource="cn/itcast/domin/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
注意
<property name="hbm2ddl.auto">update</property>
的值可以是 validate create create-drop update
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,会删除以前的表。这就是导致数据库表数据丢失的原因。
create-drop 加载hibernate时创建,退出时删除表结构
update 加载hibernate自动更新数据库结构
By 变坏的好人