配置.hbm.xml 文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="demo.test.autocreateDB">
<class name="Student" table="student001">
<id name="id" column="s_id">
<generator class="native"/>
</id>
<property name="name" column="s_name"/>
</class>
</hibernate-mapping>
<!--
自动创建数据库:
根据package找到对应的包名,再从包中找到对应的类.
table:创建数据库的名字
generator:设置主键,native:根据本地设置主键
property : 列名
主键生成策略
1,assigned(*):手动设置主键值
如果不设置主键:ids for this class must be manually assigned before calling save()
2,uuid:使用UUID来生成主键
1,主键的类型必须是string;
2,主键的值是hibernate框架帮我们生成的;
优势:框架帮我们生成, 不重复
劣势:没有顺序, 数据量稍大
3,increment
1,主键类型需要是数字(int, double, long...), 只要可以做算数的加法匀速那即可;
2,首先查询出当前表最大的id,id+1再设置为当前对象的主键值;
3,hibernate会把每一个类型的increment值缓存起来,提高性能;
4,identity:使用数据库本身的自增主键生成方式;
1,对于MYSQL来说,其实我们使用native的时候,就是使用了identity方式;
2,要使用identity,必须要求数据库支持自增的方式
3,有的数据库不支持(比如Oracle -> sequence), 有的支持(如:SQL SERVER)
不支持数据库的迁移(换数据库, 但是同时把数据同步过去);
5,native(*):native就是使用数据库支持的主键生成方式;
对于MYSQL来说,使用identity;
对于ORACLE来说,使用sequence;
6,TableGenerator(*:org.hibernate.id.TableGenerator):
使用一个额外的表(hibernate_sequences)来模拟序列生成器;
1,如果没有其他配置,hibernate会使用一个叫做default的序列生成器为所有的对象生成主键;
2,可以设置segment_value来为每一个对象单独创建一个序列生成器;
3,默认情况下,每生成一个主键需要两个SQL,性能不高(1,select:获取当前id;2,update:更新next_val)
4,性能提升,increment_size:设置一次可以取多少个值;
-->
将.hbm.xml配置到.cfg.xml中,同时写出创建表的语句
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--
连接数据库的四大参数:①驱动②数据库③账户④密码,注意:不能有空格
-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 打印sql语句 测试 -->
<property name="show_sql">true</property>
<!-- 自动创建表的语句 -->
<property name="hbm2ddl.auto">create</property>
<!--
引入映射文件,这是domain中绑定的employee.hbm.xml路径
-->
<mapping resource="demo/test/autocreateDB/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
创建对象模型:
package demo.test.autocreateDB;
public class Student {
private long id;
private String name;
public Student() {}
public Student(long id, String name) {
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
创建测试类:
package demo.test.autocreateDB;
import org.hibernate.Session;
import org.junit.Test;
import demo.test.utiltool.UtilTool;
public class TestStudent {
@Test
public void TestSave() {
//调用工具类的方法
Session session = UtilTool.getInstance().getSession();
session.beginTransaction();
Student stu = new Student(1, "惠轲");
session.save(stu);
session.getTransaction().commit();
session.close();
//Hibernate: insert into student001 (s_name) values (?)
}
}