每次遇到这种表与表间的关系时,脑子里就是一团乱麻,这回又用hibernate框架时,我就只知道单表映射生成文件,涉及到关系就懵逼了,而且表间关系又是重点,就不得不又拿起来啃啃看:
hibernate框架的总配置文件中涉及到的都是初始化的东西,也就是
1,configuration对象的相关初始化(数据库连接参数操作《数据库方言》)
2,hibernate常用的相关参数hibernateProperties,显示sql《show_sql》,显示sql格式,以及自动建表《hbm2ddl.auto》等参数设置
3,*.hbm.xml文件的映射
先不管它怎么搭建,今天就是想把一对多和多对一理一理;
《例》员工与部门之间的关系: 员工--->部门 是多对一的关系;(我这里总是把它看成“一对一”(不知道说不说的通 此处求教育) 虽然很明显是:多个员工对应一个部门 )
部门--->员工 是一对多的关系;
首先设计它们对应的表:
deptId | deptName |
1 | 设计部 |
2 | 研发部 |
empId | empName | salary | dept_id |
1 | 张三 | 12345 | 2 |
2 | 李四 | 78986 | 2 |
数据库表有了,再对对应的模型进行编写:
模型不单单有模型的属性------>表的字段(a,基本的属性要确实的在表上生成具体能看到的字段;b,表示表间关系的属性在具体的表中不能直接看到的)《非主流片面个人理解》
对应的实体类写好了,然后就是关键部分 映射文件:
首先仅考虑在部门Dept方对关联表进行操作:( 普通字段的生成就不关注了)
1,指定需要映射的集合属性:emps;
2,集合属性对应的集合表:t_employee;<指向库中的表>
3,集合表的外键字段:t_employee .dept_id;
4,集合元素的类型:Employee;
<set name="emps" table="t_employee">
<key column="dept_id"> </key> / /实现两表的关系
<many-to-one class="Employee(路径)" /> / / 这样才能实现从部门方来维护到员工方;<注意>在该表形成前,employee表已经生成了,且在sql运行语句中,先是在employee中insert数据(此时外键字段为null),然后Dept中插入数据,再用update进行关系的维护。
</set>
再考虑员工方Employee:
1,指定要映射的属性;dept
2,本表的外键字段:dept_id
3.部门类型;
同上分析:<one-to-many name="dept" class="Dept" column="dept_id' />