Java自学之路-Java中级教程-43:Hibernate映射文件.hbm.xml与注解映射转换

在applicationContext.xml中已经有了sessionFactory的配置,包括hibernateProperties这个属性的配置,其中已经提到的有hibernate.dialect、hibernate.show_sql、hibernate.hbm2ddl.auto这几个配置的用法。sessionFactory的配置还有一个属性propery name="mappingResources",这个属性可以让hibernate使用xml映射文件代替注解方式,作用也是对java的实体对象和数据表进行关联映射。


前面的Person.java实体类对应数据表new_table,其中的属性id、nation、parent对应数据表字段id、nation、parent_id。另外还有subs、friends属性,也对应了parent_id字段和person_friend表中字段。


如果使用mappingResources属性指明映射文件,就不需要自动扫描映射实体类的包配置了,所以可以先将packagesToScan属性去掉,代替为mappingResources属性的配置。




这里配置了映射文件org/spring/model/Person.hbm.xml,就是使用xml来映射实体类与数据表的对应关系。在org.spring.model这个包里新建这个映射文件,名为Person.hbm.xml,内容如下。



扫描二维码关注公众号,回复: 2046236 查看本文章


这个映射文件的内容格式在网上可以轻易地找到,直接搜索hibernate hbm.xml即可。除去前面几行的声明是固定格式,下面的hibernate-mapping标签即是hbm映射文件的标准配置。这个标签中要配置class子标签,属性name指明映射的实体类全称,属性table指明对应的数据表的名称。class标签中有id属性和property属性标签,id指明对应数据表的自增字段,这个字段是记录的唯一标识,且随着记录的增加这个字段可以跟着变大,比如数据表中有一个记录,这个记录的id是1,再插入一条新记录,这条新记录的id就是2。这里的generator配置为native,就是使用本地数据库表的自增主键策略。


可以看到property配置对应了实体类的属性名称和数据表的字段名称,比如name="nation"对应着column="nation"。Person.java中还有一些属性变量,可以依照这个配置加入name、password、hobby、information、gender这些属性。



Person.java还有parent这样的属性,也可以在这个映射文件中加入。同样定义name和column指明实体类属性名称和数据表字段名称,另外根据前面的需要加上lazy="false"表明FetchType为EARGER。


另外两个Set属性subs和friends相对复杂一些,配置如下。set标签中的key属性用来指明对应的字段映射,而one-to-many和many-to-many用来指明对应的实体类型及实体类型对应的字段。


经过上面的配置,可以把实体类上面的映射注解去掉,比如@Entity、@Id、@Table、@ManyToOne、@ManyToMany都可以去掉。重启服务器再访问之前的页面,可以看到是没有问题的,实体类与数据库表的映射关系已可以由hbm.xml映射文件来完成。在实际项目中具体使用注解还是映射文件,可以根据需要和自己的喜好来选择。




猜你喜欢

转载自blog.csdn.net/weixin_41239710/article/details/80984759
今日推荐