精选圈子榜单优站
编程综合
编程综合
技术
20关注
编程技术记录、分享 ,记录你的编程生活点点滴滴!

Mybatis Generator使用最佳实践


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。


  • 若文章侵犯了您的权益,请联系我们进行处理。

  • 2017-11-07
  • 4089阅读
评论