如何使用hibernate工具生成自定义DAO

时间:2014-10-10 16:57:27

标签: java hibernate reverse-engineering dao hibernate-tools

我想生成一个自定义的DAO,它扩展了ClassA并实现了SampleInterface。 SampleInterface有一个方法,应该在生成此DAO时实现。而且我生成的DAO的命名约定应该在类名的末尾有DAO而不是“Home”,因为hibernate工具默认生成带有Home的DAO Classes。

我的表名是Employee,Address,Salary,我生成了我的实体,它们在com.mycompany.model包中。目前,我有地址,员工,薪资实体,其中包含所有注释和映射。我想使用以下逆向工程策略生成AddressDAO,EmployeeDAO和SalaryDAO。

以下是我的逆向工程策略课程

 public class DAOReverseEngineeringStrategy extends
            DelegatingReverseEngineeringStrategy {

        public DAOReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
            super(delegate);
            // TODO Auto-generated constructor stub
        }

        @Override
        public Map tableToMetaAttributes(final TableIdentifier tableIdentifier) {
            Map<String, MetaAttribute> metaAttributes = super
                    .tableToMetaAttributes(tableIdentifier);
            if (metaAttributes == null) {
                metaAttributes = new HashMap<String, MetaAttribute>();
            }

            MetaAttribute attributeExtends = new MetaAttribute("extends");
            attributeExtends.addValue("ClassA");
            metaAttributes.put("extends", attributeExtends);

            MetaAttribute attributeImpl = new MetaAttribute("implements");
            attributeImpl.addValue("SampleInterface");
            metaAttributes.put("implements", attributeImpl);

            MetaAttribute attributeImport = new MetaAttribute("extra-import");
            attributeImport.addValue("com.mycompany.ClassA");
            attributeImport.addValue("com.mycompany.SampleInterface");
            attributeImport.addValue("com.mycompany.model.*");
            metaAttributes.put("extra-import", attributeImport);

            return metaAttributes;
        }
    }

谢谢。

2 个答案:

答案 0 :(得分:0)

不确定这是否仍然开放,但无论如何都喜欢分享我的答案。

我没有尝试使用Reverse Engineering Strategy类,但是,使用dao / daoHome.ftl下可用的ftl(免费标记模板)文件。

答案 1 :(得分:0)

您可以在 hibernate-tools / dao / daohome.ftl lib中覆盖免费标记模板文件。 之后编辑文件模板模式如下:

enter image description here

enter image description here

在我的示例中,我已重命名为 {ClassName} RepositoryImpl 。 参考:http://docs.jboss.org/tools/latest/en/hibernatetools/html_single/index.html#exportes