在mybatis中,我们会使用联合查询和分布查询,但是有时候我们会发现查询出来的有些字段会丢失,这可能是直接使用select * 查询的结果。
下面描述一下我遇到的情况:
Key类(钥匙类):
public class Key {
private String id;
private String keyName;
private Lock lock;
}
Lock类(锁子类):
public class Lock {
private String id;
private String LockName;
}
注:get/set等方法已省略。
dao:
public interface KeyAndLockDao {
//把key跟lock一起查出
public Key getKeyById(String id);
//测试分布查询
public Lock getLockById(String id);
}
xml:
<!-- 查锁子-->
<select id="getLockById" resultType="com.bean.Lock">
select * from t_lock where lock_id=#{id}
</select>
<!--查钥匙-->
<select id="getKeyById" resultMap="myKey">
select * from t_key where id=#{id}
</select>
<resultMap id="myKey" type="com.bean.Key">
<id property="id" column="id"></id>
<result property="keyName" column="key_name"></result>
<association property="lock"
select="com.dao.KeyAndLockDao.getLockById"
column="lock_id">
<id property="id" column="lid"></id>
<result property="LockName" column="lock_name"></result>
</association>
</resultMap>
key表:
lock表:
下面调用getKeyById(),传入id=“1”
如果直接这样查询的话,会导致查询结果中lock_id字段丢失
解决方法:不使用select * ,而是把每个字段都写出来,并起别名与javaBean的属性名相对应。
<!-- 查锁子-->
<select id="getLockById" resultType="com.bean.Lock">
select lock_id as id ,lock_name as LockName from t_lock where lock_id=#{id}
</select>
更改后的查询结果: