作者:何征天
课程视频地址:https://ke.qq.com/course/273907
1.1. Hibernate配置文件之核心配置文件
* 第一种方式是属性文件的形式,即properties的配置文件
* hibernate.properties
* hibernate.connection.driver_class=com.mysql.jdbc.Driver
* 缺点
* 不能加载映射的配置文件,需要手动编写代码去加载
* 第二种方式是XML文件的形式,开发基本都会选择这种方式
* hibernate.cfg.xml
* <propertyname="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</property>
* 优点
* 格式比较清晰
* 编写有提示
* 可以在该配置文件中加载映射的配置文件(最主要的)
2. 关于hibernate.cfg.xml的配置文件方式
* 必须有的配置
* 数据库连接信息:
hibernate.connection.driver_class -- 连接数据库驱动程序
hibernate.connection.url
hibernate.connection.url -- 连接数据库URL
hibernate.connection.username --
hibernate.connection.username --数据库用户名
hibernate.connection.password --数据库密码
* 方言:
hibernate.dialect -- 操作数据库方言
* 可选的配置
* hibernate.show_sql --显示SQL
* hibernate.format_sql --格式化SQL
* hibernate.hbm2ddl.auto --通过映射转成DDL语句
* create --每次都会创建一个新的表.---测试的时候
* create-drop --每次都会创建一个新的表,当执行结束之后,将创建的这个表删除.---测试的时候
* update --如果有表,使用原来的表.没有表,创建一个新的表.同时更新表结构.
* validate --如果有表,使用原来的表.同时校验映射文件与表中字段是否一致如果不一致就会报错.
* 加载映射
* 如果XML方式:<mapping resource="cn/itcast/demo1/Customer.hbm.xml" />
1.2 控制台打印sql
建议在测试环境下,都将sql打开,便于调试。
<!-- 打印sql语句的配置 --> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> |
1.3 Hibernate框架整合C3P0连接池
1. 先导入C3P0的jar包* 先导入C3P0的jar包(3个jar包),在hibernate-release-5.0.7.Final\lib\optional目录下
2. 在hibernate.cfg.xml的配置文件中编写配置
<!-- C3P0的供应商 --> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <!-- 最小连接 --> <property name="hibernate.c3p0.min_size">5</property> <!-- 最大连接数 --> <property name="hibernate.c3p0.max_size">10</property> <!-- 每120秒检查空闲连接 --> <property name="hibernate.c3p0.timeout">120</property> |
1.4 自动建表
该配置是让hibernate是否自动建立相应的表。也就是说,你数据库可以没有表,hibernate可以自动给你建立一个。
create-drop:在程序运行时,(创建session工厂的时候)会自动建表,在程序停止时(关闭sessionFactory时),表删除
如何证明create-drop的功能?
直接使用debug的方式,断点查看
第一步,观察表是否创建成功(标志:原先的表被删除,数据丢失)
第二步,实现保存操作,观察表中是否有数据
第三步,程序运行结束,观察表是否被删除
create:在程序运行时,如果表不存在,自动建表,如果存在,则不进行任何操作(mysql会先删除再创建)
update:在程序运行时,如果表不存在,自动建表,如果表存在,则检查表和类的结构是否一致,如果不一致,则更新表结构.(推荐)
update:
在Customer类中加入如下代码:
//客户联系地址 private String cust_address;
public String getCust_address() { returncust_address; } publicvoid setCust_address(String cust_address) { this.cust_address = cust_address; } |
在Customer.hbm.xml中添加如下代码:
<property name="cust_address" column="cust_address"></property> |
<property name="cust_address" column="cust_address"></property> |
修改hibernate.cfg.xml中建表配置:
<property name="hibernate.hbm2ddl.auto">update</property> |
测试
如果当表中的字段比配置文件多的时候,那么表中多的字段,hibernate将无法维护。(因为没有映射)
validate:在程序运行时,如果表结构和类不一致,则报错!(表中没有相应的字段,则报错,表中有冗余字段,不报错)
【自动建表小结】