use*_*465 12 mybatis mybatis-generator
我正在使用Mybatis(用于持久化java到数据库)和Mybatis Generator(用于从数据库模式自动生成映射器xml文件和java接口)的项目.
Mybatis生成器在生成基本crud操作所需的文件方面做得很好.
上下文
对于某些表/类,我们需要比MyBatis Generator工具生成的"crud stuff"更多的"东西"(代码查询等).
有没有办法拥有"两全其美",即使用自动生成以及"自定义代码".如何分离和构建"手动编辑的文件"和"自动生成的文件".
提案
我正在考虑以下内容,即表格"Foo"
自动生成
(其中"Crud"代表"创建读取更新删除")
手编辑
概念:如果架构发生了变化,您可以随时安全地自动生成"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和相应的接口方法.
对于生成的实体和示例对象,我直接覆盖它们.
我希望上面的方法可以帮到你!
| 归档时间: |
|
| 查看次数: |
10202 次 |
| 最近记录: |