配置.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 (?) } }