Hibernate映射到数据库中两个重要的配置文件(二).hbm.xml文件

 

Hibernate映射文件:hbm.xml:实现POJO(普通的Java对象)与DB表格的映射配置。虽然一个映射文件中可以配置多个POJO与数据库表的映射关系,但还是建议一个映射文件中只配置一个POJO与数据库表的映射关系。映射文件能够帮助 Hibernate 确定如何从该类中提取值,并将它们映射在表格和相关域中。

主体框架:

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-mapping PUBLIC

        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 

    <class name="类名" table="表名">

        <id name="属性" type="属性类型">

            <column name="表中字段名"/>

 

            <generator class="主键生成策略"/>

        </id>

        <property name="属性" type="属性类型">

            <column name="表字段名"/>

        </property>

    </class>

1、映射内容的定义

</hibernate-mapping> 

<hibernate-mapping package="JavaBean所在包的全路径">

</hibernate-mapping> 

2、数据库与JavaBean的关联

<class name="JavaBean名称" table="对应数据库中的表名">

</class>

3、主键映射

<id name="数据库中主键在JavaBean中的属性名称" column="数据库中表的主键名" type="JavaBean中主键对象属性的类型">

    <column name="数据库表中的主键字段名"/>

    <!--主键生成策略-->

    <generator class="主键映射方式"/>

</id>

4、普通字段映射

<property name="数据库中字段在JavaBean中的属性名称" column="数据库中的字段名" type="属性类型">

</property>

<property name="数据库中字段在JavaBean中的属性名称" column="数据库中的字段名" type="属性类型" not-null="true" >

</property>

5、一对多关系

 

<set name="java映射类中对应的属性" inverse="true" lazy="true">

     <key column="表中对应字段"/>

     <one-to-many class="多方的类"/>

</set>

many-to-one方式

<many-to-one name="java映射类中对应的属性" column="表中对应字段" class="类名" not-null="true" />

6、一对一关系

<!-- 其中主表的配置 -->

<one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名"cascade="save-update"/>

<!-- 子表的配置 -->

<one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" />

7、多对多关系

<set name="java对象的属性名" table="表名" cascade="all" outer-join="false">

     <key column="表的对应字段"/>

      <many-to-many class="另一个表的对象类" column="另一个表的字段"/>

</set>

 

increment

increment策略是指,不使用数据库本地的自增长策略,而是由程序(Hibernate框架)产生一个自增长的ID值,赋予数据库.
每次插入前都会去查询表中id最大的值,然后+1作为新主键
hilo(了解)

高低位算法,主键自增,由hibernate来维护,开发时不使用.因为没有数据库同时不支持主键自增长或者则序列号
idenitty

identity策略,指定使用数据库里面的ID自增长策略. 只能用于支持ID自增长功能的数据库,如:MySQL,SQLServer.. 不支持没有ID自增长策略的数据库,如Oracle,DB2..
sequence

使用序列的实现ID生成策略,主要用于有序列的数据库.如:Oracle,DB2,如果不支持序列的数据库(如:MYSQL),该策略会使用一个表模拟序列。
native

使用数据库本地的策略,就是数据库里面使用怎么样的策略就用什么策略,HIbernate不做任何的判断.如:MySQL数据库使用了increment_auto,自增长策略.使用native.表示直接调用数据库里面的increment_auto策略.
uuid

就是数据库的主键是使用一个唯一的==字符串==的来存储.这个唯一的字符串就是UUID
主键必须为String类型
assigned

assigned策略,就是不使用主键生成策略,由手工输入ID.
原文:https://blog.csdn.net/kato_op/article/details/80296619 

转载:https://blog.csdn.net/chensanwa/article/details/79176090
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Hibernate5的配置文件hibernate.cfg.xml: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//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://localhost:3306/testdb</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration> ``` 接下来是加载配置文件的类HibernateSessionFactory: ```java import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateSessionFactory { private static SessionFactory sessionFactory; private HibernateSessionFactory() { } public static SessionFactory getSessionFactory() { if (sessionFactory == null) { Configuration configuration = new Configuration(); configuration.configure("hibernate.cfg.xml"); sessionFactory = configuration.buildSessionFactory(); } return sessionFactory; } } ``` 然后是持久化类Teachinfo和映射文件Teachinfo.hbm.xml: Teachinfo.java ```java public class Teachinfo { private int id; private String name; private int age; private String sex; public Teachinfo() { } public Teachinfo(int id, String name, int age, String sex) { this.id = id; this.name = name; this.age = age; this.sex = sex; } // 省略getter和setter方法 } ``` Teachinfo.hbm.xml ```xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Teachinfo" table="teachinfo"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" column="name"/> <property name="age" column="age"/> <property name="sex" column="sex"/> </class> </hibernate-mapping> ``` 最后是TeacherDao类,封装了对教师信息的增删改查操作: ```java import org.hibernate.Session; import org.hibernate.Transaction; public class TeacherDao { public void add(Teachinfo teachinfo) { Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); session.save(teachinfo); tx.commit(); } public void delete(int id) { Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); Teachinfo teachinfo = (Teachinfo) session.load(Teachinfo.class, id); session.delete(teachinfo); tx.commit(); } public void update(Teachinfo teachinfo) { Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); session.update(teachinfo); tx.commit(); } public Teachinfo getById(int id) { Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); Teachinfo teachinfo = (Teachinfo) session.get(Teachinfo.class, id); tx.commit(); return teachinfo; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值