首页 技术 正文
技术 2022年11月20日
0 收藏 433 点赞 3,931 浏览 4347 个字

这里搞一个测试场景:

用户和订单,一位用户可以有多个订单,而每个订单只属于一位用户

以用户为中心,相对于订单:一对多

以订单为中心,当对于用户:一对一

两张表结构:

订单表:

Mybatis框架六:关联查询

用户表:

Mybatis框架六:关联查询

对应的POJO类:

User:

package 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; //附加对象List
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() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}}

Orders:

package 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; @Override
public String toString() {
return "Order [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
+ ", note=" + note + ", 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;
} 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;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}}

OrderMapper:

package mapper;import java.util.List;import pojo.Orders;
import pojo.User;public interface OrderMapper { //以订单为中心一对一关联查询
public List<Orders> selectOrders(); //以订单为中心一对多关联查询
public List<User> selectUserList();}

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">
<mapper namespace="mapper.OrderMapper">
<!-- 一对一 -->
<resultMap type="pojo.Orders" id="order">
<result column="id" property="id" />
<result column="user_id" property="userId" />
<result column="number" property="number" />
<association property="user" javaType="pojo.User">
<id column="user_id" property="id" />
<result column="username" property="username" />
</association>
</resultMap>
<select id="selectOrders" resultMap="order">
SELECT
o.id,
o.user_id,
o.number,
o.createtime,
u.username
FROM orders o
left join user u
on o.user_id = u.id
</select> <!--一对多 -->
<resultMap type="pojo.User" id="user">
<id column="user_id" property="id" />
<result column="username" property="username" />
<collection property="ordersList" ofType="pojo.Orders">
<id column="id" property="id" />
<result column="number" property="number" />
</collection>
</resultMap>
<select id="selectUserList" 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
</select></mapper>

测试两个方法:

    @Test
public void testOrderList() throws Exception {
//加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); //SqlSEssion帮我生成一个实现类 (给接口)
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
List<Orders> selectOrdersList = orderMapper.selectOrders(); for (Orders orders : selectOrdersList) {
System.out.println(orders);
}
}
@Test
public void testUserList() throws Exception {
//加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); //SqlSEssion帮我生成一个实现类 (给接口)
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
List<User> users = orderMapper.selectUserList();
for (User user : users) {
System.out.println(user);
} }
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,111
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,584
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,431
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,203
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,838
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,922