bean实体类代码
@Data
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer userId;
private String userName;
private String userTel;
private Boolean userSex;
private String userPassword;
private Integer userPowerId;
private List<UserAddress> userAddress;
private String userImg;
private Integer userMoney;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserAddress {
private Integer addressId;
private Integer userId;
private String recipientsName;
private String recipientsTel;
private String recipientsAddress;
dao层接口类代码
public interface UserDAO {
User selectUserById(@Param("userId") Integer userId) throws Exception;
}
collection-嵌套结果
xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserDAO">
<resultMap id="UserMP" type="USER">
<id property="userId" column="user_id"></id>
<result property="userName" column="user_name"></result>
<result property="userTel" column="user_Tel" ></result>
<result property="userSex" column="user_sex"></result>
<result property="userPassword" column="user_password"></result>
<result property="userPowerId" column="user_power_id"></result>
<result property="userImg" column="user_img"></result>
<result property="userMoney" column="user_money"></result>
// property 是在user实体类中的字段名
// ofType 是该字段的类型
<collection property="userAddress"
ofType="UserAddress">
<id column="address_id" property="addressId"></id>
<result property="userId" column="user_id"></result>
<result property="recipientsName" column="recipients_name"></result>
<result property="recipientsTel" column="recipients_Tel"></result>
<result column="recipients_address" property="recipientsAddress"></result>
</collection>
/**
还可以这样写,直接映射userAddressDAO.xml文件,
这样就不用再写一次userAddress实体类和数据库的映射关系了
<collection property="userAddress"
ofType="UserAddress"
resultMap="dao.userAddressDAO.UserAddressMP">
</collection>
*/
</resultMap>
<select id="selectUserById" parameterType="integer" resultMap="UserMP">
select * from User,UserAddress where User.user_id = #{userId}
and User.user_id = UserAddress.user_id
</select>
</mapper>
collection-嵌套查询
xml文件:
//UserDAO.xml 文件
<mapper namespace="dao.UserDAO">
<resultMap id="UserMP" type="USER">
<id property="userId" column="user_id" javaType="integer"></id>
<result property="userName" column="user_name" javaType="String"></result>
<result property="userTel" column="user_Tel" javaType="String"></result>
<result property="userSex" column="user_sex" javaType="boolean"></result>
<result property="userPassword" column="user_password" javaType="String"></result>
<result property="userPowerId" column="user_power_id" javaType="integer"></result>
<result property="userImg" column="user_img" javaType="String"></result>
<result property="userMoney" column="user_money" javaType="integer"></result>
/**
property 为user实体类中的字段名,数据中此字段可以不存在
javaType 为查询之后返回的结果为什么Java类型
ofType 实体类中需要查询的字段为什么类型
select 需要执行的sql语句 dao.UserAddressDAO接口中的selectAddressByUserId方法
column (为数据库中的字段名)第一次查询返回的结果中需要将哪一个字段作为第二次查询的参数
fetchType 是否懒加载,eager 不是 lazy 懒加载
*/
<collection property="userAddress"
javaType="java.util.List"
ofType="UserAddress"
select="dao.UserAddressDAO.selectAddressByUserId"
column="user_id"
fetchType="eager">
</collection>
</resultMap>
<select id="selectUserById" parameterType="integer" resultMap="UserMP">
select * from User where user_id = #{Id}
</select>
//UserAddressDAO.xml 文件
<mapper namespace="dao.UserAddressDAO">
<resultMap id="userAddressMp" type="userAddress">
<id column="address_id" property="addressId" javaType="integer"></id>
<result property="usersId" column="user_id" javaType="integer"></result>
<result property="recipientsName" column="recipients_name" javaType="String"></result>
<result property="recipientsTel" column="recipients_Tel" javaType="String"></result>
<result column="recipients_address" property="recipientsAddress" javaType="String"></result>
</resultMap>
测试类
@Test
public void selectUserById() throws Exception {
User user = userDAO.selectUserById(5);
List<UserAddress> userAddress = user.getUserAddress();
for(UserAddress add:userAddress) {
String recipientsAddress = add.getRecipientsAddress();
System.out.println(recipientsAddress);
}
}
结果
郑州
中国
河南