引:
“一个用户可以有多个订单,多个订单也可以归一个用户所有。”
本文主要实现《Java EE企业级应用开发教程(Spring+SpringMVC+Mybatis)》第2版中第4章中的MyBatis一对一查询。
本文使用工具:IDEA2024、jdk1.8、maven3.6.3
jdk1.8下载地址:jdk1.8.0_131.zip(访问密码: 8855): https://url47.ctfile.com/f/64055047-1502030626-bfbf38?p=8855
Maven3.6.3下载地址:apache-maven-3.6.3.zip (访问密码: 8855): https://url47.ctfile.com/f/64055047-1502030329-d91abe?p=8855
可能遇到的报错:
java.io.IOException: Could not find resource mybatis-config.xml
IDEA 连接数据库报错Public Key Retrieval is not allowed
本文下载源代码在文章末尾。
0.数据库创建
我们按照下面的方式创建数据库和数据表
-- 创建数据库
CREATE DATABASE IF NOT EXISTS mybatis;
-- 使用数据库
USE mybatis;
-- 创建tb_user表
CREATE TABLE IF NOT EXISTS tb_user (
id INT(32) PRIMARY KEY AUTO_INCREMENT,
username varchar(256), address varchar(256)
);
-- 插入数据
INSERT INTO tb_user VALUES('1','小明','北京');
INSERT INTO tb_user VALUES('2','李华','上海');
INSERT INTO tb_user VALUES('3','李刚','上海');
-- 创建tb_orders表
CREATE TABLE IF NOT EXISTS tb_orders (
id INT(32) PRIMARY KEY AUTO_INCREMENT,
number varchar(32) NOT NULL,
user_id int(32) NOT NULL,
FOREIGN KEY(user_id) REFERENCES tb_user(id)
);
-- 插入数据
INSERT INTO tb_orders VALUES('1','1001','1');
INSERT INTO tb_orders VALUES('2','1002','2');
INSERT INTO tb_orders VALUES('3','1003','3');

1.项目创建
项目创建过程可以参考这篇文章:IDEA 2024版本创建maven项目的方式有哪些 – 每天进步一点点
这里选择使用maven的方式创建
打开IDEA,点击“文件—>新建—>项目”

这里使用生成器生成maven项目(maven配置正确才能正常构建)
jdk版本选的1.8
Archtype选择的是webapp,点击“创建”,等待一段时间后,项目构建完毕。

maven构建完项目后如下

出现上面的SUCCESS,空白的maven项目就创建完毕了。
下面开始引入依赖文件。
我们打开项目的pom.xml
参考下面的代码引入mybatis和mysql等依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.guo</groupId>
<artifactId>ch04</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>ch04 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>ch04</finalName>
</build>
</project>

点击刷新依赖,maven就可以下载依赖了。
2.创建实体类
先要创建相关的文件夹

这里创建java文件夹,也就是Maven源目录。这个文件夹创建后是蓝色的。

java这个文件夹如果不是蓝色的,可以右击这个文件夹,选择“将目录标记为”—>”源代码目录”

然后创建实体类的文件夹,com.itheima.pojo
右击java,选择“新建”,然后点击“软件包”

软件包的名字是 com.itheima.pojo,然后回车创建

然后创建实体类,右击pojo文件夹,选择“新建”—>”Java类”

类名是 Orders,选择是“类”

参考代码如下:
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 + '\'' +
'}';
}
}
生成后项目代码如下:

再按照同样方式生成一个类,类名是Users

类名是User

参考代码如下:
package com.itheima.pojo;
import java.util.List;
public class Users {
private Integer id; //用户id
private String username; //用户姓名
private String address; //用户地址
private List<Orders> 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<Orders> getOrdersList() {
return ordersList;
}
public void setOrdersList(List<Orders> ordersList) {
this.ordersList = ordersList;
}
@Override
public String toString() {
return "Users{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
", ordersList=" + ordersList +
'}';
}
}
创建完后,项目如下所示

3.创建映射文件
选择“resources”文件夹,右击,选择“新建”—>”目录”

创建com.itheima.mapper文件夹

如果出现上面的提示,可以把文件的名字改为com/itheima/mapper
按回车后生成相关文件夹

然后,右击mapper文件夹,选择“新建”—>”文件”

文件名称为 “UsersMapper.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.itheima.mapper.UsersMapper">
<select id="findUserWithOrders" parameterType="Integer" resultMap="UserWithOrdersResult">
SELECT u.*,o.id as orders_id,o.number
from tb_user u,tb_orders o
WHERE u.id =o.user_id
AND u.id = #{id}
</select>
<!-- 一对多关联映射:collection,ofType表示属性集合中的元素类型,List<Orders>属性即Orders类 -->
<resultMap type="com.itheima.pojo.Users" id="UserWithOrdersResult">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
<collection property="ordersList" ofType="com.itheima.pojo.Orders">
<id property="id" column="orders_id"/>
<result property="number" column="number"/>
</collection>
</resultMap>
</mapper>
创建后项目如下:

4.创建数据库配置文件db.properties
右击“resources”文件夹,选择“新建”——>”文件”

文件名称为db.properties

参考代码如下:
mysql.driver=com.mysql.cj.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false mysql.username=root mysql.password=123456
注意,此处要修改为你自己的数据库的用户名和密码。
5.创建mybatis配置文件mybatis-config.xml
右击“resources”文件夹,选择“新建”——>”文件”

文件名称为 mybatis-config.xml

参考代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 环境配置 -->
<!-- 加载类路径下的属性文件 -->
<properties resource="db.properties"/>
<typeAliases>
<package name="com.itheima.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 数据库连接相关配置 ,db.properties文件中的内容-->
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!-- 配置Mapper文件 -->
<mappers>
<mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>
</configuration>
创建完后,项目结构如下

6.创建测试类
右击src文件夹,选择“新建”—>”目录”

这里文件夹是 test/java

注意颜色,测试文件夹是绿色,如果不是绿色需要手动标记成测试源。
右击绿色的java文件夹,选择“新建”—>”Java类”

类名为 MyBatisTest

参考代码如下:
import com.itheima.pojo.Users;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.Reader;
public class MyBatisTest {
@Test
public void findUserWithOrdersTest() {
//读取文件名
String resources = "mybatis-config.xml";
//创建流
Reader reader = null;
try {
//读取mybatis-config.xml文件内容到reader对象中
reader = Resources.getResourceAsReader(resources);
} catch (IOException e) {
e.printStackTrace();
}
//初始化mybatis数据库,创建SqlSessionFactory类的实例
SqlSessionFactory sqlMapper = new
SqlSessionFactoryBuilder().build(reader);
//创建SqlSession实例
SqlSession session = sqlMapper.openSession();
//传入参数查询,返回结果
Users users = session.selectOne("com.itheima.mapper.UsersMapper.findUserWithOrders", 1);
System.out.println(users);
//关闭session
session.close();
}
}
添加完后项目结构如下:

测试效果如下:

本文参考代码如下:
ch04(2).zip:
(密码:7381)
https://url47.ctfile.com/f/64055047-8535556848-6494dd?p=7381