一对多嵌套结果查询
目录
一、创建数据库
二、导入相关依
三、创建POJO实体
四、创建数据库连接信息配置文件
五、创建映射文件
六、创建MyBatis的核心配置文件
七、创建MyBatis的工具类
八、创建测试类
九、运行结果
一、创建数据库
- 连接数据库:在命令窗口输入mysql -u root -p回车然后输入密码回车
- 创建数据库:create database mybatis;
- 创建表和插入数据
use mybatis;
create table tb_user(
id int(10) primary key auto_increment,
username varchar(32) not null,
address varchar(32) not null);
insert into tb_user values(1,'张三','广州'),(2,'李四','上海'),(3,'王五','广州');
create table tb_orders(
id int(10) primary key auto_increment,
number varchar(32) not null,
user_id int(10) not null,
foreign key(user_id) references tb_user(id));
insert into tb_orders values(1,'1000001',1),(2,'1000002',1),(3,'1000003',2);
二、导入相关依
pom.xml代码如下:
4.0.0 org.example Mybatis的关系映射1.0-SNAPSHOT org.mybatis mybatis3.5.2 mysql mysql-connector-java8.0.11 junit junit4.12 compile src/main/java ***.xml true
三、创建POJO实体
在src/main/java目录下创建一个com.itheima.pojo包,在包下分别创建Users.java、Orders.java实体类,代码如下:
Users.java
package com.itheima.pojo;
import java.util.List;
public class Users {
private Integer id; // 用户编号
private String username; // 用户姓名
private String address; // 用户地址
private List 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 getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public List getOrdersList() {
return ordersList;
}
public void setOrdersList(List ordersList) {
this.ordersList = ordersList;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", address="
+ address + ", ordersList=" + ordersList + "]";
}
}
Orders.java
package com.itheima.pojo;
public class Orders {
private Integer id;//订单id
private String number;//订单编号
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public String toString() {
return "Orders{" +
"id=" + id +
", number='" + number +
'}';
}
}
四、创建数据库连接信息配置文件
在项目的src/main/resources目录下创建数据库连接信息配置文件,其命名为:db.properties代码如下:
mysql.driver=com.mysql.cj.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC& characterEncoding=utf-8&useUnicode=true&useSSL=false mysql.username=root mysql.password=123456
五、创建映射文件
在项目的src/main/resources目录下创建一个mapper文件夹,分别在该文件夹下创建UserMapper.xml、OrdersMapper.xml,该文件主要用于配置SQL语句和Java对象之间的映射,使SQL语句查询出来的数据能够被封装成Java对象。
UserMapper.xml:
select u.*,o.id as oid,o.number from tb_user u,tb_orders o where u.id=o.user_id and u.id=#{id}
六、创建MyBatis的核心配置文件
在项目的src/main/resources目录下创建Mybatis的核心配置文件,其命名为:mybatis-config.xml
代码如下:
七、创建MyBatis的工具类
在src/main/java目录下创建一个com.itheima.utils包,在包下创建一个MyBatisUtils.java工具类,代码如下:
package com.itheima.utils;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
// 初始化SqlSessionFactory对象
static {
try {
// 使用MyBatis提供的Resources类加载MyBatis的配置文件
Reader reader =
Resources.getResourceAsReader("mybatis-config.xml");
// 构建SqlSessionFactory工厂
sqlSessionFactory =
new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取SqlSession对象的静态方法
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
八、创建测试类
在src/main/java目录下创建一个com.itheima.test包,在包下创建一个MybatisTest.java测试类,代码如下:
package com.itheima.test;
import com.itheima.pojo.Users;
import com.itheima.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class mybatisTest {
@Test
public void findByIdTest1() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
Users users =
session.selectOne("mapper.UserMapper.findUserOrders", 1);
System.out.print("一对多嵌套结果方式t");
System.out.println(users);
session.commit();
// 关闭SqlSession
session.close();
}
}
九、运行结果



