Mybatis Generator:分离出"自动生成"和"手动编辑文件"的最佳方法是什么

use*_*465 12 mybatis mybatis-generator

我正在使用Mybatis(用于持久化java到数据库)和Mybatis Generator(用于从数据库模式自动生成映射器xml文件和java接口)的项目.

Mybatis生成器在生成基本crud操作所需的文件方面做得很好.

上下文

对于某些表/类,我们需要比MyBatis Generator工具生成的"crud stuff"更多的"东西"(代码查询等).

有没有办法拥有"两全其美",即使用自动生成以及"自定义代码".如何分离和构建"手动编辑的文件"和"自动生成的文件".

提案

我正在考虑以下内容,即表格"Foo"

自动生成

  • FooCrudMapper.xml
  • 接口FooCrud.java

(其中"Crud"代表"创建读取更新删除")

手编辑

  • FooMapper.xml
  • 界面Foo扩展了FooCrud

概念:如果架构发生了变化,您可以随时安全地自动生成"Crud"xml和.java文件,而不会消除任何自定义更改.

问题

  • mybatis会正确处理这种情况,即这个映射器是否会正确执行自动生成的"crud代码"?

    FooMapper fooMapper = sqlSession.getMapper(FooMapper.class);

  • 你推荐什么方法?

编辑1:*我们的数据库设计使用"核心表"("元素"),其他表"扩展"该表并添加额外的属性(共享密钥).我查看了文档和来源得出结论,我不能将Mybatis Generator与这样的'扩展'结合使用而不需要任何手动编辑:

即这不起作用.-ElementMapper扩展"ElementCrudMapper"-FooMapper.xml扩展"ElementCrudMapper"和"FooCrudMapper"

谢谢大家!

Lar*_*y.Z 21

我可以分离生成的文件和手工编辑的文件.

我使用mybatis-spring和spring来管理dao接口.这个库允许MyBatis参与Spring事务,负责构建MyBatis映射器和SqlSessions并将它们注入其他bean,将MyBatis异常转换为Spring DataAccessExceptions,最后,它允许您构建您的应用程序代码,不依赖于MyBatis,Spring或MyBatis-Spring.

对于DAO接口,我编写了一个通用的MybatisBaseDao来表示由mybatis生成器生成的基接口.

    public interface MybatisBaseDao<T, PK extends Serializable, E> {
    int countByExample(E example);

    int deleteByExample(E example);

    int deleteByPrimaryKey(PK id);

    int insert(T record);

    int insertSelective(T record);

    List<T> selectByExample(E example);

    T selectByPrimaryKey(PK id);

    int updateByExampleSelective(@Param("record") T record, @Param("example") E example);

    int updateByExample(@Param("record") T record, @Param("example") E example);

    int updateByPrimaryKeySelective(T record);

    int updateByPrimaryKey(T record);
    }
Run Code Online (Sandbox Code Playgroud)

当然,您可以BaseDao根据自己的需求定制.例如我们有一个UserDao,然后你可以这样定义它

public interface UserDao extends MybatisBaseDao<User, Integer, UserExample>{
    List<User> selectUserByAddress(String address); // hand edited query method
}
Run Code Online (Sandbox Code Playgroud)

对于映射器xml文件,我在mapper(.xml)基本文件夹中创建两个包,以分隔生成的文件和手动编辑的文件.对于UserDao上面,我将生成器生成的UserMapper.xml放在名为'generated'的包中.我把所有手写mapper sqls放到名为的包中的另一个UserMapper.xml文件中manual.两个映射器文件以相同的标头开头<mapper namespace="com.xxx.dao.UserDao" >.Mybatis可以扫描xml映射文件,自动映射sql和相应的接口方法.

对于生成的实体和示例对象,我直接覆盖它们.

我希望上面的方法可以帮到你!