目录
Intro
业务中往往多个表之间会存在关联关系,比如用户和银行账户之间,通过在账户中加上用户id作为外键来实现两个表的关联。类似的情况有一对一、多对多、一对多、多对一等状况。显然,在实现账户的javabean类的时候,如果把用户的信息直接作为属性保存,可以减少对数据库的检索。但是怎么样使用MyBatis保存这种级联关系呢?
ACCOUNT:
USER:
ROLE:
USER_ROLE:
resultMap的使用场景
- 数据库中一般习惯使用下划线命名法,如role_name、role_desc,而在java的编程习惯中一般会命名为roleName和roleDesc,这种情况下mybatis无法将属性自动的与数据库中的数据对应,因此需要使用resultMap来进行属性的对齐。
- 对于这种在一个类中关联另一个类的查询,一般使用resultMap,这样对于属性的对应更加方便与灵活
resultMap的标签
- id标签:主键对应的属性,property属性代表bean类中的属性名称,column属性代表查询结果的列名
- result:除了主键之外的属性
- association:对应于一对一的情况,即A类中属性中只有一个B类的对象,javaType属性代表B类的类名
- collection:对应于多对多的情况,即A类中属性存在B类属性的列表,ofType属性代表B类的类名
一对多关系
一对多关系可以看作一对一关系处理。每个user拥有多个账户,然而每个账户只能属于一个user。因此我们可以将user的信息保存在account类中,减少数据库的搜索次数。
select u.*,a.id as aid,a.money as money from user u inner join account a on u.id=a.UID
AccountDao.xml
<mapper namespace = "com.billsjc.dao.AccountDao">
<resultMap id="accountMap" type="account">
<id property="id" column="aid"></id>
<result property="uid" column="id"></result>
<result property="money" column="money"></result>
<association property="user" javaType="user">
<id property="id" column="id"></id>
<result property="username" column