Nemo

Nemo 关注TA

路漫漫其修远兮,吾将上下而求索。

Nemo

Nemo

关注TA

路漫漫其修远兮,吾将上下而求索。

  •  普罗旺斯
  • 负责帅就完事了
  • 写了1,496,113字

该文章投稿至Nemo社区   Java  板块 复制链接


Mybatis Generator使用最佳实践

发布于 2017/11/07 14:53 3,661浏览 0回复 2,110

1. 不修改generator自动生成的文件,包括model class, example class, dao class, mapper 文件, 有特殊要求的sql,另外新建mapper文件和dao, 其中dao class 应extends 自动生成的dao, mapper中应尽量重用自动生成的mapper文件中的元素,尽量使用include sql子句。

2. 单表操作,尽量使用自动生成的sql, 而不是手写sql, 尤其是update, insert(批量增加除外).

3. 自定义sql中表名应该使用别名,generator.xml中指定要使用的表要指定别名, alias, 别名指定规则:首字母+最后一个单词的全部, 如果只有一个单词,那就用整个单词,如:city 。

例子:


  1. <!-- -->
  2. <table tableName="city" alias="city"/>
  3. <table tableName="sys_user" alias="suser"/>

4. 提倡使用组合,而不是继承, 如一个sql中join了多张表A,B,C,我们可以将他的结果集映射到一个结果类,结果类中的属性就由表A,表B,表C对应的自动生成的Model组成(这样还有好处是会自动生成Swagger相关文档),mapper中重用自动生成的resultMap, 使用associate, 复杂的查询条件重用自动生成的mapper中的查询条件,新建一个example class中由表A,B,C对应的Example class

  1. public class SysUserDetailBean {
  2. /**
  3. * 系统角色信息表
  4. */
  5. private SysRole sysRole;
  6.    
  7. /**
  8. * 系统用户信息表
  9. */
  10. private SysUser sysUser;
  1. <mapper namespace="com.nemo.demo.dao.sys.SysUserDao">

  2. <resultMap id="BaseResultMap" type="com.nemo.demo.model.sys.SysUserDetailBean" >
  3. <association property="sysRole" resultMap="com.nemo.demo.dao.sys.SysRoleMapper.BaseResultMap"/>
  4. <association property="withdrawalSplitTarget" resultMap="com.nemo.demo.dao.sys.SysUserMapper.BaseResultMap"/>
  5. </resultMap>


  6. <select id="selectUserDetailInfo" resultMap="BaseResultMap" parameterType="...">
  7. SELECT
  8. <include refid="com.nemo.demo.dao.sys.SysRoleMapper.Base_Column_List" />,
  9. <include refid="com.nemo.demo.dao.sys.SysUserMapper.Base_Column_List" />
  10. FROM .......
  11. </select>
  12. </mapper>

  1. List<WithdrawalSplitTargetLendBean> list = withdrawalSplitTargetLendDao.selectWithdrawalTargetRepayLend(example);

5. 分页. 可给example设置startIndex, pageSize,mapper中会接收到这两个参数。

6. 想让insert子句返回新增的主键可以这样做, 在generator.xml table元素中指定generatedKey:

  1. <table tableName="sys_user">
  2. <generatedKey column="id" sqlStatement="JDBC"/>
  3. </table>

这样,通过model.getId()将可以获得插入的主键。

7. 一个好用的mapper 文件编辑器eclipse插件,MyBatipse

http://www.jianshu.com/p/4a309d9882ca

8. 使用 <where>子句,不要使用where 1=1。

本文标签
 {{tag}}
点了个评