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