數據庫中有兩張表:一張User表,和一張Order表,訂單表中有一個外鍵user_id指向User表的id
POJO:
User:
package com.xiaowen.pojo;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String username;// 用戶姓名
private String sex;// 性別
private Date birthday;// 生日
private String address;// 地址
private List<Orders> ordersList;
public List<Orders> getOrdersList() {
return ordersList;
}
public void setOrdersList(List<Orders> ordersList) {
this.ordersList = ordersList;
}
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
String str = "";
for (Orders orders : ordersList) {
str += "username:" + username + " number:" + orders.getNumber() + "\n";
}
return str;
}
}
Orders:
package com.xiaowen.pojo;
import java.io.Serializable;
import java.util.Date;
public class Orders implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number == null ? null : number.trim();
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note == null ? null : note.trim();
}
@Override
public String toString() {
return "Orders{" +
"id=" + id +
", userId=" + userId +
", number='" + number + '\'' +
", createtime=" + createtime +
", note='" + note + '\'' +
",username"+user.getUsername()+
'}';
}
}
需求一:查詢訂單,以及訂單對應的用戶名稱:
OrderMapper接口:
package com.xiaowen.mapper;
import com.xiaowen.pojo.Orders;
import java.util.List;
public interface OrderMapper {
//一對一關聯查詢,以訂單爲中心關聯用戶
public List<Orders> selectOrders();
}
OrderMapper.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">
<!--寫sql語句-->
<!--命名空間-->
<mapper namespace="com.xiaowen.mapper.OrderMapper">
<resultMap id="order" type="Orders">
<id column="id" property="id"/>
<result column="uId" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<!--一對一標籤-->
<association property="user" javaType="User">
<id column="uId" property="id"/>
<result column="username" property="username"/>
</association>
</resultMap>
<select id="selectOrders" resultMap="order">
select
o.id,
o.number,
o.createtime,
u.id as uId,
u.username
from orders o
left join user u
on o.user_id=u.id
</select>
</mapper>
resultMap中id與select標籤中resultMap對應,resultMap的column與sql語句中的字段名對應,property與pojo中的屬性名相對應。
測試代碼:
//加載核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//創建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//創建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//由SqlSesstion生成接口的實現類
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
List<Orders> orders = orderMapper.selectOrders();
for (Orders order : orders) {
System.out.println(order);
}
輸出:
Orders{id=3, userId=1, number='1000010', createtime=Wed Feb 04 13:22:35 CST 2015, note='null'username王五}
Orders{id=4, userId=1, number='1000011', createtime=Tue Feb 03 13:22:41 CST 2015, note='null'username王五}
Orders{id=5, userId=10, number='1000012', createtime=Thu Feb 12 16:13:23 CST 2015, note='null'username張三}
需求二:查詢某用戶的所有訂單信息:
UserMapper接口:
package com.xiaowen.mapper;
import com.xiaowen.pojo.User;
public interface UserMapper {
public User selectOrdersById(Integer id);
}
UserMapper.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">
<!--寫sql語句-->
<!--命名空間-->
<mapper namespace="com.xiaowen.mapper.UserMapper">
<resultMap id="user" type="User">
<id column="user_id" property="id"></id>
<result column="username" property="username"></result>
//一對多使用collection標籤
<collection property="ordersList" ofType="Orders">
<id column="id" property="id"></id>
<result column="number" property="number"></result>
<result column="createtime" property="createtime"></result>
</collection>
</resultMap>
<select id="selectOrdersById" parameterType="Integer" resultMap="user">
select
o.id,
o.user_id,
o.number,
o.createtime,
u.username
from user u
left join orders o
on o.user_id=u.id
where u.id=#{id}
</select>
</mapper>
測試代碼:
@Test
public void selectOrdersById()throws Exception{
//加載核心配置文件
String resource="sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//創建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//創建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectOrdersById(1);
System.out.println(user);
}
運行結果:
username:王五number:1000010
username:王五number:1000011