引:

“一个用户可以有多个订单,多个订单也可以归一个用户所有。”

本文主要实现《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

Win10如何配置Java JDK环境,请点击这里。

Win10如何配置Maven环境,请点击这里。

IDEA如何配置JDK,请点击这里。

IDEA如何配置Maven,请点击这里。

可能遇到的报错:

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