现在我们有两张表
一张是用户表 一张是账户表
我们期望输出每一个账户的时候 输出这个账户对应的用户
user表
account表
解决思路
首先我们得写出sql语句,只要写完这个其他的都只是配置问题罢了
SELECT u.*,a.MONEY,a.ID aid,a.UID FROM account a
INNER JOIN `user` u
HAVING a.UID=u.id;
其次我们有两条路可以走
第一种方法
是再创建一个类 就像对应我们的用户表和账户表一样
写出我们所需要的字段,然后添加getter,setter等等
因为这种方法不常用 毕竟我们不可能为了执行一个查询 就创建一个类
如果这样做 最后会有一堆类 显得繁杂
这里就不演示了
因为跟我们之前配置用户类 账户类是相同的操作
第二种方法
我们只需要在配置文件中 配置一个名为resultMap的标签 来帮我们完成映射
回顾一下
我们之前的写法是写一个resultType
就像下面这样
<select id="selectAll" resultType="com.tubai.domain.Account">
select * from account;
</select>
前期准备
在配置resultMap前 我们先做一点准备
我们得先在Account类中添加一个属性
//用来与用户类建立联系
private User user;
并添加getter和setter
resultMap的写法
<!--这的id是一个标识,等会下面的resultMap属性就填这的id-->
<!--type是类的完全限定名, 或者一个类型别名。
用于指定封装的类型-->
<resultMap id="userAccountMapper" type="com.tubai.domain.Account">
<!--property放java中写的属性 而colunm则是数据库的列名-->
<!--id是当前命名空间中的一个唯一标识,用于标识一个结果映射。因此我们一般放主键-->
<id property="ID" column="aid"></id>
<!--而result用于放其他字段-->
<result property="UID" column="uid"></result>
<result property="money" column="money"></result>
<!--根据uid映射到user的各个属性-->
<!--javaType是一个 Java 类的全限定名,或一个类型别名-->
<!--association是一个复杂类型的关联;许多结果将包装成这种类型-->
<association property="user" column="uid" javaType="com.tubai.domain.User">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="sex" column="sex"></result>
<result property="address" column="address"></result>
<result property="birthday" column="birthday"></result>
</association>
</resultMap>
<select id="selectAllWithUser" resultMap="userAccountMapper">
SELECT u.*,a.MONEY,a.ID as aid,a.UID FROM account a
INNER JOIN `user` u
HAVING a.UID=u.id;
</select>
具体解释请移步官方文档:
https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps
通过以上配置 我们就成功的完成了表的一对一查询