骑士の物语
>
Mybatis 中注解式多表关联查询
@Results 对应XML 中的 resultMap @Result 对应XML 中的 resultType @resultMap 只接收@Reults 中ID的参数,来实现@Results的复用
@Reults 有ID和value两个值 ID接收字符串 value接受{}
内包含至少一个@Result
默认值可仅使用value 可省略 @Reults({@Result()})
@Result 可使用对应注解
many=@many()
@many() 有两个属性 select 参数为其他mapper方法的完整路径名 和 加载方式参数
one-@one()
@Select(“SELECT r.roleDetails,r.roleID,r.roleName FROM role r LEFT JOIN account_role ar ON r.roleID=ar.roleID WHERE ar.Uuid=#{uuid}”) @Results({@Result(property = “roleid”, column = “roleid”), @Result(property = “powerList”, column = “roleID”, many = @Many(select = “com.mapper.PowerMapper.findPower”, fetchType = FetchType.LAZY))})
fetchType = FetchType.LAZY 既使用延迟加载模式,不加该属性默认不使用延迟加载延迟加载有可能会追加多余的字段hander,在配合缓存使用时,会造成序列化异常,故不建议一起使用
作为传递关联查询的参数需要额外填写对应关系,否则映射对象不能获取值
@Results({@Result(property = “映射一对多对象的属性名”, column = “实体列名”), @Result(property = “映射一对多对象的属性名”, column = “实体列名,同时也是传递到级联查询的参数”, many = @Many(select = “级联查询的完整方法名”, fetchType = 加载方式))})
3.53批量插入使用备注
/** * 通用Mapper接口,特殊方法,批量插入,支持批量插入的数据库都可以使用,例如mysql,h2等 * * @param <T> 不能为空 * @author liuzh */ public interface InsertListMapper<T> { /** * 批量插入,支持批量插入的数据库可以使用,例如MySQL,H2等,另外该接口限制实体包含`id`属性并且必须为自增列 * * @param recordList * @return */ @Options(useGeneratedKeys = true, keyProperty = "id") @InsertProvider(type = SpecialProvider.class, method = "dynamicSQL") int insertList(List<T> recordList); /** * ======如果主键不是id怎么用?========== * 假设主键的属性名是uid,那么新建一个Mapper接口如下 * <pre> public interface InsertUidListMapper<T> { @Options(useGeneratedKeys = true, keyProperty = "uid") @InsertProvider(type = SpecialProvider.class, method = "dynamicSQL") int insertList(List<T> recordList); } * 只要修改keyProperty = "uid"就可以 * * 然后让你自己的Mapper继承InsertUidListMapper<T>即可 * * </pre> */ } /** * 通用Mapper接口,特殊方法,批量插入,支持批量插入的数据库都可以使用,例如mysql,h2等 * * @param <T> 不能为空 * @author liuzh */ public interface InsertUseGeneratedKeysMapper<T> { /** * 插入数据,限制为实体包含`id`属性并且必须为自增列,实体配置的主键策略无效 * * @param record * @return */ @Options(useGeneratedKeys = true, keyProperty = "id") @InsertProvider(type = SpecialProvider.class, method = "dynamicSQL") int insertUseGeneratedKeys(T record); /** * ======如果主键不是id怎么用?========== * 假设主键的属性名是uid,那么新建一个Mapper接口如下 * <pre> public interface InsertUidMapper<T> { @Options(useGeneratedKeys = true, keyProperty = "id") @InsertProvider(type = SpecialProvider.class, method = "dynamicSQL") int insertUseGeneratedKeys(T record); } * 只要修改keyProperty = "uid"就可以 * * 然后让你自己的Mapper继承InsertUidListMapper<T>即可 * * </pre> */ }