Mybatis—学习过程—Mybatis复杂映射操作
1.一对一
实体类
public class User {
private Integer id;
private String username;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
'}';
}
}
public class Order {
private Integer id;
private String orderTime;
//金额
private double total;
//表示该订单属于哪个用户
private User user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderTime() {
return orderTime;
}
public void setOrderTime(String orderTime) {
this.orderTime = orderTime;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", orderTime='" + orderTime + '\'' +
", total=" + total +
", user=" + user +
'}';
}
}
持久层
public interface IUserMapper {
// 查询订单的同时还查询该订单所属的用户
List<Order> findOrderAndUser();
}
mapper.xml文件
<mapper namespace="com.lagou.mapper.IUserMapper">
<!-- id就是给这段映射关系起一个名字,type表示要封装到那个实体对象中去-->
<resultMap id="orderMap" type="com.lagou.pojo.Order">
<result property="id" column="id"/>
<result property="orderTime" column="orderTime"/>
<result property="total" column="total"/>
<!-- association标签中 property属性对应着的就是Order这个实体中user这个属性名
javaType表示当前property配置的属性名的类型-->
<association property="user" javaType="com.lagou.pojo.User">
<result property="id" column="uid"/>
<result property="username" column="username"/>
</association>
</resultMap>
<!-- resultMap:手动配置实体属性与表字段的关系,resultMap=谁就是按照谁的关系封装-->
<select id="findOrderAndUser" resultMap="orderMap">
select * from orders o,user u where o.uid=u.id
</select>
</mapper>
测试类
public class MybatisTest {
@Test
public void test1() throws IOException {
//将配置文件以流的形式加载到内存
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//SqlSessionFactoryBuilder()使用build方法创建 SqlSessionFactory工厂生产sqlSession对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//sqlSessionFactory.openSession():sqlSessionFactory开启事务
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取IUserMapper.class类的代理对象
IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
//代理执行findOrderAndUser方法,之后返回一个order对象
List<Order> orderAndUser = mapper.findOrderAndUser();
for (Order order : orderAndUser) {
System.out.println(order);
}
}
}
结果