erp项目经验总结

1.  关于hbm表和Action模型注入

模型注入

补充:不论多对一,一对多,都是要考虑,创建这个成员属性到底是要给谁赋值(ID),是哪个ID就把表中对应的键名,写上即可。

[1]:首先创建了xxxAction之后,属于本Actioin的xxx model模型,以及xxxService要首先注入

[2]:然后是再考虑与这个Action有关的前端页面有没有用到与这个xxx模型相关联的表模型(多对一,一对多,多对多等)中的数据,如果用到了,那么就需要注入这个模型,来接收数据。

[3]:同[2]类似,如果后端Action中,需要用到哪个属性来接收前端传过来的数据,但是这个Action中的模型或者其他模型没有能接收他的,那么新建一个

Hbm映射

首先是数据库建模时的模型,指明的多对一,一对多,多对多和一对一的关系。              (1)多对一:

在多的一端的模型中新建一的一端的属性,然后加入set,get方法。多的一段映射文件中:将原一的一端的ID去掉,然后<!--

             指定多对一的关系

             name:多的一端(emp)的类中的一的类(team)的属性名

             column:建表后多的一端(t_emp)中的外键[也就是一的一端的主键ID]

          -->

      <many-to-one name="team"column="t_id"></many-to-one>

 

本模型中创建另一端的模型成员属性,在给另一端这个模型对象赋值时,!!!!!!!!!如果是多对一这种关系,是给本模型中的外键(对应另一端的主键)赋值。

(2)一对多:

在一的一端的模型中新建多的一端的Set集合的属性,然后加入set,get方法。一的一端的映射文件中:<!--

             set指定一对多的关系配置

             name:在一的一端的模型类中集合的属性名

          -->

         <set name="set">

             <!--

                  key:在多的一端的表中要产生的外键

                  column:外键名称

              -->

             <key column="t_id"></key>

             <!--

                  one-to-many:指定多的一端的类

                 class:多的一端的类在项目中的路径

              -->

             <one-to-many class="com.dz.model.Emp"/>

         </set>

本模型中创建另一端的模型成员属性,在给另一端这个模型对象赋值时,!!!!!!!!!如果是一对多这种关系,是给另一端模型中的外键(对应本模型中的主键)赋值

 

(3)一对一:

在    一张身份证对应一个人,在身份证一端加入人的属性,然后在其映射文件中(这个要注意!!要用外键的方式生成主键)

<!-- 指定主键名称,建议使用emp端的主键名称 -->

         <id name="cardId" column="emp_no">

             <!-- 使用外键的方式来生成主键 -->

             <generator class="foreign">

                  <!-- 指定idCard这一端的emp属性 -->

                  <param name="property">emp</param>

             </generator>

         </id>

<!--

             指定一对一的关系

             name:当前端的的另一个一的一端的属性名称emp

             constrained:建表时带有外键约束

          -->

另一个一的一端:模型中创建身份证card模型属性:card

<!--

             双向关联映射的一对一,从数据库模型的箭头指向方向来看

             name:指定箭头背向端的model属性

          -->

         <one-to-one name="card"></one-to-one>

 

<one-to-one name="emp"constrained="true"></one-to-one>

(4)多对多:在多的一端建另一个多的一端的set集合属性,另一个多的一端同样也是

         单端映射:

    <!--

             set:设置多对多的单端集合

             name:在emp中集合属性名称

             table:要产生的中间表的名称

          -->

         <set name="roles" table="emp_role">

             <!--

                  emp表的主键给中间表作为外键

                  column:当前emp表的主键名称

              -->

             <key column="emp_no"></key>

             <!--

                  指定emp对面端的

                  class:指定多的一端的类

                  column:指定多的一端的要给中间表的字段名称(role表的主键)

              -->

             <many-to-many class="Role" column="role_id"></many-to-many>

         </set>

         双向映射:与另一端配置方式一样

<set name="emps"table="emp_role" cascade="save-update">

             <key column="role_id"></key>

             <many-to-many class="Emp" column="emp_no"></many-to-many>

         </set>

2.  模型中何时需要创建新的属性,然后指定映射关系。

(1)    首先两张表A表和B表之间,如果A表需要用到B表的东西,那么需要在模型B中创建属性A,并在A的映射表中配置关系。如果不需要引用B的东西,但是A和B有关系,B和C有关系。A需要用到C的东西,那么依然需要创建B然后配置映射,并在B中创建C,然后配置映射,这样才能通过A . B . C . 属性从而引用到C的东西

(2)    总之两张表之间最多A→B有一个映射关系,B对A有一个映射关系。相当与他们的映射表中,两个表各有一个配置关系,不可能再多了。

3.  自定义标签问题

当数据库表中需要通过数字来代表一个状态时,必须用文本表示出来。那么就需要在utils工具包中创建静属性,然后通过配置自定义标签来输出相对应的文本属性。

 

4.  隐藏属性

当需要用到模型表中的属性时,但是前端表中不需要展示,那么就用隐藏标签来接收,如果需要传递回去值的话,那么一定要配置好,用什么来接收。

 

5事务管理

在一个被事务管理起来的service层,即在ApplicationContext.xml中,配置了execution(*service

 等等的)这个,以及指定了方法前戳的,这里只要方法中获得了持久对象。那么对于这个持久对象的增删改查,就会自动进行保存修改,不需要手动。

但是如果该对象(即该张表模型),中存在另一张表的 Set 模型,即关联映射,那么对另一张表的增删改查,需要手动,或者在映射文件的 Set标签对象中加上级联属性,save-update,才可以同时的执行。

5.  前端页面中,数据的问题

A页面与B页面

A页面通过链接跳转到Action中,再通过Action中的相对应的方法跳转到B页面

(1):只要是本次跳转(A→Action→B),那么方法中context.put()加入的,以及Action中创建的用于接收数据的属性,都可以被B页面调用!!!!!!!

(2):那个弹出层的代码,每个弹出框的确定按钮,都属于他前面一个页面的(即调用他的那个页面),所以在这个确定按钮中,可以获得她前面那个页面的一切属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值