一对一
扩展
创建Orders的扩展类OrdersExtend,添加要查找的user表里的字段
package com.company.model;
public class OrdersExtend extends Orders {
private String username;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "OrdersExtend{" +
"username='" + username + '\'' +
", address='" + address + '\'' +
'}' + super.toString();
}
}
OrdersMapper.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="com.company.mapper.OrdersMapper">
<select id="getOrderById" parameterType="int" resultType="ordersExtend">
SELECT o.*,u.username,u.address
FROM orders o ,user u
WHERE o.user_id = u.id
and o.id = #{id}
</select>
</mapper>
@Test
public void func8() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession();
OrdersMapper ordersMapper = session.getMapper(OrdersMapper.class);
OrdersExtend order = ordersMapper.getOrderById(3);
// OrdersExtend{username='王五', address='null'}Orders{id=3, user_id=1, number='1000010', createtime=Wed Feb 04 13:22:35 CST 2015, note='null'}
}
模型
模型Orders里添加User属性
<resultMap id="orderResultMap" type="orders">
<id column="id"></id>
<id column="number"></id>
<id column="createtime"></id>
<id column="note"></id>
<association property="user" javaType="user">
<id column="user_id" property="id"></id>
<id column="username" property="username"></id>
<id column="address" property="address"></id>
</association>
</resultMap>
<select id="getOrderById2" parameterType="int" resultMap="orderResultMap">
SELECT o.*,u.username,u.address
FROM orders o ,user u
WHERE o.user_id = u.id
and o.id = #{id}
</select>
@Test
public void func8() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession();
OrdersMapper ordersMapper = session.getMapper(OrdersMapper.class);
Orders order = ordersMapper.getOrderById2(3);
// Orders{id=0, user_id=0, number='null', createtime=null, note='null', user=User{id=1, username='王五', sex='null', birthday=null, address='null'}}
}
一对多
模型Orders里添加OrderDetail属性
private List<OrderDetail> orderDetails;
OrdersMapper.xml
<resultMap id="orderResultMap2" type="orders">
<id column="id"></id>
<id column="number"></id>
<id column="createtime"></id>
<id column="note"></id>
<association property="user" javaType="user">
<id column="user_id" property="id"></id>
<id column="username" property="username"></id>
<id column="address" property="address"></id>
</association>
<collection property="orderDetails" ofType="orderDetail">
<id column="detail_id" property="id"></id>
<id column="items_id" property="itemsId"></id>
<id column="items_num" property="itemsNum"></id>
</collection>
</resultMap>
<select id="getOrderById3" parameterType="int" resultMap="orderResultMap2">
SELECT
o.*,
u.username,
u.address,
od.id detail_id,
od.items_id,
od.items_num
FROM
orders o,
user u,
orderdetail od
WHERE
o.user_id = u.id
and o.id = od.orders_id
and o.id = #{id}
</select>
多对多
UserMapper.xml
<resultMap id="userAndOrderResultMap" type="user">
<id column="id" property="id"></id>
<result column="username" property="username"></result>
<result column="address" property="address"></result>
<collection property="ordersList" ofType="orders">
<id column="order_id" property="id"></id>
<result column="number" property="number"></result>
<result column="createtime" property="createtime"></result>
<result column="note" property="note"></result>
<result column="number" property="number"></result>
<collection property="orderDetails" ofType="orderDetail">
<id column="detail_id" property="id"></id>
<result column="items_id" property="itemsId"></result>
<result column="items_num" property="itemsNum"></result>
<association property="items" javaType="items">
<id column="items_id" property="id"></id>
<result column="name" property="name"></result>
<result column="price" property="price"></result>
<result column="detail" property="detail"></result>
</association>
</collection>
</collection>
</resultMap>
<select id="getUserAndOrder" resultMap="userAndOrderResultMap">
SELECT
user.id,
user.username,
user.address,
orders.id order_id,
orders.number,
orders.createtime,
orders.note,
orders.number,
orderdetail.id detail_id,
orderdetail.items_id ,
orderdetail.items_num ,
items.name,
items.detail,
items.price
FROM
user,
orders,
orderdetail,
items
WHERE
orders.user_id = user.id
and orders.id = orderdetail.orders_id
and orderdetail.items_id = items.id
</select>
@Test
public void func() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
List<User> users = userMapper.getUserAndOrder();
for (User user : users) {
System.out.println(user);
for (Orders order : user.getOrdersList()) {
System.out.println(order);
for (OrderDetail orderDetail : order.getOrderDetails()) {
System.out.println(orderDetail + ":" + orderDetail.getItems());
}
System.out.println("===============");
}
}
}
懒加载
OrdersMapper.xml
<association property="user" select="com.company.mapper.UserMapper.getUserById" column="user_id"></association>
<resultMap id="orderLazyLoadResultMap" type="orders">
<id property="id" column="id"></id>
<id property="note" column="note"></id>
<id property="number" column="number"></id>
<id property="createtime" column="createtime"></id>
<association property="user" select="com.company.mapper.UserMapper.getUserById" column="user_id"></association>
</resultMap>
<select id="getOrderAndUserByLazyLoading" resultMap="orderLazyLoadResultMap">
select * from orders
</select>
SqlMapConfig.xml
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
@Test
public void func() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession();
OrdersMapper ordersMapper = session.getMapper(OrdersMapper.class);
List<Orders> orders = ordersMapper.getOrderAndUserByLazyLoading();
for (Orders order : orders) {
System.out.println(order);
System.out.println(order.getUser());
}
}