@Results 注解
代替的是标签<resultMap>
该注解中可以使用单个@Result 注解,也可以使用@Result 集合
@Results({@Result(),@Result()})或@Results(@Result())
@Result 注解
代替了 <id> 标签和<result> 标签
@Result 中 属性介绍:
id 是否是主键字段
column 数据库的列名
property 需要装配的属性名
one 需要使用的@One 注解(@Result(one=@One)()))
many 需要使用的@Many 注解(@Result(many=@many)()))
@One 注解(一对一)
代替了<assocation> 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。
@One 注解属性介绍:
select 指定用的 来多表查询的 sqlmapper
fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。。
使用格式:
@Result(column=" ",property="",one=@One(select=""))
@Many 注解(多对一)
代替了<Collection> 标签, 是是多表查询的关键,在注解中用来指定子查询返回对象集合。
注意:聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType
(一般为 ArrayList)但是注解中可以不定义;
使用格式:
@Result(property="",column="",many=@Many(select=""))
一对一关联映射
查询所有的账户以及他关联的用户信息,一个账户只能对应一个唯一的用户
在Account实体类中加入User
@Data
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
//一个账户只可能对应一个用户
private User user;
}
定义Account的mapper
public interface AccountMapper {
//采用延迟加载
@Select("select * from account")
@Results(id = "accountMap",
value = {
@Result(id = true, column = "id", property = "id"),
@Result(column = "uid", property = "uid"),
@Result(column = "money", property = "money"),
@Result(column = "uid",property = "user",one = @One(select = "com.it.mapper.UserMapper.findById",fetchType = FetchType.LAZY))
}
)
List< Account> findAll();
}
解析
@Result(column = "uid",property = "user",one = @One(select = "com.it.mapper.UserMapper.findById",fetchType = FetchType.LAZY))
- @One(select = "com.it.mapper.UserMapper.findById",fetchType = - FetchType.LAZY)) 调用usermapper中的根据id查询的方法,懒加载
- column = "uid" 将account的uid作为查询参数
- property = "user" 查到一个user对象的封装到user属性中
usermapper 中用一个通过userid查询user的接口
@Select("select * from user where id = #{uid}")
@ResultMap("userMap")
User findById(Integer userId);
查询情况
@Test
public void testFindAll(){
List<Account> accounts = accountMapper.findAll();
}
Comments | NOTHING