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 。
例子:
<!-- --><table tableName="city" alias="city"/><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
public class SysUserDetailBean {/*** 系统角色信息表*/private SysRole sysRole;/*** 系统用户信息表*/private SysUser sysUser;
<mapper namespace="com.nemo.demo.dao.sys.SysUserDao"><resultMap id="BaseResultMap" type="com.nemo.demo.model.sys.SysUserDetailBean" ><association property="sysRole" resultMap="com.nemo.demo.dao.sys.SysRoleMapper.BaseResultMap"/><association property="withdrawalSplitTarget" resultMap="com.nemo.demo.dao.sys.SysUserMapper.BaseResultMap"/></resultMap><select id="selectUserDetailInfo" resultMap="BaseResultMap" parameterType="...">SELECT<include refid="com.nemo.demo.dao.sys.SysRoleMapper.Base_Column_List" />,<include refid="com.nemo.demo.dao.sys.SysUserMapper.Base_Column_List" />FROM .......</select></mapper>
List<WithdrawalSplitTargetLendBean> list = withdrawalSplitTargetLendDao.selectWithdrawalTargetRepayLend(example);
5. 分页. 可给example设置startIndex, pageSize,mapper中会接收到这两个参数。
6. 想让insert子句返回新增的主键可以这样做, 在generator.xml table元素中指定generatedKey:
<table tableName="sys_user"><generatedKey column="id" sqlStatement="JDBC"/></table>
这样,通过model.getId()将可以获得插入的主键。
7. 一个好用的mapper 文件编辑器eclipse插件,MyBatipse
http://www.jianshu.com/p/4a309d9882ca