session/actionQueue/insertions/elementData是保存对象在session管理器的状态:如果一个对象存在则该对象在这个elementData对象中有值,如果不在session管理器中,则该对象在该elementData对象中没有值
session/persistenceContext/entityEntries/map/table是保存程序中关于数据库中的对象的值,程序查询数据库中对象的内容保存在该对象中
hibernate重配置,我们来看看一个简单的hibernate的配置信息,首先我们应该知道一个hibernate是一个持久层框架,所以需要配置连接数据库信息:hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 这里是提供连接数据库URL -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property>
<!-- 这里编写的是连接数据库的驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 提供连接数据库的账户 -->
<property name="hibernate.connection.username">root</property>
<!-- 提供连接数据库的密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 配置sql的方言:hibernate独有的hql语句:面向对象的数据库语句,通过这个配置转化为相应的底层数据库操作。从而实现了跨数据库平台 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 是否显示程序执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否自动更新数据库 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 这里配置的是持久层对象,对应的就是数据库的表 -->
<mapping resource="com/xingyao/model/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
我们从hibernate.cfg.xml配置文件中看到了,持久层对象User.hbm.xml的配置,那么我们来看看这个配置有哪些信息
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.xingyao.model">
<class name="User" >
<id name="id" type="java.lang.String">
<generator class="uuid"/>
</id>
<property name="username" type="java.lang.String"/>
<property name="password" type="java.lang.String"/>
<property name="createTime" type="java.util.Date"/>
</class>
</hibernate-mapping>
——————————————————————————————————————————我们来谈谈这里面涉及到的标签
:这个是配置所有的mapping的信息,也就是数据库物理表,其中package属性是:如果该mapping下有许多class信息,则用这个指定包名,简化下面的的信息
:配置一个bean对象;其中names属性值是:一个bean对象(包名+类名,如果上文配置了package属性则可以不需要配置包名)
:配置一个bean里面的主键信息;name属性值是:配置在该类中那个属性为主键;type属性值是:指定id的类型
:指定该主键的生成策略;class属性值是:指定该主键采用什么生成策略,我这里用的是uuid(由系统自动生成一个32为的世界唯一的字符串)在后面会专门有一章将生成策略
:指定该类的其他属性值信息;name的属性值是:指定该类的属性,type属性值是:指定该属性的类型
这里我们完成了hibernate的相关配置,但是我们来看看User.hbm.xml对应的bean是怎么写的
package com.xingyao.model;
import java.util.Date;
public class User {
private String id;
private String username;
private String password;
private Date createTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
——————————————————————————————————————————这里就是一个基本的Bean代码
下面是怎么根据这个bean,怎么创建一个表
@Test
public void create_table() {
Configuration configuration = new Configuration().configure();
SchemaExport schemaExport = new SchemaExport(configuration);
schemaExport.create(true, true);
}