hybris的Model以及Data

@(Hybris Item And Bean定义)
注:Mode和DTO皆不需要自己手动编写,可通过hybris的Item.xml,bean.xml配置自动生成这也是hybris的强大之处

Item

item是hybris中程序员可以接触到的最接近底层的东西,GenericItem是所有实体类最底层的父类,相当于Java类型系统的java.lang.Object,所有的item默认继承GenericItem

Model的定义

autocreate = true: 在执行Hybris命令行ant initialize进行Hybris系统初始化时,根据items.xml的定义在数据库表中创建对应的类型。

generate = true: 在ant编译时生成该类型对应的POJO类。

默认generate和autocreate为true,如果generate = false,也会生成对应的model,但是不会生成对应的jalo。如果generate = true,会生成对应工程的model以及jalo,想要子继承父,需要设置父的generate为true。如果设了deployment table,那么autocreate需设置为true,当updatesystem时,会生成对应的表

    <itemtypes>
        <itemtype code="Person" generate="true">
            <deployment table="Persons" typecode="32333"/>
            <attributes>
                <attribute qualifier="name" type="java.lang.String">
                    <persistence type="property"/>
                </attribute>
                <attribute qualifier="age" type="java.lang.Integer">
                    <persistence type="property"/>
                </attribute>
            </attributes>
        </itemtype>
        <itemtype code="Animal">
            <deployment table="Animal" typecode="32231"/>
            <attributes>
                <attribute qualifier="name" type="java.lang.String">
                    <persistence type="property"/>
                </attribute>
                <attribute qualifier="age" type="java.lang.Integer">
                    <persistence type="property"/>
                </attribute>
            </attributes>
        </itemtype>
        <itemtype code="Plant">
            <deployment table="Plant" typecode="32330"/>
            <attributes>
                <attribute qualifier="name" type="java.lang.String">
                    <persistence type="property"/>
                </attribute>
                <attribute qualifier="age" type="java.lang.Integer">
                    <persistence type="property"/>
                </attribute>
            </attributes>
        </itemtype>

        <itemtype code="Teacher" extends="Person">
            <attributes>
                <attribute qualifier="century" type="java.lang.String">
                    <persistence type="property"/>
                </attribute>
            </attributes>
        </itemtype>
    </itemtypes>

bean

bean.xml主要用于定义一些Data,Data类似普通java工程中的dto,在hybris中,service层返回model,然后由facade层调用convert,把model转化为Data返回给controller使用,convert的具体使用,下文会具体讲解

    <bean class="org.caps.training.Data.BaseItem">
        <property name="code" type="java.lang.String"/>
        <property name="created" type="java.util.Date"/>
        <property name="updated" type="java.util.Date"/>
        <property name="type" type="java.lang.String"/>
        <property name="action" type="java.lang.String"/>
    </bean>

    <bean class="org.caps.training.Data.TeacherData" extends="org.caps.training.Data.BaseItem">
        <property name="name" type="java.lang.String"/>
        <property name="age" type="java.lang.Integer"/>
        <property name="address" type="java.lang.String"/>
    </bean>

convert主要作用于facade层,一般配合popular一起使用,在convert中配置相关的popular,实现model到data的转换

使用方式

  • 自定义一个Populator,实现Populator接口,泛型传入一个model和一个data
  • 把这个Populator注入到spring中
  • 注入一个Converter,父类是abstractPopulatingConverter,设置targetClass和populators
  • 调用convert

    案例如下:

  • 自定义populator
public class TeacherModelPopular implements Populator<TeacherModel, TeacherData> {

    @Override
    public void populate(TeacherModel teacherModel, TeacherData teacherData) throws ConversionException {
        teacherData.setCode(teacherModel.getCode());
        teacherData.setAge(teacherModel.getAge());
        teacherData.setName(teacherData.getName());
        teacherData.setAddress(teacherModel.getAddress());
        teacherData.setType("TeacherData");
        teacherData.setCreated(new Date());
    }
}
  • 注入spring
    <bean id="teacherModelPopular" class="org.caps.training.convert.pop.TeacherModelPopular"/>

    <bean id="teacherModelConverter" parent="abstractPopulatingConverter">
        <property name="targetClass" value="org.caps.training.Data.TeacherData"/>
        <property name="populators">
            <list>
                <ref bean="teacherModelPopular"/>
            </list>
        </property>
    </bean>
  • 调用
    @Resource(name = "teacherModelConverter")
   private Converter<TeacherModel, TeacherData> teacherModelConverter;


   TeacherData convert = teacherModelConverter.convert(modelByExample,new TeacherData());

猜你喜欢

转载自www.cnblogs.com/faramita/p/11299884.html