引:
“一个用户可以有多个订单,多个订单也可以归一个用户所有。”
本文主要实现《Java EE企业级应用开发教程(Spring+SpringMVC+Mybatis)》第2版中第4章中的MyBatis一对一查询。
本文使用工具:IDEA2024、jdk1.8、maven3.6.3
jdk1.8下载地址:
jdk1.8.0_131.zip链接:
(1)百度网盘:
通过网盘分享的文件:jdk1.8.0_131.zip
链接: https://pan.baidu.com/s/1KfrWgmzk720RHxlMcySPow?pwd=49dt 提取码: 49dt
(2) 夸克网盘
我用夸克网盘给你分享了「jdk_8.0.1310.11.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/82383b6hcL😕
链接:https://pan.quark.cn/s/25b5829aba22?pwd=qwK9
提取码:qwK9
Maven3.6.3下载地址链接:
(1)百度网盘
通过网盘分享的文件:apache-maven-3.6.3.zip
链接: https://pan.baidu.com/s/1hDekReMQF-CdbO6SSBpPaQ?pwd=ke73 提取码: ke73
(2)夸克网盘
我用夸克网盘给你分享了「apache-maven-3.6.3.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/fd6c3b6gww😕
链接:https://pan.quark.cn/s/1f109c6b6581?pwd=Rq2P
提取码:Rq2P
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
本文源代码下载地址:
(1)百度网盘
通过网盘分享的文件:ch04(Mybatis关联映射).zip
链接: https://pan.baidu.com/s/1dCjdWJaEDa0LIN_M0H2bew?pwd=8p36 提取码: 8p36
(2)夸克网盘
我用夸克网盘给你分享了「ch04(Mybatis关联映射).zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/33a13b6hTX😕
链接:https://pan.quark.cn/s/99b916923d33?pwd=sfjN
提取码:sfjN
0.数据库创建
我们按照下面的方式创建数据库和数据表
-- 创建数据库CREATEDATABASEIFNOTEXISTSmybatis;-- 使用数据库USEmybatis;-- 创建tb_user表CREATETABLEIFNOTEXISTStb_user(idINT(32)PRIMARYKEYAUTO_INCREMENT,usernamevarchar(256),addressvarchar(256));-- 插入数据INSERTINTOtb_userVALUES('1','小明','北京');INSERTINTOtb_userVALUES('2','李华','上海');INSERTINTOtb_userVALUES('3','李刚','上海');-- 创建tb_orders表CREATETABLEIFNOTEXISTStb_orders(idINT(32)PRIMARYKEYAUTO_INCREMENT,numbervarchar(32)NOTNULL,user_idint(32)NOTNULL,FOREIGNKEY(user_id)REFERENCEStb_user(id));-- 插入数据INSERTINTOtb_ordersVALUES('1','1001','1');INSERTINTOtb_ordersVALUES('2','1002','2');INSERTINTOtb_ordersVALUES('3','1003','3');1.项目创建
项目创建过程可以参考这篇文章:IDEA 2024版本创建maven项目的方式有哪些?
这里选择使用maven的方式创建
打开IDEA,点击“文件—>新建—>项目”
这里使用生成器生成maven项目(maven配置正确才能正常构建)
jdk版本选的1.8
Archtype选择的是webapp,点击“创建”,等待一段时间后,项目构建完毕。
maven构建完项目后如下
出现上面的SUCCESS,空白的maven项目就创建完毕了。
下面开始引入依赖文件。
我们打开项目的pom.xml
参考下面的代码引入mybatis和mysql等依赖
<projectxmlns="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,选择是“类”
参考代码如下:
packagecom.itheima.pojo;publicclassOrders{privateIntegerid;//订单idprivateStringnumber;//订单编号publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetNumber(){returnnumber;}publicvoidsetNumber(Stringnumber){this.number=number;}@OverridepublicStringtoString(){return"Orders{"+"id="+id+", number='"+number+'\''+'}';}}生成后项目代码如下:
再按照同样方式生成一个类,类名是Users
类名是User
参考代码如下:
packagecom.itheima.pojo;importjava.util.List;publicclassUsers{privateIntegerid;//用户idprivateStringusername;//用户姓名privateStringaddress;//用户地址privateList<Orders>ordersList;//用户关联订单publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.address=address;}publicList<Orders>getOrdersList(){returnordersList;}publicvoidsetOrdersList(List<Orders>ordersList){this.ordersList=ordersList;}@OverridepublicStringtoString(){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"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.itheima.mapper.UsersMapper"><selectid="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类 --><resultMaptype="com.itheima.pojo.Users"id="UserWithOrdersResult"><idproperty="id"column="id"/><resultproperty="username"column="username"/><resultproperty="address"column="address"/><collectionproperty="ordersList"ofType="com.itheima.pojo.Orders"><idproperty="id"column="orders_id"/><resultproperty="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" ?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 环境配置 --><!-- 加载类路径下的属性文件 --><propertiesresource="db.properties"/><typeAliases><packagename="com.itheima.pojo"/></typeAliases><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><!-- 数据库连接相关配置 ,db.properties文件中的内容--><dataSourcetype="POOLED"><propertyname="driver"value="${mysql.driver}"/><propertyname="url"value="${mysql.url}"/><propertyname="username"value="${mysql.username}"/><propertyname="password"value="${mysql.password}"/></dataSource></environment></environments><!-- 配置Mapper文件 --><mappers><mapperresource="com/itheima/mapper/UserMapper.xml"/></mappers></configuration>创建完后,项目结构如下
6.创建测试类
右击src文件夹,选择“新建”—>”目录”
这里文件夹是 test/java
注意颜色,测试文件夹是绿色,如果不是绿色需要手动标记成测试源。
右击绿色的java文件夹,选择“新建”—>”Java类”
类名为 MyBatisTest
参考代码如下:
importcom.itheima.pojo.Users;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Test;importjava.io.IOException;importjava.io.Reader;publicclassMyBatisTest{@TestpublicvoidfindUserWithOrdersTest(){//读取文件名Stringresources="mybatis-config.xml";//创建流Readerreader=null;try{//读取mybatis-config.xml文件内容到reader对象中reader=Resources.getResourceAsReader(resources);}catch(IOExceptione){e.printStackTrace();}//初始化mybatis数据库,创建SqlSessionFactory类的实例SqlSessionFactorysqlMapper=newSqlSessionFactoryBuilder().build(reader);//创建SqlSession实例SqlSessionsession=sqlMapper.openSession();//传入参数查询,返回结果Usersusers=session.selectOne("com.itheima.mapper.UsersMapper.findUserWithOrders",1);System.out.println(users);//关闭sessionsession.close();}}添加完后项目结构如下:
测试效果如下: