Eri*_*ang 12 java inheritance spring code-generation mybatis
我正在使用Spring和开发一个java web项目Mybatis.
在dao级别,我定义了一个超级类和一个超级接口,它实现了所有常用方法.
因此,当在dao级别为特定模型创建子类或接口时,我只需要实现super dao类和接口,并将类体和接口体留空.超过一半的子dao级别类和接口一直是空的.
(空dao类和接口的示例:)
RoleDao.java
package core.dao;
import core.dao.base.BaseDao;
import core.model.Role;
public interface RoleDao extends BaseDao<Role> {
}
Run Code Online (Sandbox Code Playgroud)
RoleDaoImpl.java
package core.dao.impl;
import org.springframework.stereotype.Repository;
import core.dao.RoleDao;
import core.dao.base.BaseDaoImpl;
import core.model.Role;
@Repository
public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao {
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否有一种避免编写这些空类和接口的好方法,同时仍然可以使用它们?
我正在考虑使用Code generator生成这些类文件,或者Java reflection根据需要在运行时创建这样的类和接口,但还没有详细说明.
@ 更新
在没有创建源代码的情况下实现目标似乎不灵活,所以我决定为java web项目编写一些简单的java源代码生成器.
一个叫做的工具codemodel非常适合这样做,它由Sun开发,现在由Oracle拥有,我猜.
并且,我自己给出了我编写的用于生成java源代码的代码的答案.
大约一个月前,我问自己同样的事情:)所以,似乎我们有一种解决方案,因为你正在使用 Spring 库。正如我在文档中读到的:
Mybatis-Spring 提供了一个代理工厂:MapperFactoryBean,而不是使用 SqlSessionDaoSupport 或 SqlSessionTemplate 手动编写数据访问对象 (DAO)。此类允许您将数据映射器接口直接注入到服务 bean 中。使用映射器时,您只需调用它们,就像您一直调用 DAO 一样,但您不需要编写任何 DAO 实现代码,因为 MyBatis-Spring 将为您创建一个代理。
GitHub上 以及MyBatis 页面上都有一个示例。
我希望它能给您一些见解,因为重构整个系统以受益于如此好的功能也许是不可行的。