本文主要实现《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_idcard表
CREATE TABLE IF NOT EXISTS tb_idcard (
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(20) NOT NULL
);
-- 插入数据
INSERT INTO tb_idcard(code) VALUES ('11111111');
INSERT INTO tb_idcard(code) VALUES ('22222222');
-- 创建tb_person
CREATE TABLE IF NOT EXISTS tb_person (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32),
age INT,
sex CHAR(8),
card_id INT UNIQUE,
FOREIGN KEY(card_id) REFERENCES tb_idcard(id)
);
-- 插入两条数据
INSERT INTO tb_person(name,age,sex,card_id) VALUES ('Rose',22,'女',1);
INSERT INTO tb_person(name,age,sex,card_id) VALUES ('jack',23,'男',2);

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>

2.创建实体类
先要创建相关的文件夹

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

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

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

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

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

类名是 IdCard,选择是“类”

代码参考下面:
package com.itheima.pojo;
public class IdCard {
private Integer id; //身份证id
private String code; //身份证号码
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return "IdCard{" +
"id=" + id +
", code='" + code + '\'' +
'}';
}
}
生成后整个项目如下:

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

类名是Person

参考代码如下:
package com.itheima.pojo;
public class Person {
private Integer id; //人员id
private String name; //人员姓名
private Integer age; //人员年龄
private String sex; //人员性别
private IdCard card; //人员关联的证件
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public IdCard getCard() {
return card;
}
public void setCard(IdCard card) {
this.card = card;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", card=" + card +
'}';
}
}
创建完后,项目如下所示

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

创建com.itheima.mapper文件夹

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

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

文件名称为 “IdCardMapper.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.IdCardMapper">
<!-- 根据id查询证件信息 -->
<select id="findCodeByIdCard" parameterType="Integer" resultType="com.itheima.pojo.IdCard">
select * from tb_idcard where id = #{id}
</select>
</mapper>
创建后项目如下。
注意,此处id=findcodeByIdCard爆红是对的,因为还没有做关联。

然后创建第二个文件(PersonMapper.xml)

文件名称是PersonMapper.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.PersonMapper">
<!-- 嵌套查询:通过执行另外一条SQL映射语句来返回预期的特殊类型 -->
<select id="findPersonById" parameterType="Integer" resultMap="IdCardWithPersonResult">
select * from tb_person where id = #{id}
</select>
<resultMap type="com.itheima.pojo.Person" id="IdCardWithPersonResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
<!--一对一 association使用select属性引入另一条SQL语句 -->
<association property="card" column="card_id" javaType="com.itheima.pojo.IdCard"
select="com.itheima.mapper.IdCardMapper.findCodeByIdCard" />
</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/PersonMapper.xml"/>
<mapper resource="com/itheima/mapper/IdCardMapper.xml"/>
</mappers>
</configuration>
创建完后,项目结构如下

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

这里文件夹是 test/java

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

类名为 MyBatisTest

参考代码如下:
import com.itheima.pojo.Person;
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 findPersonByIdTest() {
//读取文件名
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();
//传入参数查询,返回结果
Person person = session.selectOne("com.itheima.mapper.PersonMapper.findPersonById", 1);
System.out.println(person);
//关闭session
session.close();
}
}
添加完后项目结构如下:

测试效果如下:

本文源代码下载:
ch04.zip: (访问密码: 7381)
https://url47.ctfile.com/f/64055047-8529740723-c19c83?p=7381